2018年3月にJoseph Chet Redmonの本家darknet(https://pjreddie.com/)で公開されたYOLOv3に続き、2020年4月にYOLOv4が公開されました。
公開されている論文によると、YOLOv3と比較して速度はほぼ同等で、mAPが15%ほど向上しているとのことです。
引用:https://github.com/AlexeyAB/darknet
YOLOv4の論文(原文PDF)
https://arxiv.org/pdf/2004.10934.pdf
早速、WindowsにYOLOV4の環境を構築して動かしてみました。
ここでは、環境構築における注意点についてまとめます。
基本的な構築手順はYOLOv3と変わりませんが、GPU(CUDA、cuDNN)の利用について注意が必要です。
YOLOv3の構築手順はこちら【物体検出】vol.1 :Windowsでディープラーニング!Darknet YOLOv3(AlexeyAB Darknet)をご参考にしてください。
Windows or Linux
CMake >= 3.12: https://cmake.org/download/
CUDA 10.0: https://developer.nvidia.com/cuda-toolkit-archive (on Linux do Post-installation Actions)
OpenCV >= 2.4: use your preferred package manager (brew, apt), build from source using vcpkg or download from OpenCV official site (on Windows set system variable OpenCV_DIR
= C:\opencv\build
- where are the include
and x64
folders image)
cuDNN >= 7.0 for CUDA 10.0https://developer.nvidia.com/rdp/cudnn-archive (on Linux copy cudnn.h
,libcudnn.so
... as desribed here https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installlinux-tar , on Windows copy cudnn.h
,cudnn64_7.dll
, cudnn64_7.lib
as desribed here https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows )
GPU with CC >= 3.0: https://en.wikipedia.org/wiki/CUDA#GPUs_supported
on Linux GCC or Clang, on Windows MSVC 2015/2017/2019https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community
HP OMEN 880-000jp Desktop
i7 7700 3.6GHz*8、メモリ32GB
NVidia GeForce GTX1070 8GB
Windows10Professional 64bit
OpenCV 4.3.0(バイナリでインストール)
CUDA 10.2.89
cuDNN 7.6.5.32
VisualStudio Community 2017
今回、CUDAとOpenCVは2020年6月現在における最新版をインストールしました。
インストールが完了したら、環境変数にそれぞれのPathが設定されているか、必ず確認してください。
環境変数が設定されていないと、darknet.exeの実行時にGPUが利用できません。
環境変数
CUDA_PATH:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
CUDA_PATH_V10_2:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
OPENCV_DIR:OpenCVを設置したディレクトリ\build
Path:OpenCVを設置したディレクトリ\build\x64\vc15\bin
https://github.com/AlexeyAB/darknet から最新版をダウンロードして、userディレクトリに配置します。
今回は alexeyab_darknet_v4 というディレクトリに配置しました。
GPU(CUDA、cuDNN)を利用できるようにするには、CMakeとVisualStudioのビルドの際に設定を変更する必要があります。
CMake
cmake-guiでdarknetソースコードのパスと、バイナリを配置するパスを指定。
"Configure"をクリックして、ENABLE_CUDA、ENABLE_CUDNN、ENABLE_OPENCV、ENABLE_CUDNN_HALFにチェックが入っているかを確認します。
再度"Configure"をクリックして、問題がなければ"Generate"をクリックしてVisualStudioのプロジェクトを生成します。
VisualStudioの設定
CMakeの出力先に生成されたDarknet.slnをVisualStudioで開きます。
ソリューションエクスプローラー内にある'darknet'を右クリックして、プロパティを選択。
構成で「Release」、プラットフォームで「x64」を選択して、構成プロパティの中からC/C++ -> プリプロセッサを開きます。
その中のプリプロセッサの定義を編集して、「CUDNN_HALF」を追加します。
あとはVisualStudioでソリューションのビルドを実行すれば、darkne.exeなどのファイルができあがります。
> darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.25
CUDA-version: 10020 (10020), cuDNN: 7.6.5, CUDNN_HALF=1, GPU count: 1
CUDNN_HALF=1
OpenCV version: 4.3.0
できあがったdarknet.exeを実行してみて、上記のように「CUDNN_HALF=1」などが表示されていればOKです。
これでYOLOv4の環境が構築できました。
YOLOv3の際に、「もうちょっとこうしたいんだけどなぁ」を実現するため、独自にソースコードを改修していました。
もちろん、今回も同じことをできるようにしたいので、YOLOv4のソースコードに改修を加えてみましたが、こちらも問題なく動作することを確認できました!
注意点としては、YOLOv3のときとはオリジナルのソースコードが違っているので、改修部分をYOLOv4のソースコードに適用し直す必要があります。(YOLOv3で改修したファイルを上書きしてはいけません)
YOLOv3のソースコード改修については、こちら【物体検出】vol.7 :YOLOv3をもっと便利に!魔改造のススメをご参考にしてください。
▼この記事を書いたひと
R&Dセンター 野原 佐知世
R&Dの「ちょっとしたものづくり」を主に担当。360°パノラマ、機械学習などシステム、画像処理を中心に活動しています。
●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711 地図
交通部 R&Dセンター