巷で話題の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 動かすところまでできました。
そもそもこの手の情報なにもない素人レベルでしたが、動かすだけなら割と簡単にできました。
お熱があるうちに、遅ればせながら機械学習のお勉強でも始めようかな。