機械学習・AI【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす

【物体検出】vol.2 :YOLOv3をNVIDIA Jetson Nanoで動かす

Jetson Nanoとは?

Jetson Nano開発者キット
Jetson Nano開発者キット

NVIDIA JETSON NANO

NVIDIAが2019/03/19にGPUカンファレンスで発表し、6月以降99ドルで提供予定のシングルボードコンピュータ。
小さいながらも128コアのGPUを搭載し、ディープラーニングモデルの実行が可能。

GPUモジュールを、ラズパイのようにUSB、HDMI、GPIOなどの豊富なインタフェースを持つ基盤に取り付け、4GBのメモリを搭載、Ubuntuが動作するようになっているのが、開発者キット

日本国内では、2019/05よりツクモパソコン本店Ⅱ、スイッチサイエンス(マクニカ)で開発者キットの取り扱いを開始。13,000円程度で入手できる。

 

夢の詰まったパッケージ
夢の詰まったパッケージ

 

この夏、最も熱いシングルボードコンピュータ(エッジコンピュータ)がNVIDIA Jetson Nanoなのだ!Nanoなのだ!(2回復唱すべし)

 

Jetson Nano+パーツの購入

前述のように、国内ではツクモパソコン本店Ⅱ スイッチサイエンスでJetson Nanoを取り寄せ購入できます。

本体購入と同時に、下記のパーツを購入することを強くお勧めします。(特に金属ケースはMust Buyです!)

本体:13,000円、ケース:3,800円、microSD:4,000円、ACアダプタ:1,600円、ファン:約4,200円、合計:26,600円

 

必要なものを一式購入しても3万円以内の圧倒的なコストパフォーマンス。これがJetson Nanoなのだ!Nanoなのだ!(失笑)

 

Jetson Nano+パーツの組み立て

電源スイッチ、リセットスイッチ、ファンの接続とジャンパー設定などをここを参考に組み立てます。

組み立てのポイントは下記の通り。

  • J48にジャンパーキャップを付ける→micro USB PWR給電を禁止(DC 5V 4AジャックPWRを有効にする)
  • J40のAUTO ONの位置にジャンパーキャップを付ける→AUTO ON機能の停止
  • 電源制御スイッチはJ40-「ON」ピンに挿入、電源制御スイッチのブルー/ホワイトのケーブルはJ41-「3.3V(1)」と「GND(9)」ピンにそれぞれに挿入する。
  • リセットスイッチはJ40-「RST」ピンに挿入する
  • ファンの4pinケーブルをコネクタ(イーサネットポートのすぐ後ろ)に接続する

 

miscoSDカードにJetson Nanoのインストールイメージを準備します。
Write Image to the microSD Card

 

NVIDIA Jetson Nano 接続前
接続前

NVIDIA Jetson Nano J40にジャンパーピン
J40にジャンパーピン

NVIDIA Jetson Nano J48にジャンパーピン
J48にジャンパーピン

NVIDIA Jetson Nano 4Pinファン
ファンを4Pinコネクタで接続

NVIDIA Jetson Nano GPIOへの接続
GPIOへの接続

NVIDIA Jetson Nano 組み立て
組み立て

NVIDIA Jetson Nano microSDの装着
microSDの装着

NVIDIA Jetson Nano 豊富な端子類
豊富な端子類

 

工作には半田ごてを握る必要も、コンデンサーを破裂するリスクも無い。電源電圧や逆接続だけ気を付ければ安心安全。これがJetson Nanoなのだ!Nanoなのだ!(スルー)

 

Jetson Nanoの起動とセットアップ

microSDカードを挿入し、USBポートにキーボード、マウス、HDMIポートにディスプレイ、ACアダプタを接続し、背面の電源ボタンを押すと、Blueのライトが灯り、bootが開始されます。

ウィザードに従って、リージョン、時刻やキーボードの選択をします。キーボードが何か分からなければ、とりあえずJapanese 109キーボードでOKです。

NVIDIA Jetson Nano
電源ON

 

日本語入力設定

テキスト入力設定の"使用する入力ソース"で日本語(Mozc)(IBus)を追加し、最優先(リストの最上段)に設定する。

 

オーバークロック設定とSwapファイル作成

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

    • Full Power化

sudo nvpmodel -m 0
sudo jetson_clocks

    • SwapFile作成

git clone https://github.com/JetsonHacksNano/installSwapfile
cd installSwapfile
./installSwapfile.sh

 

