Yolo V3已經體驗了,接下來是V4版本。
關於V4版本,學術界褒貶不一。從工業界實際應用角度看,V4做了不少的優化,精度提升了10%,速度提升了12%。詳細參見:
-
《如何評價新出的V4》(https://www.zhihu.com/question/390191723?rf=390194081);
-
《yolo V4分析》(https://www.cnblogs.com/wujianming-110117/p/12807152.html)。
因此,V4必須要體驗和研究一下。
2、下載和安裝
關於windows環境下,使用yolo V4,參考了網上的幾篇文章,大同小異,如:https://blog.csdn.net/weixin_43723614/article/details/105772081。
V4版本最好有GPU,奈何我的筆記本電腦配置的顯卡是:Intel(R) UHD Graphics 620,沒法用GPU。
因此我只能用CPU版本。於是cuda10.0和cuDNN7的安裝就省略了。
2.1、下載v4代碼
代碼地址:https://github.com/AlexeyAB/darknet
Download zip或git clone方式都可以(我都試過一遍)。
2.2、安裝OpenCV
到官網下載,我下載的是open 4.2.0版本,win10系統,支持VS2015。(opencv-4.2.0-vc14_vc15.exe)。
這個實際是個壓縮包,exe執行解壓縮。
然后按照引用網文的做法,配置OPENCV_DIR環境變量,在Path中增加:opencv\build\x64\vc14\bin的路徑(其它路徑可不加)。
2.3、使用gcc編譯的問題
一開始,我按照V3的編譯的方法,即使用cygwin來編譯。
用cygwin64 terminal工具,直接在代碼的根目錄下,輸入make,編譯OK,生成了darknet.exe。
執行圖片檢測:
darknet.exe detect cfg/yolov3.cfg yolov3.weights test.jpg
可以的。
再下載一個yolov4.weights文件,執行:
darknet.exe detect cfg/yolov4.cfg yolov4.weights test.jpg
也是可以的。
但opencv沒有用起來,提示:
OpenCV isn't used - data augmentation will be slow.
Not compiled with OpenCV, saving to predictions.png instead
於是修改makefile文件,將第4行的:OPENCV=0改為OPENCV=1。
於是問題來了。
1)首先是,pkg-config命令不能識別(makefile文件的第90行),通過更新cygwin的安裝,增加pkg-config項,得以解決。
2)其次,提示:需要將包含opencv.pc文件的目錄,配置到環境變量PKG_CONFIG_PATH。我上網查了一下,這是linux的opencv版本才有的文件。
折騰了一番,還是搞不定opencv。不得已,使用網上的CMake的方法。
2.4、使用CMake
參考之前引文的方法,先到官網下載CMake,然后類似配置。
配置VS2015 VC14。
關於配置,我的電腦不支持GPU,因此ENABLE_CUDA、ENABLE_CUDANN、ENABLE_CUDANN_HALF不勾選。
一個小坑:USE_INTEGRATED_LIBS必須勾選,我一不小心去掉勾選,結果報了一堆下列錯誤:
錯誤 C2011 “timespec”:“struct”類型重定義 darknet E:\workspace\darknet\3rdparty\pthreads\include\pthread.h 320
配置(configure)完成后,然后generate,沒有問題。然后再點擊open project,打開VS2015。
選擇:release、x64,build all。
OK。
將編譯生成的darknet.exe復制到:\build\darknet\x64\目錄下。此為darknet.exe的運行環境。
3、效果體驗
圖片檢測:
darknet.exe detector test cfg/coco.data yolov4.cfg yolov4.weights -ext_output dog.jpg

視頻檢測:
darknet.exe detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output test.mp4
由於只使用CPU,沒有GPU,openCV顯示視頻非常卡頓(FPS=0.2)。網上說,2G內存都沒法試驗,會內存溢出。我的電腦內存有16G,故只是慢一些。