iT邦幫忙

1

YOLO v4 安裝心得 -- Windows 環境

前言

YOLO 是一個即時物件偵測(object detection)的模型,它處理速度可達 30 FPS,可以用在視訊上偵測移動的物體,平均準確度(mAP)可達 43.5%。只是要使用它,必須由原始碼建置,過程有些複雜,因此,將心得記錄下來,與同好分享。

YOLO 已經進化到第4版了,最近才發行,熱得發燙,趕快來試一下。

安裝

YOLO 的基礎為 Darknet,以 C 及 CUDA 撰寫而成,官網同時提供 LINUX 及 Windows 作業系統下的建置程序,在 LINUX 上以 GCC 建置應該是比較直覺而簡單,不過,筆者比較習慣使用 Windows 作業系統,因此,本文主要是說明在 Windows 下如何建置Darknet。

官網提供兩種 Windows 版的建置方法:

  1. CMake:官網建議的方式。
  2. vcpkg:程序比較複雜。

依官網建議的方式,筆者從 CMake 著手,雖然很順利建置成功,但測試時卻發生以下錯誤。
https://ithelp.ithome.com.tw/upload/images/20200520/20001976e9i3EFxOoK.png

Google 一陣子,始終找不到解決的方法,因此,就不浪費篇幅說明建置的過程了。

以下就詳細說明另一種建置方法 -- vcpkg。

vcpkg 建置成功的程序

前置作業須先安裝下列軟體:

  1. VS 2017 或 2019:須安裝 VC toolset、English language pack 元件。
    https://ithelp.ithome.com.tw/upload/images/20200520/20001976nSIaGFhOfy.png

https://ithelp.ithome.com.tw/upload/images/20200520/20001976WYqH35ICFD.png

  1. NVidia CUDA SDK:CUDA版本 > 10.0, cuDNN版本 > 7.0
  2. OpenCV:版本須 > 2.4

當然要有一張 NVidia 獨立顯卡。

搞定上述軟體,開始建置Darknet,程序如下:

  1. 執行cmd,開啟DOS視窗。
  2. 首先從『官網』下載程式碼或執行下列指令:
    git clone https://github.com/Microsoft/vcpkg.git
  3. 更改當前目錄至vcpkg:
    cd vcpkg
  4. 執行 .\bootstrap-vcpkg.bat
  5. 建置 Darknet,執行下列指令,需要執行20分鐘以上:
    .\vcpkg install darknet[full]:x64-windows

測試

花了半天的時間才搞定它,執行檔目錄在 vcpkg\installed\x64-windows\tools\darknet。
測試程序如下:

  1. 下載 yolov4.cfgyolov4.weights,放在 vcpkg\installed\x64-windows\tools\darknet 目錄中。
  2. 放一些圖片在 data 目錄中,執行下列指令:
    darknet detect yolov4.cfg yolov4.weights data/dog.jpg

https://ithelp.ithome.com.tw/upload/images/20200520/20001976yxqfzQ7bTb.png
正確偵測到自行車及狗,勝利成功, Ya !!

後記

2020/06/16 看到『在windows安裝YOLO darknet - GPU』一文,直接編修*.sln檔案,經測試一次搞定,感謝 crowntail 大大,編譯程序補充如下:

  1. OpenCV官網下載 OpenCV – 4.3.0 Windows 版。
  2. 解壓縮至 c:\ 或 d:\,以下假設安裝在d:\。
  3. Darknet github下載程式碼,解壓縮,,以下假設安裝在D:\darknet-master。
  4. 以 Visual Studio 開啟 D:\darknet-master\build\darknet\darknet.sln 檔案,會出現升級視窗,點選【確定】。 注意,若無NVidia獨立顯卡,改開啟 darknet_no_gpu.sln
  5. 將Configuration 改為 x64。
    https://ithelp.ithome.com.tw/upload/images/20200616/20001976th8GtYAgqU.png
  6. 修改專案屬性,編修【VC++ Directories】> 【Include Directories】,加上:
  • D:\opencv\build\include
  • D:\opencv\build\include\opencv2
    https://ithelp.ithome.com.tw/upload/images/20200616/200019763NMcjHiSOY.png

https://ithelp.ithome.com.tw/upload/images/20200616/20001976UqidrEam4V.png
7. 編修【連結器】> 【輸入】> 【其他相依性】,加上:

  • D:\openCV\build\x64\vc15\lib\opencv_world430.lib
    https://ithelp.ithome.com.tw/upload/images/20200616/20001976NKkfUloMov.png

https://ithelp.ithome.com.tw/upload/images/20200616/20001976Ld2hq4sf4H.png

  1. 在darknet專案上按滑鼠右鍵,選【重建】,若出現【建置成功】,表示大功告成,執行檔在 D:\darknet-master\build\darknet\x64 目錄下。

  2. 自 D:\openCV\build\x64\vc15\lib 複製 opencv_world430.lib 至 D:\darknet-master\build\darknet\x64 目錄下。注意使用 vs2017,目錄應改為 vc14。

  3. 自 D:\openCV\build\x64\vc15\bin\ 複製 opencv_world430.dll 至 D:\darknet-master\build\darknet\x64 目錄下。注意使用 vs2017,目錄應改為 vc14。

  4. 『這裡』下載 yolov4.weights,放入 D:\darknet-master\build\darknet\x64 目錄。

  5. 執行下列指令測試:
    darknet.exe detect .\cfg\yolov4.cfg .\yolov4.weights .\data\dog.jpg
    另外目錄下還有許多 *.cmd 檔案可測試。

  6. 若要使用 Python 呼叫 darknet API,需建置 yolo_cpp_dll.sln,不需任何修改。

  7. 複製必要的函數庫:

  • 自D:\darknet-master\3rdparty\pthreads\bin 複製 pthreadGC2.dll、pthreadVC2.dll
  • 自D:\openCV\build\bin 複製 opencv_videoio_ffmpeg430_64.dll
  • 自 D:\openCV\build\x64\vc15\lib 複製 opencv_world430.lib
  1. 執行下列指令測試:
    python darket.py
  2. 還有一個 performBatchDetect function,可一次測試多個檔案。

使用 VS 2019

若使用 VS 2019,應修改下列事項:

  1. 修改 darknet.vcxproj、yolo_cpp_dll.vcxproj,將所有的 CUDA 10.0 改為 CUDA 10.1,因為 v10.0 只支援 VS 2015、VS 2017。
  2. 複製 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions*.* 至 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations。
  3. 修改專案屬性 > C/C++ > 命令列,在其他選項加 /FS,點選【套用】紐。
  4. 清除專案,再建置專案。

尚未有邦友留言

立即登入留言