AlexeyAB/darknet 版本的 YOLO 最被稱羨的就是可以輸出很多研究需要用的評估數據,因為有這些數據才有辦法評量目前的準確度是否足夠使用者滿意,安裝方式可以參照 Day 19 - 安裝 AlexeyAB/darknet ON Amazon Linux 2,下圖是安裝 AlexeyAB/darknet 版本的 YOLO 的檔案結構圖,介紹一下比較重要的檔案或文件夾:
圖 1、AlexeyAB/darknet 版本的 YOLO 的檔案結構圖
因為要將先前用 Joseph/darknet 訓練好的權重模型直接拿用套用,因為我們只是需要更多驗證或是測試期間的數據,所以就不重新訓練模型。最簡單的方法就是把 AlexeyAB/darknet 的 darknet 這個主程式搬到先前安裝的環境,請參考 Day 14 - 安裝與執行 YOLO 以及 Day 15 - 說明 YOLO 相關設定,下圖為使用自己圖片來訓練的的檔案結構圖,說明一下相關文件:
圖 2、使用自己圖片來訓練的的檔案結構圖
首先檢查 darknet 的執行是否包含一些共享函式庫,使用以下指令檢查,下圖中顯示出來的結果為雖然會用到很多共享函式庫,但都不在 AlexeyAB 這個文件夾內,所以直接複製過去就可以使用了。
ldd darknet
cd ~/fishRecognition/fishsite/FishRecognition/
cp ~/AlexeyAB/darknet .
圖 3、AlexeyAB/darknet的共享函式庫
運行先前的測試指令,可以發現跟先前的 Joseph/darknet 相比,輸出結果是一樣的,只是內容多了一點,而且看以下的訊息,似乎會自動彈出 OpenCV 的圖型畫面,來顯示結果,但因為是在遠端 EC2 的文件介面的 Amazon Linux 上運行,所以會出現 OpenCV exception 的錯誤訊息。
./darknet detector test cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup ./labels/00-frame-608x608-0030.jpg
圖 4、AlexeyAB/darknet 使用 yolov3 的測試結果
以下是嘗試沒有 data 這個文件夾的測試結果,如下圖所示,左邊是有 data 這個目錄的,右邊是把 data 改成 data~ 後的結果。
mv data data~
./darknet detector test cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup ./labels/00-frame-608x608-0030.jpg
圖 5、比較使用 data 與沒有的測試圖片
以下是 AlexeyAB/darknet 才可使用的語法,分別是顯示測試資料的 mAP, recall,結果分別如下圖分別顯示測試圖片針對個類別的 ap ,以及所有類別的 mAP, precision, recall, F1-score:還有個別圖片的 recall 值。
./darknet detector map cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup -iou_thresh 0.75
./darknet detector recall cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup
圖 6、測試圖片的 mAP, precision, recall, F1-score
圖 7、測試圖片中個別圖片的 recall 值
新增新的測試集 cfg/new-test.txt 來進行驗證。
cfg/new-test.txt
./labels/00-frame-608x608-0004-1.jpg
./labels/02-frame-608x608-0091-1.jpg
將所有的圖片改個名字,進行新的測試集的測試,並要求顯示出物件方塊框的所在座標。
cd labels
cp 00-frame-608x608-0004.jpg 00-frame-608x608-0004-1.jpg
cp 00-frame-608x608-0004.txt 00-frame-608x608-0004-1.txt
cp 02-frame-608x608-0091.jpg 02-frame-608x608-0091-1.jpg
cp 02-frame-608x608-0091.txt 02-frame-608x608-0091-1.txt
cd ..
./darknet detector map cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup -dont_show -save_labels -ext_output < cfg/new-test.txt > result_newtest.txt
圖 8、新增測試圖片
在下圖可以看出,除了顯示辨識的判斷機率外,還會顯示物體的方塊框座標。
圖 9、測試結果
此外,AlexeyAB/darknet 可以在驗證時對每一個類別產生一份驗證報告,要先新增一個 results 目錄,接著執行以下語法,便會在 results 目錄中生成三份驗證報告,因為這個練習只有三種辨識類別。
./darknet detector valid cfg/obj.data cfg/yolov3.cfg weights/yolov3.backup
./results/comp4_det_test_Altolamprologuscompressiceps.txt
00-frame-608x608-0004 0.695091 148.112183 405.041626 393.484497 485.914856
00-frame-608x608-0004 0.985318 44.345947 214.757629 326.162659 374.902832
00-frame-608x608-0004 0.045742 1.000000 216.310822 534.158752 384.061310
00-frame-608x608-0004 0.999615 38.003654 385.539154 208.513092 464.205353
00-frame-608x608-0004 0.990907 319.298859 388.642517 373.815460 433.122864
00-frame-608x608-0004 0.005802 137.095795 373.144440 366.280151 515.184265
00-frame-608x608-0004 0.003790 106.269424 242.552902 285.968262 334.292328
00-frame-608x608-0004 0.001615 73.208344 205.587555 247.985931 384.088348
00-frame-608x608-0004 0.001459 212.050888 374.788483 288.383789 412.966339
02-frame-608x608-0091 0.007312 105.508369 321.543884 170.846069 405.676208
02-frame-608x608-0091 0.001923 311.552612 233.153625 423.720398 279.820404
02-frame-608x608-0091 0.008265 135.432083 243.298737 185.704086 311.564911
02-frame-608x608-0091 0.003497 368.839294 292.943481 416.401672 344.871155
02-frame-608x608-0091 0.001466 184.931564 264.106323 231.303848 323.692810
02-frame-608x608-0091 0.001011 117.095284 334.017792 162.991821 392.841461
...部分內容
最後再介紹一個語法,據說是針對 AWS EC2 的專屬語法,可以在訓練期間就可以看到 mAP 以及 損失 Loss 圖型
./darknet detector train cfg/coco.data yolov4.cfg yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
然後打開瀏覽器,輸入網址 http://[EC2_PUBLIC_IP]:8090 就可以看到。