TensorFlow

yolo 自己訓練模型

首先你要訓練自己模型,就必須先有自己的相片集,我是上網抓了一堆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 實際上又依據模型複雜度分為 yolov5nyolov5syolov5myolov5lyolov5x,我們可以使用 --weight 參數來指定要採用的模型

根據下圖你可以決定你要用哪種模型,當然一定是效果越好訓練越久

訓練完後他會告訴你會把訓練的結果存放在yolov5\runs\train\exp下,一些關於此次訓練的結果也會一併顯示在那邊

之後你就可以用你的模型來辨識了

python detect.py --weight runs/train/exp/weights/best.pt  --source 1795908-PH.jpg

參考文章: PyTorch 自行訓練 YOLOv5 物件偵測模型教學與範例

Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。

(若看不到驗證碼,請重新整理網頁。)