#はじめに
会社の同僚とJetson Nanoを使用して、YOLOによる物体検出にチャレンジしてみました。
①【基本】Jetson Nanoの設定
②【基本】Jetson Nano上で物体検出YOLOの実行
③【発展】オリジナルモデルを作成して実行
今回は②Jetson Nano上で物体検出YOLOの実行編となります。
#2. YOLOとは
どこに&何があるかを推定する(Object Detection)ためのディープラーニングの手法です。
Object Detectionの初期の手法としては、R-CNNが知られています。
R-CNNはGPUを使っても結果の出力に約30秒くらいかかるという弱点があり、リアルタイム推論には不向きでした。
それをさらに改良して高速にした手法がFast R-CNN、Fast R-CNNをちょっと高速にした手法がFaster R-CNNになります。
推論速度はGPUスペックにもよりますが、結果的にFaster R-CNNでもリアルタイムで使用するには速度が遅いという弱点がありました。
そんな中で1人の大学院生がFaster R-CNNをさらに高速にし、リアルタイムでも実現可能にした手法を開発しました。それがYOLOです。
どれくらい速いかというと、公式ページにあるグラフを見ていただくとわかりやすいです。
横軸が推論速度、縦軸が精度で、紫とオレンジのラインが他の手法、ピンクのラインがYOLOなんですが、、、速すぎてグラフを突き抜けています(笑)
ちなみに、YOLOはYou Only Look Onceの略で、You Only Live Once(人生は一度きり)のパロディとなります。
あと、噂によるとYOLOを開発した大学院生はComputer Visionの世界から引退してしまったそうです。(こんなに能力が高いのに、、、すごすぎます。)
#3. ダウンロード&設定
ダウンロードするのは公式バージョンではなく、その派生版であるAlexeyABさんバージョンを使用します。
下記は前章で構築したJetson Nano上で実行しています。
学習済モデルについては、通常版とtiny版があり、精度は高いが速度が遅いのが通常版、精度は低いが速度は速くなるのがtiny版となります。
今回はtiny版を使用します。
通常版も試してみましたが、Jetson Nano上ではかなり推論速度が遅くリアルタイムには不向きかなと感じました。
(tiny版になると精度は下がってしまいますが…)
##Darknetのダウンロード
git clone https://github.com/AlexeyAB/darknet darknet
cd darknet
##学習済モデルのダウンロード
wget https://pjreddie.com/media/files/yolov3-tiny.weights
ダウンロードしたら、darknet
ディレクトリの中にMakefile
というファイルがあるはずです。
このファイルの中身のGPU
、CUDNN
、OPENCV
部分を下記に変更してください。
また、Jetson NanoのGPUを有効にするために、ARCH
部分の下記のコメントアウトを外してください。
GPU=1
CUDNN=1
OPENCV=1
...
# For Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX - uncomment:
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]
あとは、cudaのパスを設定する必要があります。
ターミナルで下記を実行してください。
export PATH=/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
あとはコンパイルするだけです。
##ビルド
make
##ビルドできたか確認する
./darknet
usage: ./darknet <function>
と返ってくればビルド成功です。
※もし、'Makefile'の中身を間違えた等で、再ビルドが必要になった方はこちらをご参考ください。
#4. USBカメラで物体検出の実行
さて、USBカメラで物体検出を実行してみましょう。
Jetson NanoにUSBカメラをつないで、下記を実行するだけです!
./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights
#5. まとめ&最後に
前回はJetson Nanoの環境設定、今回はJetson Nano上でYOLOを使用してリアルタイム推論を実行してみました。
Darknetが提供するモデルが使えると、人とか犬とか馬とかパソコンとかマグカップとかを検出できるようになります。
・・・でも、これって実務の中では使えないですよね。
犬とか馬とかそんなことはどうでも良くて、もっと違うことを検出したい!
次回はオリジナルモデルの作成の方法と、それをJetson Nano上で実行する方法について記載します!