本次曠世大作yolo v4 的 GitHub連結在此:https://github.com/AlexeyAB/darknet

以下的內容基本上會照著Readme的說明一步步建立環境

本篇會記錄在Win10 ver 1909 作業環境之下使用VS2019編譯Darknet的過程

有關Linux的部分,GitHub上的Readme有說明,但我只是個業餘小弱弱,基本上沒用過,所以Linux的部分皆不會在本文出現

 

一、電腦基本配置

我的電腦是Windows 10 Version 1909 x64

image

基本上Version 1909的判斷就是「開始」旁邊有沒有一個很大的搜尋空白列

image

硬體配備都是老機器了

 

CPU: Intel® Core™ i5-4460 @3.20GHz

RAM: 8G

GPU: NVIDIA GeForce GTX 750

從Dxdiag上查到:

        記憶體總計約為:6050MB

        顯示記憶體(VRAM):2007MB

        共用記憶體:4043MB

不知道這樣算是幾G的GPU記憶體容量

image

image

二、前置準備

Readme的第0節:Requirements

Readme上有說需要準備幾項(Readme上僅有1~6,7的ZED SDK是我自己補上):

1. CMake >= 3.8 for modern CUDA support:  https://cmake.org/download/

我自己是下載這個: cmake-3.17.2-win64-x64.msi

安裝過程會遇到要加入環境變數的選單,選擇all users

image

2. CUDA 10.0: https://developer.nvidia.com/cuda-toolkit-archive 

因為我使用VS2019 所以這裡必須使用CUDA10.1,否則到時CMake在跑Configure時會出錯,我是抓CUDA Toolkit 10.1 update2 [Aug 2019]

network安裝和local安裝都一樣,我選擇network安裝

我第一次安裝時選快速,結果不知是發生什麼事,竟然沒有安裝完全,所以第二次改用自訂確認安裝路徑

image

image

3. OpenCV >= 2.4:  OpenCV official site    (on Windows set system variable OpenCV_DIR = C:\opencv\build)

當前最新版本是4.3.0,就直接抓Windows版本,解壓縮後放在C:\下

image

然後建立環境變數OpenCV_DIR(此步驟可以等1~7的前置安裝都完成後再來進行,因為我在安裝過程發現這個環境變數會被洗掉)

image

image

image

image

image

4. cuDNN >= 7.0 for CUDA 10.0 => 7.6.4 [September 27, 2019], for CUDA 10.1: https://developer.nvidia.com/rdp/cudnn-archive

(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 )

需要NVIDIA Developer的帳號才能下載,跟NVIDIA是不同帳戶(我是沒有NVIDIA帳戶而只有辦NVIDIA Developer的帳戶),所以快去辦一個吧~

辦好後就可以進入如下畫面下載cuDNN

image

deeplearning SDK Document的4.3說明,執行1~4步驟,第5步驟不用

簡單說,就是把cuDNN的三個檔案放到CUDA對應的資料夾內即可,然後再於環境變數增加CUDA_PATH的變數

不過這個步驟應該在安裝CUDA時就已經自動寫入,可以在這個步驟再檢查一次

image

5. GPU with CC >= 3.0: https://en.wikipedia.org/wiki/CUDA#GPUs_supported

NVIDIA自己給的介紹,並經wiki整理的表得知,我的GeForce GTX 750很幸運擁有Compute capability 5.0的等級,超過yolo v4要求的3.0,不然這一篇也不用寫了~

image

6. on Windows MSVC 2015/2017/2019 : https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community

我的電腦本身就有裝VS2019,我有試過2015和2017,自己是失敗地莫名其妙,所以就只寫出2019成功建置經過啦~”~

安裝的時候需要勾選「使用C++的桌面開發」,可以順便勾選「Python開發」

image

7. ZED SDK ver 3.1.2 for CUDA 10.0 for Windows 10 : https://www.stereolabs.com/developers/release/

需要這個SDK的原因在於後續CMake建立Configure時會用到,所以雖然Readme沒有將ZED SDK列入Requirements,但我還是把這個寫入前置準備 

 

三、在Windows編譯Darknet

在這個步驟,我選擇用Readme推薦的Using CMake-GUI

1. Configure

CMake,Where is the source code指定有「CMakeLists.txt」的路徑,Where to build the binaries指定Darknet內的build\darknet,這是VS要Compile的源代碼資料夾

image

2. Optional platform for generator (Set: x64)

3. Finish

image

下圖是GitHub上的Demo結果,有展開的部分我盡量能保持一致就一致

image

以下是我的展開圖

image

在執行時,可能發生以下問題:

A. Looking for a CUDA compiler – NOTFOUND

請依照以下步驟排除問題:

  1. 前往C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions檢查是否存在四個檔案image
  2. 若是存在,再去C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations檢查此路徑下是否不存在這四個檔案
  3. 若真的不存在,則將1.的四個檔案複製到2.的路徑之下

image

                      4. 從CMake -> File -> Delete Cache,刪除上次的結果

