みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

Jetson NanoでIntel RealSenseを試してみる(2)

以前から開発を進めているピープルカウンタ[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"

[実行結果]
f:id:moonlight-aska:20190825103338p:plain:w500


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"

[実行結果]
f:id:moonlight-aska:20190825103726p:plain:w350

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




物体・画像認識と時系列データ処理入門

物体・画像認識と時系列データ処理入門