簡介
當我們都把環境設置好後,接下來就是要準備餵給Yolo訓練的素材了,有別於DarkFlow的DataSet,Darknet要準備的素材就比較多了,像是Darknet只需要準備1.圖片2.VOC檔案,而這篇要講述Darknet要準備兩倍的資料。
Image & Label
從網路神人所提供的「vcpkg for Win」,這邊先標註一下darknet放置在vcpkg的哪裡。
這與DarkFlow相同,都需要創建自己想要訓練的DataSet,只是我自己訓練的Label格式是使用「txt格式」,可以參照「AI – Yolo – Format Convert Tool」,有Label常見格式。
AI的精準度,當然取決於你的DataSet,不能Label一些完全沒值得AI學習的Image,而網路上有人分享了一些Image與Label的提示:
CH.Tseng 對於DataSet建議
從V2開始,可以自行在cfg檔中設定輸入圖片的尺寸(預設416×416或最高608×608,或任何大於32的2次方倍數尺寸)。所以若在拍攝相片時能用愈高像素來拍更好,可label出的物件愈多,且在後續使用的彈性更大。
在相片的準備上,建議需注意多樣及差異性,假設我們要準備柑橘圖片for辨識使用,那麼拍攝時需注意到:
– 不同環境:比如溫室或戶外的場地,高架或平地種植的草莓。
– 不同季節:蔬果外觀顏色的變化。
– 不同時間:光影的變化帶來的差異,直射斜射或散射光。
– 不同氣候:雨天與乾季對於蔬果外形的影響。
– 不同生長周期:蔬果從發芽抽高長葉到開花結果成熟…等,不同時期的外觀變化。
參考: https://tinyurl.com/ydzc7rth
假設我們擁有具有特徵意義的一些圖片之後,則要進行Labeling的動作,大家也可以參照我之前分享過的Labeling工具介紹去選擇,或是直接使用LabelImg。
當然最便利的方式就是製作出逼真的模擬場景,再透過自動化程式去快速的拍攝DataSet中的Image,往後有機會可以分享一下我的AutoLabeling Tool in Unity。
最後把Image與Label放到我們安排好的資料夾中,資料夾都可以自己命名,在下段會介紹參照檔案會指定訓練程式去讀去那些路徑中的檔案,而上圖是我放置Image與Label的地方。
訓練的Data參照檔案
除了Image與Label data之外,還需要準備另外四個訓練要使用的參照檔案,以下一一介紹,我把參照檔案一併放置在我創建的cfg資料夾中,如上圖:
- .name : 這檔案的內容是要塞你所準備的Label標註的目標種類,如上圖,我的目標種類有四種,並且要把每一個種類的名稱打上去,在之後成果展示時,透過妳訓練好的model,假如偵測到某個目標就會顯示文字與辨識度在畫面中。
- .data : 可以看到上圖,是我的.data檔案,其中有定義Label目標數目、train.txt、test.txt、weights的path,YOLO訓練及預測時皆會讀存與江訓練好的.weights檔案儲存在路徑中,這在開始訓練篇章會詳述。
- train.txt & test.txt : 訓練時YOLO會依次讀取該檔內容取出相片進行訓練。大家可以自己分配要訓練與測試評估的圖片比例,我是取80%做訓練,20%做測試評估。大家可以看到上圖,在文字檔中每一行都有每張圖片的路徑,假如你的Image數量太大,可以用Convert2Yolo工具,直接幫你把這兩個檔案自動產出。
cfg檔案
目前最新的是yolov4,但網路上大家較常使用yolov3。cfg主要的目的是模型訓練的設定檔案,修改方式與Darkflow的cfg設定檔大同小異,大家可以參照這篇。但這邊我還是紀錄一下Darknet版本。
我這邊是拿yolov3.cfg來修改符合我的label項目(你要標註的目標)版本。由於是直接改整包下載下來的Darknet中的yolov3.cfg,所以我就直接講哪幾行要改:
3: set batch=24
4: set subdivisions=8
...
603: set filters=(classes + 5)*3
...
610: set classes=2
...
689: set filters=(classes + 5)*3
...
696: set classes=2
...
776: set filters=(classes + 5)*3
...
783: set classes=2
batch是代表在一次迭代中,有64張圖片被拿來訓練,以更新神經網路的參數 。
subdivisions 是拿來處理GPU記憶體不足的問題,可以使用1,2,4,8,16來測測看。
classes,在我的DataSet中使用了四個類別,這會關係到Filters的數。
filters,根據classes的數量,在yolo有個公式「(classes + 5)*3」,而在我的Filter數就是(4+5)*3=27。大家假如Classes標註Labeling物件數量有不同,該值也會跟著做變動。
而yolov3與yolov3-tiny要設定的classes filter行數也不同,tiny的僅需要修改兩組就好。
小結
Darknet | Darkflow | |
難易度 | 難 | 較簡單 |
準確度 | 高 | 中等 |
train model | 有 | 無(暫存檔) |
cfg支援 | v3 , v4 | v3 , v4 |
Labeling格式 | voc.txt | voc.xml |
上表是Darkflow與Darknet要準備的DataSet的差別,呼應本篇簡介所提到的,要準備的檔案數量是雙倍的,但訓練出的成果也會是雙倍的準確,我這邊整理了一個堆照表可供大家參考兩者間的差別,依照不同的目的可以去選用哪個訓練平台。
做一個小結論,第一段所描述的「Image & Label」放置在「YOLO」資料夾中,第二段描述的參照檔案放置在「cfg」,最後經過訓練程式產出的model檔案放置在「weights」,由於參照檔案中的「backup weights」路徑有指向該資料夾。
而下一篇我們要進入訓練的指令實際操作篇章,所以在之前的每個步驟都需要萬事俱備,東風馬上就來了。