以前から開発を進めているピープルカウンタ[1]で, 人物の検出にYOLOv3[2]を試してみたいと思い, Jetson Nanoを購入した.
前回は, Jetson NanoでD415を動作させるとこまで紹介したが, 今回はYOLOv3のセットアップについて紹介する.
関連記事:
・Jetson NanoでIntel RealSenseを試してみる(1)
・Jetson NanoでIntel RealSenseを試してみる(2)
・Jetson NanoでIntel RealSenseを試してみる(3)
・Jetson NanoでIntel RealSenseを試してみる(4)
Jetson NanoでYOLOv3を動かすには, darknetのソースコードからビルドする必要がある.
ネットで少し調べてみると,
① オリジナルのリポジトリ[3]
github.com
と,
② オリジナルをフォークしたリポジトリ[4][5]
github.com
をベースとするものがある.
検索上位を見た感じ, ②の方が多いようだ.
今回はせっかくなので, 両方を試してみた.
1. オリジナルのリポジトリ
1.1 ソース取得
$ git clone https://github.com/pjreddie/darknet $ cd darknet
1.2 Makefile修正
Makefile内の以下を修正する.
< GPU=0 < CUDNN=0 < OPENCV=0 --- > GPU=1 > CUDNN=1 > OPENCV=1
1.3 環境変数設定
そのままビルドするとnvccでエラーするので, 環境変数を設定する.
.bashrcに以下を追加し, 環境変数を設定し直す.
export PATH=$PATH:/usr/local/cuda/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
1.4 ビルド
$ make
1.5 動作確認
1.5.1 weightsファイル取得
$ wget https://pjreddie.com/media/files/yolov3-tiny.weights
1.5.2 configファイル確認
cfg/yolov3-tiny.cfgがTestingの設定になっているか確認する.
[net] # Testing batch=1 subdivisions=1 # Training # batch=64 # subdivisions=2 :
1.5.3 物体検出
デモ画像を使って, 物体検出を実行する.
$ ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg layer filters size input output 0 conv 16 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 16 0.150 BFLOPs 1 max 2 x 2 / 2 416 x 416 x 16 -> 208 x 208 x 16 : 22 conv 255 1 x 1 / 1 26 x 26 x 256 -> 26 x 26 x 255 0.088 BFLOPs 23 yolo Loading weights from yolov3-tiny.weights...Done! data/dog.jpg: Predicted in 0.199559 seconds. dog: 56% car: 52% truck: 56% car: 62% bicycle: 58% Gtk-Message: 09:56:52.331: Failed to load module "canberra-gtk-module"
[実行結果]
2. オリジナルをフォークしたリポジトリ
2.1 ソース取得
$ git clone https://github.com/AlexeyAB/darknet $ cd darknet
2.2 Makefile修正
Makefile内の以下を修正する.
< GPU=0 < CUDNN=0 --- > GPU=1 > CUDNN=1 < OPENCV=0 --- > OPENCV=1 < LIBSO=0 --- > LIBSO=1 < # ARCH= -gencode arch=compute_53,code=[sm_53, compute_53] --- > ARCH= -gencode arch=compute_53,code=[sm_53, compute_53]
2.3 ビルド
$ make
2.4 動作確認
2.4.1 weightsファイル取得
1.5.1と同じ
2.4.2 configファイル確認
1.5.2と同じ
2.4.3 物体検出
デモ画像を使って, 物体検出を実行する.
$ ./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg layer filters size/strd(dil) input output 0 conv 16 3 x 3/ 1 416 x 416 x 3 -> 416 x 416 x 16 0.150 BF 1 max 2 x 2/ 2 416 x 416 x 16 -> 208 x 208 x 16 0.003 BF : 22 conv 255 1 x 1/ 1 26 x 26 x 256 -> 26 x 26 x 255 0.088 BF 23 yolo [yolo] params: iou loss: mse, iou_norm: 0.75, cls_norm: 1.00, scale_x_y: 1.00 Total BFLOPS 5.571 Allocate additional workspace_size = 52.43 MB Loading weights from yolov3-tiny.weights... seen 64 Done! data/dog.jpg: Predicted in 129.517000 milli-seconds. dog: 81% bicycle: 38% car: 71% truck: 41% truck: 62% car: 39% Gtk-Message: 10:01:05.100: Failed to load module "canberra-gtk-module"
[実行結果]
2つのリポジトリを試してみたが, どちらをベースにしても一応動作してました.
ただ, ②の方が少し処理時間が短い(速い)感じですね!!
----
参照URL:
[1] ピープルカウンタを考えてみる(1) ~ (5)
[2] YOLO: Real-Time Object Detection
[3] Jetson NanoでGPUとOpenCVが有効なYoloをビルドするには
[4] 【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす | 機械学習・AI | Nakasha for the Future | ナカシャクリエイテブ株式会社
[5] Jetson NanoでDarknet+YOLOv3 - Qiita
|
画像認識の極み ディープラーニング 2018/05/07 (2018-05-07) [雑誌]
|
詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識
|