YOLO
本篇記錄如何使用自己的資料集,利用YOLO進行訓練
安裝 labelImg (Windows 作業系統)
https://drive.google.com/drive/folders/13f6XFDPI-cguUk9UUH9SH5AqrDU1gkTp?usp=share_link
開啟 labelImg 軟體後:
Step 1. 選擇資料夾
選取欲訓練的照片資料夾,並選取儲存 Label 的資料夾。(儲存Label 的資料夾,建議與訓練的照片資料夾相同)
Step 2. 選擇儲存成 Yolo 格式
Step 3. 標記目標物件
點選 Create RectBox,框選目標物件,並輸入物件名稱
Step 4. 存檔
此時,會根據 xxx.jpg ,產生對應的 xxx.txt。
xxx.txt 為Yolo格式,作為訓練 Yolo 模型的檔案。
完成所有資料的標記後,將所有訓練的照片檔案(.jpg)以及標記檔案(.txt),放至同一份資料夾。
此步驟為在 Step 1. Label data,使用 VOC 作為 label 的儲存格式(.xml),而非 Yolo 格式(.txt),則需要將 xml 檔案轉 txt 檔案,以符合 Yolo 的訓練格式。
若 Step 1. Label data 有正確將 label 設為 Yolo 格式(.txt),則不必進行此步驟。
定義getYoloFormat函數,功用如下
程式碼如下,並將status_dic內改成對應的label
呼叫getYoloFormat
範例程式碼
建立obj.data檔案
說明:
classes:總共的物件數量
train: 包含所有欲訓練的照片及標記檔案路徑
valid: 包含所有欲測試的照片及標記檔案路徑
names: obj.names 路徑位置
backup: 存放模型的訓練權重的資料夾位置
範例:
建立obj.name檔案,輸入所有的label種類。
注意: label 名稱須按照 Step 1. 的標記順序擺放。
例如:
以 Yolov4-tiny 為範例,./darknet/cfg/
底下,修改 yolov4-tiny-custom.cfg,複製一份新檔案,重新命名為 obj.cfg
,並修改 filter
以及 classes
:
修改方式:
:bulb: 尋找關鍵字:yolo,並參考下圖的相對位置做更改
:bulb: 修改規則為 [yolo] 內的classes以及 [yolo] 標籤前的filters,如下圖
filter數量計算方式為: 3*(classes + 5)
參考資料: Yolo 官方網站
https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
下載 pre-trained model (以 Yolov4-tiny 為範例)
https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.conv.29
開始訓練
於 darknet
底下執行 (需改成對應的參數路徑)
查看辨識結果,產生於darknet/prediction.jpg
(option) 設置 thresh ,可查看更低機率的class
:bulb:TroubleShooting
辨識不出東西,設 -thresh 0 ,發現預測機率都是 0% 時,將darknet/MakeFile中的cudnn設為0,並重新make clean 以及 make