image

                 5. 重新在CMake上Configure一次,若成功即可在Log上看到已抓到CUDA 10.1的編譯器

image

 

B. OpenCV發生找不到的問題

image

請依以下流程排除問題

  1. 檢查環境變數裡的Open_DIR有沒有在剛剛一系列的安裝中莫名消失,有的話請補上
  2. 關閉CMake,重新開一個新的程式,讓CMake重新讀取環境變數
  3. 從CMake -> File -> Delete Cache,刪除上次的結果
  4. 重新在CMake上Configure一次,若成功即可在Log上看到已抓到OpenCV

image

 

4. Generate : 會在build下產生新的Darknet.sln

5. Open Project

6. Set: x64 & Release

image

7. Build & 8. Build solution è F6按鈕 :    等輸出Log跑完

image

只要是0失敗即可

我的電腦是輸出到Release之下,要將Release內的檔案全複製到x64之下

 

四、How to use on the command line

使用命令式來確認Darknet.exe可以正常執行

 

1. 若發生下圖錯誤,須至C:\opencv\build\x64\vc15\bin找到opencv_world430.dll,並複製到D:\YOLOv4\darknet-master\build\darknet\x64之下

image

2. 如果發生pthreadVC2.dll的錯誤

image

則可以到以下網址下載

https://sourceware.org/pthreads-win32/#download

ftp://sourceware.org/pub/pthreads-win32

image

下載後解壓縮,將\Pre-built.2\dll\x64內的pthreadVC2.dll,放到D:\YOLOv4\darknet-master\build\darknet\x64之下就可以

(D:\YOLOv4\darknet-master\build\darknet\x64裡面應該本來就有)

 

預練模型下載:

將以下進入的文字全複製,存成yolov4.cfg

https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov4.cfg

再下載 yolov4.weights

兩個檔案都放到D:\YOLOv4\darknet-master\build\darknet\x64之下

 

開始執行command line

 

darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.25

 

如果發生CUDA out of menory的錯誤,代表GPU的自帶記憶體不夠大,有兩種解決辦法

打開cfg/yolov4.cfg (如果command line裡面不是用cfg/yolov4.cfg 而是 yolov4.cfg,則需要開啟的檔案是x64之下你剛剛自己製作並放進去的檔案)

1. 在最上面找到subdivisions,後面數字越大越好,不清楚最高是不是64,但是錯誤內容會跟你說可以將這個參數調高

意義是每次訓練時batch的數量再依照subdivisions切割一次,變成每次跑batch/subdivisions,跑完再合併成一個batch,所以越大可以減少同時的記憶體負擔量

2.找到width和height,把這兩個數字調小,同樣可以減少每次模型訓練的資源耗用 

width=608
height=608

 

一切成功的話會看到161層的模型跑完

image

呼叫經典的dog.jpg驗證模型結果

D:\YOLOv4\darknet-master\build\darknet\x64\dog.jpg

image

 

 

影片分析:

我用的素材是復仇者聯盟4的預告片: https://www.youtube.com/watch?v=ZrB7EdfPBJU

我將影片下載下來(網上有很多youtube影片下載工具,自行選擇吧)

因為怕電腦跑不動,所以只載壓縮後的640x266大小

在Readme上有說請盡量不要選擇影片大小超過1920x1080的,可能會影響CPU效能,但我想我的慘況應該還不用到那麼高畫質來懲罰...

image

執行以下命令

darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights Averger4Pre360.mp4 -out_filename Averger4Pre360Res.mp4

在Readme上是寫讀取test.mp4,可轉成res.avi,代表可以針對*.mp4和*.avi自由切換,但好像也僅限這兩種格式

如果執行後出現CvCapture initStream Failed to set mediaType之類的錯誤

請到C:\opencv\build\x64\vc15\bin將opencv_videoio_ffmpeg430_64.dll複製到D:\YOLOv4\darknet-master\build\darknet\x64之下

image

image

 

在執行過程,如果該幀有可被判讀的物件,就會在cmd裡秀出判定的物件跟判定機率,如下圖 

image

最後跑完會存檔成Avenger4Pre360Res.mp4

我的電腦太渣了,AVG_FPS只有1.8,一個2分半的預告片生生被我跑了快1個小時才分析完

image

最後結果如下

說一下對於分析結果的看法,可能是因為訓練資料是微軟的COCO,這是一份人臉辨識的資料庫

所以影片中對於"人"的準確率很高,但其他的就不怎麼OK了

例如Tony Stark的鋼鐵心臟,被分析成時鐘(陳時中??XD不好意思 自動選字跳出"時中" 笑了一下)

箭靶也是時鐘,黑幕變成冰箱???

後續再繼續玩看看還有沒有其他花招吧

 

我先去了解要如何提高AVG_FPS吧~

 

下一篇是YOLOv4辨識自定義物件 with LabelImg

歡迎來指導我寫錯或漏操作的步驟,謝謝!!

arrow
arrow
    文章標籤
    YOLOv4 Win10 VS2019 CUDA10.1
    全站熱搜

    wings890109 發表在 痞客邦 留言(7) 人氣()