2019年4月19日金曜日

Jetson Nano 買ったので darknet で Nightmare と YOLO を動かすまで

巷で話題のJetson Nanoが届いたので、僕でも知ってる超有名シリーズ「darknet」入れて「nightmare」「yolo」あたりを動かしてみたいと思います。


準備



■ 周辺機器揃える


せっかくなので、はりきって電源は5V4Aで、ファンもつけました。


※追記 Jetson Nanoのファン購入に気をつけろ!
コチラの記事にあるように、5Vのファンじゃないと回らない(回りにくい?)ようなのでファンのリンクを追記しました。


一応こっちでも回ってます。



買ったものはこんなところか。
※ 良い子は技適は守ろう。

キーボードやマウス、ディスプレイは、そのへんに転がっているものでOK!!


■ セットアップ


https://dev.classmethod.jp/hardware/nvidia-jetson-nano-setup/

Etcherを使ってイメージを焼く。


■ 刹活孔を突く



・ フルパワー化


https://www.jetsonhacks.com/2019/04/10/jetson-nano-use-more-power/
$ sudo nvpmodel -m 0 
$ sudo jetson_clocks


・ スワップ作成


https://www.jetsonhacks.com/2019/04/14/jetson-nano-use-more-memory/

https://github.com/JetsonHacksNano/installSwapfile
$ cd installSwapfile
$ ./installSwapfile


・ カメラの確認


https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-camera/

基本指すだけ
動いてるか確認する。

$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM),width=3820, height=2464, framerate=21/1, format=NV12' ! nvvidconv flip-method=0 ! 'video/x-raw,width=960, height=616' ! nvvidconv ! nvegltransform ! nveglglessink -e


実践



■ CUDAサンプルとVisionWorksのサンプルの動作確認


https://gihyo.jp/admin/serial/01/ubuntu-recipe/0563?page=4


・ CUDA


$ cp -a /usr/local/cuda-10.0/samples/ ~/
$ cd ~/samples
$ make

すげー時間かかるので気長に待つ。
個別buildの方法もリンク先に書いてある。

ここにビルドされてるので、移動してそれっぽいやつ実行確認。

$ cd bin/aarch64/linux/release
$ ./deviceQuery
$ ./oceanFFT
$ ./smokeParticles
$ ./nbody


・ VisionWorks


$ /usr/share/visionworks/sources/install-samples.sh ~/visionworks/
$ cd ~/visionworks/VisionWorks-1.6-Samples/
$ make

時間かかるので気長に待つ。
ここにビルドされてるので、移動してそれっぽいやつ実行確認。

$ cd bin/aarch64/linux/release/
$ ./nvx_demo_hough_transform
$ ./nvx_demo_motion_estimation

ここまで動けば、環境的には何の問題もないはず。


本題



■ DARKNETインストール


http://takesan.hatenablog.com/entry/2019/04/09/001852
真ん中あたり、DARKNET(YOLO)のインストール


・ makefileの修正

makefileの修正で、-gencodeもコメントしないとダメでした。

GPU=1 # 修正
CUDNN=1 # 修正
CUDNN_HALF=1 # 修正
OPENCV=1 # 修正
AVX=0
OPENMP=0
LIBSO=0
ZED_CAMERA=0

# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)

DEBUG=0

ARCH= -gencode arch=compute_30,code=sm_30 \
            -gencode arch=compute_35,code=sm_35 \
            -gencode arch=compute_50,code=[sm_50,compute_50] \
            -gencode arch=compute_52,code=[sm_52,compute_52] \
           # -gencode arch=compute_61,code=[sm_61,compute_61] # 修正

OS := $(shell uname)

# Tesla V100
# ARCH= -gencode arch=compute_70,code=[sm_70,compute_70]

# GeForce RTX 2080 Ti, RTX 2080, RTX 2070, Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Tesla T4, XNOR Tensor Cores
# ARCH= -gencode arch=compute_75,code=[sm_75,compute_75]

# Jetson XAVIER
# ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]

# GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
# ARCH= -gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61

# GP100/Tesla P100 - DGX-1
# ARCH= -gencode arch=compute_60,code=sm_60