Darknetのインストール

    • ダウンロード

git clone https://github.com/AlexeyAB/darknet darknet
cd darknet

 

    • モデルのダウンロード

Pre-Trained Modelを~/darknetにダウンロードしておきます。

YOLOv3
YOLOv3 SPP
YOLOv3 Tiny

恐らく、Jetson Nanoでカメラと共に使うならTinyモデルの方です。ダメ元でやってみる用にYOLOv3、YOLOv3-SPPも念のため落としておきましょう。

 

    • Makefileの修正

GPU,CUDNN,OPENCV,LIBSOを1に変更
Tegra X1 (Jetson NanoのGPU)を探してコメントを取り有効化

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] 

 

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

 

  • .bashにnvccのPATHを設定。
    export PATH=/usr/local/cuda/bin:${PATH}
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}

 

  • いざ!make

    makeを実行します。

    ダラーっと長い長いスクロールが始まりますが、気長に待ちます。途中、warningとかがいっぱい出来るかもしれません。

    色々と端折りますが、最終的に./darknetとコマンドを打って、
    usage: darknet
    みたいな素っ気ない応答が帰ってくれば、(恐らく)ちゃんとmakeが出来ています。

 

普通にUbuntuが起動して、必要なものはすでに入っているオールインワンディープラーニングマシン。これがJetson Nanoなのだ!Nanoなのだ!(再度復唱すべし)

 

YOLOv3の動作確認

 

静止画で動作確認

YOLOv3モデルを使って、サンプルの静止画を認識させてみます(モデルの読み込みがズッシリと重いです。気長に待ちましょう)。

下記のコマンドを打ちます

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights

NVIDIA Jetson Nano
動作テスト:YOLOv3で静止画の認識

 

USBカメラを接続して動作確認

USBポートにカメラを接続します。

NVIDIA Jetson Nano

下記のコマンドを打ちます

./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 0

 

NVIDIA Jetson Nano
USBカメラによるリアルタイム物体検出

NVIDIA Jetson Nano
USBカメラによるリアルタイム物体検出

 

 

連続稼働するとどうなる?

 

USBカメラで物体検出をし続けて6時間。Nano本体が熱くなってきました。

内部の温度を測るなんてこともできるんですね〜。

$ cat /sys/devices/virtual/thermal/thermal_zone*/temp
64000
59500
54500
55000
100000
57250

 

1000で割ると温度になるみたいなので、大体55-60℃位です。まだ壊れる温度ではないようです。

温度がわかったところで、今度はファンの回転数を制御してみます。(温度によって自動的に制御してくれたらいいのに)

255が最大値のようなのでここは控えめに60%=153にしてみます。

sudo sh -c 'echo 153 > /sys/devices/pwm-fan/target_pwm'
cat /sys/devices/pwm-fan/target_pwm
153

ファンの回転をフルにして、数分放置したら・・・

$ cat /sys/devices/virtual/thermal/thermal_zone*/temp
61500
57000
52500
53000
100000
54750

2℃位下がったようです。

面白いので、事務所のサーキュレータに当ててみました。

$ cat /sys/devices/virtual/thermal/thermal_zone*/temp
60000
56000
51500
51000
100000
53250

さらに1℃位下がりました。

それじゃあ・・ということで、実行していたYOLOを止めます。

$ cat /sys/devices/virtual/thermal/thermal_zone*/temp
44500
40000
35000
35500
100000
37250

もう、みるみる温度が下がって、最終的には15℃位の温度差になりました。やはりGPUがヒーターだったんだなぁと実感した次第です。

 

YOLOv3 Tinyモデルで640x480@15fpsで動作し、完全に実用範囲内。YOLOv3モデルでは、辛うじて1-2fps程度で動作しましたが、リアルタイムというには無理があるレベルでした。
・・・とはいえ、わずか2万円でYOLOv3が動作するシングルボードコンピュータを入手できるなんて素晴らしいと思います。 次は、Nanoの20倍の処理性能があるといわれている"Xavier(ザビエル)"を試してみたいです。

 

▼この記事を書いたひと

001@2x.png

R&Dセンター 松井 良行

R&Dセンター 室長。コンピュータと共に35年。そしてこれからも!

 

おすすめの関連記事

機械学習・AIの最新記事


お問い合わせ

ご意見・ご質問などお気軽にお問い合わせ下さい。
ナカシャクリエイテブ株式会社

●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711  地図
交通部 R&Dセンター

Email:メールでのお問い合わせ