2020/04/23 Alexey氏のGithubにYOLOv4が登場しました。
記事"YOLOv4 -- Superior, Faster & More Accurate Object Detection"によると、従来のYOLOv3と比較して、速度はほぼ同等(数パーセントは低下している模様)で、mAPで15%ほど向上しているようです。
※同じデータセットを使って学習したオリジナルモデルにおいて、どの程度の差が出るのかについては、別途記事にします。
今回は、毎度おなじみのNVIDIA Jetson Xavierに最新のYOLOv4を入れて、PreTrainedModelを使った動作検証をします。
OpenCV4.2をXavierに導入する手順は、以前の記事"【物体検出】vol.10 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす~その2(OpenCV4対応)"をご参考にしてください。
cmakeも最新版にしておいた方が良いです。ここでは既に導入済として話を進めます。
$ git clone https://github.com/AlexeyAB/darknet.git darknet0604
ここがとても重要です。さもなくば、エラーで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も使えるようになっています。
...の前に、pre-trained-modelをダウンロードしておかなければなりません。 yolov4.weightsというのが目当ての品です。
~/darknet0604にダウンロードします。
対応するcfgは~/darknet0604/cfg/に既に入っていますので、不要です。
./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -c 0
以前のモデルが動作するかどうかも気になるところです。
当然ながら、過去のモノとはちゃんと互換が取れているようです。
./darknet detector demo cfg/coco.data cfg/yolov3-spp.cfg yolov3-spp.weights -c 0
ちゃんと動作しました。
YOLOv3のコマンド実行ではなく、Pythonの中から動かせるように、darknet.pyを使っている場合は、既存のプログラムがちゃんと動作するのかが気になります。
ご安心あれ!ちゃんと動きました。
但し、若干の修正が必要だったのは、libdarknet.soを読み込んでいるところを、libdark.soに書き換えただけでした。
細かなところでどんな違いがあるのかまでは確認できていませんが、一応それっぽく動作しています。
▼この記事を書いたひと
R&Dセンター 松井 良行
R&Dセンター 室長。コンピュータと共に35年。そしてこれからも!
●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711 地図
交通部 R&Dセンター