最近在研究視頻分析相關技術,朋友推薦了darknet開源庫,其中主要使用yolo算法,想了解yolo的朋友請自行百度,下面直接說正題。
一、運行環境
OS:Windows 10
顯卡:GTX 1070 Ti
編譯器/IDE:CMake-3.15.0-rc4-win64x64, Visual Studio 2017,C++編譯工具集:V141,Python2.7
二、依賴庫
Darknet-master(從github下載,默認使用yolov3)
OpenCV:4.1.1(從github下載)
CUDA: 10.1
CUDNN:10.1(使用這玩意兒做分析時占用GPU資源占用很低)
三、OpenCV編譯
OpenCV主要使用CMake生成vcxproj項目工程文件,然后使用vs2017進行編譯。
操作步驟:
1. 使用CMake-gui.exe工具(需要下載一些東西,而且比較慢,脫機環境下要提前把依賴文件下載好)。
注意:上圖中BULID_opencv_world選項選中和不選中差異巨大,編譯Darknet-CUDNN版本所需要OpenCV依賴庫必須選中該選項才能編譯出來;普通版本采用默認配置就行(不選中)。筆者是在兩個目錄下分別編譯了兩個不同的版本,免得混淆。
2. 打開vs工程文件,編譯版本。編譯很慢,耐心等待。筆者直接使用Release x64。
3. 配置環境變量。本人對CMAKE語法不熟悉,折騰了很久,還是配環境變量來得快。這個步驟主要是為編譯Darknet,熟悉CMAKE語法的同學可以修改CMakeList.txt文件或cmake命令加參數應該也可以搞定。
4. 使用CMake-gui.exe生成Darknet在windows平台工程文件,同上面操作。(如果提示OpenCV_DIR、OpenCVConfig類似的錯誤,就是沒找到opencv目錄,上面配好了應該不會有問題。)
圖上有CUDNN相關警告,我沒有管它,后面直接改的vcxproj工程配置。
5. 配置工程。注意,有兩個目錄下有darknet.vcxproj文件。
這個是沒有CUDNN版本的
這個是帶CUDNN版本的
編譯時如果通不過,多半是由於包含目錄、庫目錄配置不對導致的,改掉就行。
四、測試
1. 測試前還需要下載神經網絡權重文件,筆者測試只用了yolov3.weights、yolov3-tiny.weights兩個文件。
2. 准備測試圖片或視頻文件,下面只帖視頻文件測試命令和測試結果。
視頻文件信息:1080p h264 2Mbps 25fps
權重文件:yolov3.weights
只列出重要的,使用yolov3-tiny.weights,FPS要高得多,但准確率有所下降。
結論:
1. 顯存基本等於單進程占用 * 進程數,max process = 3主要是因為打開4路進程顯存不夠用。
2. 總的fps比較固定,開啟多個進程意義不大。(使用yolov3-tiny.weights時多進程fps總和明顯大於單進程fps,可能跟解碼、IO速度有關,也就是說,算法復雜度低可考慮使用多進程,復雜度較高就沒必要了)
3. 內存占用、CPU雖然有消耗,但與GPU相比,瓶頸主要還是在GPU上。
4. cudnn優勢非常明顯,強烈建議使用(NVIDIA自己的東西還是好用)。
今天先寫到這里,下一步研究一下API使用和模型訓練。