簡介
在前幾篇設定好環境、準備好自己要訓練的檔案之後,這篇要介紹有關於Yolo訓練、讀取model進行驗證,最後透過不同的方式來檢視你訓練後的成果。
訓練
我們之前有說過可以透過Anaconda來創建專屬Darknet來訓練的環境,首先我們可以看看你的Anaconda中有那些虛擬環境,找到我們先前為Darknet所創建的環境後並進入該環境,最後請移動到你的vcpkg中的darknet中。
conda env list
conda activate 虛擬環境名稱
cd 至你的vcpkg中的darknet路徑
接著我們可以下載預先訓練好的weights檔案,叫做「 darknet53.conv.74 .weights」,放置在你Darknet資料夾中。
darknet.exe detector train Eggy/cfg/obj.data Eggy/cfg/yolov3.cfg darknet53.conv.74
接著我們就要開始訓練了在指令「執行檔案+執行指令+.data路徑+yolov3路徑+先前訓練好的weight」 ,訓練的指令關鍵字是「detector train」,並且要用我們先前Build好的「darknet.exe」執行訓練程式,上述是執行訓練的指令。
在一開始跑開始訓練的畫面如上圖,可以看到畫上紅線處,系統會偵測你的cudnn版本以及顯示卡數量與型號,用來評估訓練的時間的其中一個元素。
上圖是成功開始訓練的畫面,我們可以看到左側有即時訓練的圖表,Y軸是模型的Loss,X軸是訓練的次數。
訓練中止
當我們開始訓練時候,當然想要越快訓練好越好,我們可以依照Darknet所提供的圖表,如上圖一,可以看到藍色的曲線,假如你Dataset圖片的張數有上千張的話,建議該曲線低於0.06在終止訓練,假如上百張大概就0.6就可以停止。
上圖二就是在Command line中可以看到每個Step訓練的詳細訊息,而我畫紅線的是整串資訊中最重要的訊息,就是「avg loss」,取決你停止訓練的時機。
而我們想要終止訓練的話可以在Command line中按下「ctrl + x」即可。
驗證
程式驗證
darknet.exe detector map Eggy/cfg/obj.data Eggy/cfg/yolov3.cfg Eggy/weights/yolov3_6000.weights
驗證的方式有很多種,有單張圖片驗證、影片驗證、即時驗證、程式驗證,而最快且最有效率最大量的驗證方式,就是透過程式來驗證。還記得在Dataset篇章有設定好兩組圖,一組是拿來訓練,一組就是拿來透過指令進行程式驗證,上述是指令,其中「map」是指令得關鍵。
可以看到上圖中紅線所提到的「mAP」就是指令「map」的用意,用來看看每一個classes的準確度,可以看到紅色框框就是我在object.name中所填入的每個標註類別,程式驗證將把每個classes的驗證準確率測試出並顯示在Command line中。
單張圖片驗證
darknet.exe detector test Eggy/cfg/obj.data Eggy/cfg/yolov3.cfg Eggy/weights/yolov3_6000.weights 圖片路徑
不同於程式驗證的關鍵指令,單張圖篇驗證的指令為「test」,而我們可以透過不同的圖片路徑來驗證不同的圖片,上圖是驗證成功的畫面,在Command line與圖片畫面中都會顯示辨識的百分比。
影片驗證
darknet.exe detector demo Eggy/cfg/obj.data Eggy/cfg/yolov3.cfg Eggy/weights/yolov3_6000.weights 影片路徑
而影片驗證的關鍵指令是「demo」,上述是完整的指令,與圖片不同的是,她可以一次偵測好幾張圖片(影片就是一堆圖片串成的),相對於單張驗證來講是比較有效率的。
即時驗證
darknet.exe detector demo Eggy/cfg/obj.data Eggy/cfg/yolov3.cfg Eggy/weights/yolov3_6000.weights -c 0
即時驗證可以透過手機或是桌機的Webcam來做即時的驗證,而關鍵字同於影片驗證相同,都是使用「demo」,只是他沒有要加什麼路徑在指令串的末端,只需要加入「-c 0」,意思就是「camera 0號」。
可以看到上圖展示結果,程式在每一偵都會進行辨識,而便是到的數量、類別、辨識率都會顯示在Command line與demo視窗中。
小結
綜合這幾篇關於Darknet手把手分享後,發現與Darkflow操作難易度真的差很多,平平都是用yolo的系統,但訓練的精細程度還是Darknet比較優。當然Darknet還有很多可以延伸的部分,例如:可以使用多格GPU來訓練(我們現在是用單GUP)、在Web進行驗證、使用Amazon平台來訓練模型、增強模型的精細程度、將weights在3D整合軟體實際應用,總而言之,Darknet真的很威,且最重要的是,訓練出來的model檔案都可以真真實實的長我在我們手上,有實際的檔案。