機械学習・AI【物体検出】vol.13 :Darknet YOLOv4をWindows(CUDA,CuDNN,OpenCV4.3)で動かす

【物体検出】vol.13 :Darknet YOLOv4をWindows(CUDA,CuDNN,OpenCV4.3)で動かす

2018年3月にJoseph Chet Redmonの本家darknet(https://pjreddie.com/)で公開されたYOLOv3に続き、2020年4月にYOLOv4が公開されました。

公開されている論文によると、YOLOv3と比較して速度はほぼ同等で、mAPが15%ほど向上しているとのことです。

ms_coco_object_detection_yolov4.png

引用:https://github.com/AlexeyAB/darknet

YOLOv4の論文(原文PDF)
https://arxiv.org/pdf/2004.10934.pdf

早速、WindowsにYOLOV4の環境を構築して動かしてみました。
ここでは、環境構築における注意点についてまとめます。

 

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のインストール

今回、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

 

darknetの最新版をダウンロード

https://github.com/AlexeyAB/darknet から最新版をダウンロードして、userディレクトリに配置します。

今回は alexeyab_darknet_v4 というディレクトリに配置しました。

 

GPUを使えるようにするために

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で改修したソースコードを適用する

YOLOv3の際に、「もうちょっとこうしたいんだけどなぁ」を実現するため、独自にソースコードを改修していました。
もちろん、今回も同じことをできるようにしたいので、YOLOv4のソースコードに改修を加えてみましたが、こちらも問題なく動作することを確認できました!

注意点としては、YOLOv3のときとはオリジナルのソースコードが違っているので、改修部分をYOLOv4のソースコードに適用し直す必要があります。(YOLOv3で改修したファイルを上書きしてはいけません)

YOLOv3のソースコード改修については、こちら【物体検出】vol.7 :YOLOv3をもっと便利に!魔改造のススメをご参考にしてください。

 

▼この記事を書いたひと

R&Dセンター 野原 佐知世

R&Dの「ちょっとしたものづくり」を主に担当。360°パノラマ、機械学習などシステム、画像処理を中心に活動しています。

 

おすすめの関連記事


機械学習・AIの最新記事


お問い合わせ

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

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

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