一段時間沒上GitHub看看
沒想到YOLOv4真的來了!!
YOLOv3的原作者Joe Redmon
先前已經宣布不再投入CV方面的研究
大家原本不對YOLO後續有太多的期待
沒想到YOLOv4就這樣來了!!
接手的就是過去在GitHub上主力維護Darknet的大神AlexeyAB
先前介紹的YOLOv3就是採用其版本
沒想到YOLOv4的論文就是由他來主筆(Alexey Bochkovskiy)
而更令人震驚的是
論文中另外兩位共同作者竟然是台灣人!!
(Chien-Yao Wang、Hong-Yuan Mark Liao)
若研究所是學習影像處理相關,應該對Mark Liao不陌生才是...
過去YOLOv3已被業界認為是即時物件檢測的最佳解
server site可能採用YOLOv3
edge site則採用YOLOv3-tiny
而這次YOLOv4在速度及準確率皆超越了YOLOv3
實在太驚人了!!
看看在相同FPS上,YOLOv4的AP比YOLOv3高出10個百分點!!
而在GitHub的實測說明上
用過YOLOv3應該對於修改cfg的width、height不陌生吧
YOLOv4可用更小的長寬 320x320,即可達到mAP 60% !!
遠超過YOLOv3預設416x416的mAP 55%
既然如此當然要下載來實測看看
YOLOv4的建置方法就跟過去說明的完全一樣
這裡就不再從頭說明,前期需準備的nVidia CUDA套件、CUDNN、OpenCV 3.4
請參考前篇說明
若你已經下載過上述套件,一樣到GitHub下載source code
原作者採用VS2015,若你用2017以上,會出現升級動作
下載source code後,在build->darknet可以看到許多VS的方案檔,這邊用darknet.sln做說明
步驟其實跟YOLOv3完全一樣
1. 先將方案的組態設定為release, x64
一樣先嘗試編譯,會出現以下錯誤
2. 對著專案按右鍵到屬性頁面,設定CUDA C/C++的路徑
CUDA路徑預設是在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
再次編譯,會出現OpenCV錯誤
3. 對著專案按右鍵到屬性頁面,加入OpenCV套件參考
VC++目錄->Include目錄加入三個路徑
build\include\opencv2、build\include\opencv、build\include 三個資料夾路徑
接著在程式庫目錄 加入OpenCV 3.4.0的資料夾
build\x64\vc14\lib 這個路徑
最後在連接器頁簽->輸入 其他相依性 加入 opencv_world340.lib
以上步驟缺一不可,才能完整地把OpenCV套件加入
再次編譯
恭喜!! 完成建置!!
建置完成產生的darknet.exe位置在build\darknet\x64目錄上
使用方法完全一樣,到一台有GPU的主機上
把x64部分資料夾(cfg, data)與exe、dll複製出來,如下圖
需要cfg、data資料夾
當初建置所使用的cudnn64_7.dll, opencv_world340.dll, opencv_ffmpeg340_64.dll, pthreadVC2.dll
darknet.exe
以及YOLOv4的cfg、weights (下載位置:YOLOv4 cfg, YOLOv4 weights)
裡面放置了一個測試圖片 dog.jpg
執行測試的cmd如下:
darknet.exe detect yolov4.cfg yolov4.weights dog.jpg
這次YOLOv4執行一開始多了很多資訊
多了像是CUDA版本、CUDNN版本、GPU的型號...等等資訊
預設的cfg的大小為608x608
結果如下:
抓到了四個物件,執行時間為37ms
比過去v3版本多抓了一個...花盆... XDD
竟然都跑YOLOv4了,當然也要把YOLOv3跑來看看差別,也把cfg改成608x608
YOLOv3只抓到了3個物件,果然抓不到花盆 XDD
但耗時34ms (還比v4快耶!!) XDD
後來測試同樣的大小(width, height) YOLOv3並不會比較慢,但應該準確度較差??
因此YOLOv4可用較小的大小,來達到相同YOLOv3的準確度
YOLOv3預設是採用416x416,採用RTX2070的速度是:23ms
而YOLOv4若是採用320x320,速度是:19ms
但結果出現了一個誤判:
因此實際是否能把原先使用YOLOv3 416x416換成YOLOv4 320x320,有待考驗!!
而若是YOLOv4採用416x416,速度是:24ms
因此由實驗得知在同樣大小的設定
在處理速度上,YOLOv4其實略比YOLOv3慢一點點
但準確度卻大幅提升?? (有待實測驗證)
這裡分享一個好用的指令,用於測試影片比較方便
由於darknet也整合了opencv_ffmpeg,因此可直接讀入影片檔,以及把結果匯出影片
darknet.exe detector demo cfg/coco.data yolov4.cfg yolov4.weights test.mp4 -out_filename result.mp4
以上指令就是把測試影片test.mp4讀入辨識後,在儲存成result.mp4
用來demo model的效果,真的是非常方便的指令呢!!
以上是初步的分享嘍
請問darknet如何整合opencv_ffmpeg
回覆刪除已將opencv_ffmpeg放入darknet.exe的目錄下
仍出現video-stream stoped錯誤