Yolo v4系列學習(六)darknet代碼的使用小技巧

        總結了一些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代碼的使用遠遠不止上面的這些用法,可以閱讀源碼查看更多的用法。歡迎補充~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章