總結了一些darknet代碼使用的小技巧。
技巧1 兩種測試方法
進行測試有兩種方法:
方式1:
$ ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg
方式2:
$ ./darknet detector test ./cfg/coco.data cfg/yolov4.cfg yolov4.weights data/dog.jpg
技巧2 顯示檢測框信息
將檢測結果詳細顯示,在末尾添加-ext_output即可:
$ ./darknet detector test ./cfg/coco.data cfg/yolov4.cfg yolov4.weights data/dog.jpg -ext_output
檢測結果如下:
可以看到,檢測每一類別的4個參數均顯示出來了,各參數的含義見下表:
left_x | 目標框左上角x座標 |
top_y | 目標框左上角y座標 |
width | 目標框的寬度 |
height | 目標框的高度 |
技巧3 設置檢測置信度閾值
設置檢測目標的置信度閾值thresh:
$ ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg -thresh 0.1
置信度閾值thresh設置得越低,檢測的目標越多,當然虛警則會越多。
技巧4 視頻檢測
檢測視頻(本地需要有一個USB攝像頭)
$ ./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights
執行指令後,系統會自動識別本地攝像頭。這裏檢測還會顯示檢測的幀率:
本地視頻檢測指令如下:
$ ./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights <video file>
這裏的<video file>代表本地提前準備好的檢測視頻。
問題:這裏有個疑問,在使用yolov4模型進行視頻檢測指令時,檢測的幀率一直保持在30FPS左右,換成yolov4-tiny模型進行檢測,幀率仍然是30FPS左右。竟然沒有變化,不知道什麼原因?
技巧5 多張圖片檢測
如果檢測多張圖片,可以將前面指令中後面圖片的路徑去掉,即:
$ ./darknet detector test ./cfg/coco.data cfg/yolov4.cfg yolov4.weights
這時會出現Enter Image Path:的提示,輸入待檢測圖片的路徑即可。這張檢測完後,會繼續彈出Enter Image Path:的提示,這樣就可以實現多張圖片的檢測。
技巧6 批量圖片檢測
批量檢測圖片,參考這篇:YOLOv3批量測試圖片並保存。
技巧7 修改檢測顯示類別
修改圖片顯示的檢測類別。在訓練了自己的數據後,採用如下指令進行測試:
$ ./darknet detect cfg/yolov4-oil.cfg backup/yolov4-oil_final.weights data/test_oil.jpg
往往會發現檢測類別沒有更改過來。比如檢測的桶,但是圖片上顯示的卻是bicycle,尷不尷尬?(如下圖所示)
這時候就需要進行操作了:
方法1:修改源碼(不推薦)
找到進入整個工程中的main函數(main()函數在src/darknet.c文件中的432行),如果採用指令$ ./darknet detect進行檢測(也就是上面這條指令),則需要修改src/darknet.c文件中第498行的test_detector函數的第一個參數,將"cfg/coco.data"修改爲自己需要的.data文件,然後重新進行編譯即可。(這種方式不推薦,因爲換了訓練數據集後這裏的源碼又要改,所以可用下面的方法2)。
方法2:換測試指令(推薦)
換技巧1中的方式2進行檢測,即採用$ ./darknet detector test進行檢測,由於test後面跟的參數就是.data文件,因此不需要修改就能是識別的標籤正確標示:
$ ./darknet detector test cfg/oil_test.data cfg/yolov4-oil.cfg backup/yolov4-oil_final.weights data/test_oil.jpg
技巧8 recall的計算
recall的計算:
$ ./darknet detector recall cfg/oil_test.data cfg/yolov4/yolov4-zydz.cfg backup/yolov4-zydz_final.weights
zydz.data文件的內容如下:
classes= 3
train = data/train.txt
valid = data/test.txt
names = data/oil_test.names
backup = backup
#eval = coco
上面這條指令會讀取valid後面的路徑,即讀取test.txt文件中所對應的圖片。
技巧9 mAP的計算(mean average precision)
$ ./darknet detector map cfg/oil_test.data cfg/yolov4-oil.cfg backup/yolov4-oil.weights
結果如下:
當然darknet代碼的使用遠遠不止上面的這些用法,可以閱讀源碼查看更多的用法。歡迎補充~~~