機械学習・AI【物体検出】vol.12 :YOLOv4をNVIDIA Jetson AGX Xavierで動かす

【物体検出】vol.12 :YOLOv4をNVIDIA Jetson AGX Xavierで動かす

2020/04/23 Alexey氏のGithubにYOLOv4が登場しました。

記事"YOLOv4 -- Superior, Faster & More Accurate Object Detection"によると、従来のYOLOv3と比較して、速度はほぼ同等(数パーセントは低下している模様)で、mAPで15%ほど向上しているようです。

※同じデータセットを使って学習したオリジナルモデルにおいて、どの程度の差が出るのかについては、別途記事にします。

今回は、毎度おなじみのNVIDIA Jetson Xavierに最新のYOLOv4を入れて、PreTrainedModelを使った動作検証をします。

最初に結論:
XavierでOpenCV4.2+YOLOv4が動作します。セットアップには少しだけ工夫が必要です。YOLOv3で動作させていたpythonのプログラムもそのまま動作しました。

 

OpenCVを最新にする

OpenCV4.2をXavierに導入する手順は、以前の記事"【物体検出】vol.10 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす~その2(OpenCV4対応)"をご参考にしてください。
cmakeも最新版にしておいた方が良いです。ここでは既に導入済として話を進めます。

 

Darknetのセットアップ

darknetの最新版を入手する

$ git clone https://github.com/AlexeyAB/darknet.git darknet0604

 

MakeファイルをXavierに合わせて修正する

ここがとても重要です。さもなくば、エラーでMakeが止まります。(もちろん、その先のビルドもできません)
上でダウロードしたディレクトリ(~/darknet0604)にCmakeList.txtがありますので、テキストエディタで開き、編集します。
修正内容は、 -mavx -mavx2 -msse3 -msse4.1 -msse4.2 -msse4aなどのXavierが対応しないオプションの指定を外すことだけです。
162行目辺り
# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffp-contract=fast -mavx -mavx2 -msse3 -msse4.1 -msse4.2 -msse4a")
# set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffp-contract=fast -mavx -mavx2 -msse3 -msse4.1 -msse4.2 -msse4a")

 

ビルド

cmakeを使ってbuilldをします。
今回から、build.shというシェルスクリプトが準備されていて、これを実行するだけでインストールまで完了します。
$ cd darknet0604
$ ./build.sh

 

動作確認

darknetコマンドを実行します。
$ ./darknet --version
CUDA-version: 10000 (10000), cuDNN: 7.6.3, CUDNN_HALF=1, GPU count: 1
CUDNN_HALF=1
OpenCV version: 4.2.0

OpenCVが4.2でCUDAもcuDNNもちゃんと認識されていて、かつCUDNN_HALFも使えるようになっています。

 

USBカメラを使って物体検出を実行

...の前に、pre-trained-modelをダウンロードしておかなければなりません。 yolov4.weightsというのが目当ての品です。
~/darknet0604にダウンロードします。
対応するcfgは~/darknet0604/cfg/に既に入っていますので、不要です。

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

screenshot.770.jpg

 

すごく大事な事

YOLOv3として動作する?

以前のモデルが動作するかどうかも気になるところです。
当然ながら、過去のモノとはちゃんと互換が取れているようです。
./darknet detector demo cfg/coco.data cfg/yolov3-spp.cfg yolov3-spp.weights -c 0

screenshot.772.jpg

ちゃんと動作しました。

 

既存のプログラムは動作する?

YOLOv3のコマンド実行ではなく、Pythonの中から動かせるように、darknet.pyを使っている場合は、既存のプログラムがちゃんと動作するのかが気になります。


ご安心あれ!ちゃんと動きました。

但し、若干の修正が必要だったのは、libdarknet.soを読み込んでいるところを、libdark.soに書き換えただけでした。
細かなところでどんな違いがあるのかまでは確認できていませんが、一応それっぽく動作しています。

 

YOLOv3からYOLOv4への移行は、とてもスムーズに行きました。cmakeやOpenCV4.2などの依存ライブラリ類をちゃんと動作させることが出来れば、.build.shで楽々インストールです。
パフォーマンスの最適化だとか、独自モデルだとか、Windows版だとか、モデルそのものの変化、新しいpre-trained-modelだとか、気になることはたくさんありますが、追々フォローしていこうと思います。

 

▼この記事を書いたひと

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:メールでのお問い合わせ