# For Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX - uncomment:
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]  # 修正

# For Jetson Tx2 or Drive-PX2 uncomment:
# ARCH= -gencode arch=compute_62,code=[sm_62,compute_62]
  :


・ make


$ PATH=/usr/local/cuda/bin:$PATH make

気長に待つ。


・実行


ビルドできてれば以下が出力されるはず。

$ ./darknet
usage: ./darknet <function>


■ Nightmare


$ wget http://pjreddie.com/media/files/vgg-conv.weights
$ ./darknet nightmare cfg/vgg-conv.cfg vgg-conv.weights data/scream.jpg 10


なんだか、結果がポクない。。
なにか間違えたか?


■ YOLO


$ wget https://pjreddie.com/media/files/yolov3.weights
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg


リアルタイムは、raspi camera 繋がってるんだけど、camera stopedとかなって終わった。

$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

引き続き実験。


--------- 追記 ----------------------------------------

$ sudo apt-get install libv4l-dev v4l-utils
$ v4l2-ctl --list-devices
vi-output, imx219 6-0010 (platform:54080000.vi:0):
 /dev/video0
$ v4l2-ctl -d /dev/video0 --all
Driver Info (not using libv4l2):
 Driver name   : tegra-video
 Card type     : vi-output, imx219 6-0010
 Bus info      : platform:54080000.vi:0
 Driver version: 4.9.140
 Capabilities  : 0x84200001
  Video Capture
  Streaming
  Extended Pix Format
  Device Capabilities
 Device Caps   : 0x04200001
  Video Capture
  Streaming
  Extended Pix Format
Priority: 2
Video input : 0 (Camera 0: no power)
Format Video Capture:
 Width/Height      : 640/480
 Pixel Format      : 'RG10'
 Field             : None
 Bytes per Line    : 1280
 Size Image        : 614400
 Colorspace        : sRGB
 Transfer Function : Default (maps to sRGB)
 YCbCr/HSV Encoding: Default (maps to ITU-R 601)
 Quantization      : Default (maps to Full Range)
 Flags             : 

Camera Controls

                     group_hold 0x009a2003 (bool)   : default=0 value=0 flags=execute-on-write
                    sensor_mode 0x009a2008 (int64)  : min=0 max=0 step=0 default=0 value=0 flags=slider
                           gain 0x009a2009 (int64)  : min=0 max=0 step=0 default=0 value=16 flags=slider
                       exposure 0x009a200a (int64)  : min=0 max=0 step=0 default=0 value=13 flags=slider
                     frame_rate 0x009a200b (int64)  : min=0 max=0 step=0 default=0 value=2000000 flags=slider
                    bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
                override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
                   height_align 0x009a2066 (int)    : min=1 max=16 step=1 default=1 value=1
                     size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
               write_isp_format 0x009a2068 (bool)   : default=0 value=0
       sensor_signal_properties 0x009a2069 (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
        sensor_image_properties 0x009a206a (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
      sensor_control_properties 0x009a206b (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
              sensor_dv_timings 0x009a206c (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
               low_latency_mode 0x009a206d (bool)   : default=0 value=0
                   sensor_modes 0x009a2082 (int)    : min=0 max=30 step=1 default=30 value=5 flags=read-only

カメラ生きてるっぽいよね。

----------------------------------------


--------- 追追記 ----------------------------------------

Logicool HD c270なら動きました。


これの無地のやつ。
メモリ使い切って死ぬ寸でしたが・・・
スワップ作っといてよかった。

$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights


terminalの方見るとわかりますが、2FPSとかです。
実用には耐えません^^

----------------------------------------


--------- 追追追記 ----------------------------------------

tiny yolo v3なら、15FPS位出てラズパイで初めてLチカしたときくらいの満足感が得られました。

$ wget https://pjreddie.com/media/files/yolov3-tiny.weights
$ ./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights

----------------------------------------

ということで、一応 Darknet 動かすところまでできました。
そもそもこの手の情報なにもない素人レベルでしたが、動かすだけなら割と簡単にできました。

お熱があるうちに、遅ればせながら機械学習のお勉強でも始めようかな。

0 件のコメント:

コメントを投稿