首先你要訓練自己模型,就必須先有自己的相片集,我是上網抓了一堆5566的照片來訓練,我在我的yolo5資料夾內創了一個datasets的資料夾,並且在裡面分別各創了一個images跟labbels的資料夾如下圖,當然你也可以不用照我方式創,只是這樣比較方便閱讀而已
創好之後我們得要開始針對每張照片都來進行標註,這是最花時間的地方….
我們之後一定會想訓練自己的模型,這時候除了準備你的資料集圖片之外,就是需要一個標註軟體來幫你標註。標註軟體網路上有好幾套都可以用,我是選labelImg,這套方便是因為它標好可以直接輸出成yolo可以用的txt格式,不用另外再轉換。
pip3 install labelImg
labelImg
軟體操作很簡單,你可以打開一張圖片,或是直接選整個資料夾,然後左邊選單記得修改成yolo格式(如下圖)
標記就選create rectbox這個然後標選你的物件,之後輸入物件的名稱即可。
標註完畢後存檔,他會把檔案存成跟你的圖片檔檔名一樣的txt檔,請注意如果存檔時預設不是txt檔而是xml之類的話,可以把上圖的yolo格式重新再設定一次看看(而在上面選單Edit裡面有auto save的功能,可以打開就不用每張照片都重新存檔一次)
0 0.357391 0.485119 0.144345 0.112434
1 0.488715 0.743552 0.107391 0.168981
0 0.235243 0.420800 0.057788 0.069775
1 0.051463 0.556217 0.044891 0.073413
檔案打開就會像上面那樣,第一個欄位表示物件編號0, 1, 2, 3… 後面四個欄位就是框框資訊
YOLO 的標註格式是普通文字檔,每一行代表一個標註物件,格式為 class x_center y_center width height
,各欄位以空白分隔,意義如下:
class
:類別 ID。x_center
:中心點 X 座標(標準化)。y_center
:中心點 Y 座標(標準化)。width
:方框寬度(標準化)。height
:方框高度(標準化)。這時候你應該會發現資料夾內多了一個classes.txt這個檔案
裡面就會有你物件名稱的列表了,就會剛好對應到上面那檔案的0 1 2 3….的編號
你標註好圖片後,你的資料夾內應該就會有一堆的圖片跟一堆跟圖片同名的txt檔,這時候把所有的圖片都放去yolo5資料夾->datasets資料夾->images資料夾>train資料夾內
而所有跟圖片同檔名的txt(除了classes.txt)都放到yolo5資料夾->datasets資料夾->labels資料夾>train資料夾內
這樣圖片檔案都歸檔好了,這時候我們要來創立我們訓練模型的yaml檔案
這個檔案會在yolov5\data資料夾下,你可以看到多預設範例的yolo5的模型yaml檔,我們只要拿一個來參考就可以了
首先我們可以創立一個屬於我們自己的yaml檔,例如叫做5566.yaml,檔案內容如下
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# Example usage: python train.py --data 5566.yaml
# parent
# ├── yolov5
# └── datasets
# └── 5566_dataset
path: datasets/5566_dataset # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/train # val images (relative to 'path') 128 images
test: # test images (optional)
# Classes
names:
0: star_leader #孫協志
1: star_wang #王仁甫
2: shu # 許孟哲
3: rapper_wang #王少偉
4: knife #彭康育 刀
可以看到上面有path的路徑跟train,這邊記得要對
而下面names我打英文是因為辨識時,預設中文編碼會有問題,所以先用英文當範例( 如果想要中文的話可以參考 YOLOV5 訓練中文亂碼問題)
這的yaml檔案用好後就可以開始訓練了
python train.py --batch 26 --epochs 500 --data 5566.yaml --weights yolov5n.pt
我們上面訓練時batch設定26 epochs設定500次 然後權重是採用olov5n.pt 來訓練,這些參數你都可以調整。訓練可能幾個小時就會結束了,看你的資料量跟你的電腦效能
YOLOv5 實際上又依據模型複雜度分為 yolov5n
、yolov5s
、yolov5m
、yolov5l
、yolov5x
,我們可以使用 --weight
參數來指定要採用的模型
根據下圖你可以決定你要用哪種模型,當然一定是效果越好訓練越久
訓練完後他會告訴你會把訓練的結果存放在yolov5\runs\train\exp下,一些關於此次訓練的結果也會一併顯示在那邊
之後你就可以用你的模型來辨識了
python detect.py --weight runs/train/exp/weights/best.pt --source 1795908-PH.jpg
參考文章: PyTorch 自行訓練 YOLOv5 物件偵測模型教學與範例