GitHub上YOLOv5開源代碼的訓練數據定義


GitHub上YOLOv5開源代碼的訓練數據定義

代碼地址:https://github.com/ultralytics/YOLOv5

訓練數據定義地址:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data

YOLOv5訓練自定義數據

本指南說明了如何使用YOLOv5 訓練自己的自定義數據集

開始之前

copy此倉庫,下載教程數據集,並安裝requirements.txt依賴項,包括Python> = 3.7PyTorch> = 1.5

git clone https://github.com/ultralytics/yolov5 # clone repo
python3 -c "from yolov5.utils.google_utils import gdrive_download; gdrive_download('1n_oKgR81BJtqk75b00eAjdv03qVCQn2f','coco128.zip')" # download dataset
cd yolov5
pip install -U -r requirements.txt

訓練自定義數據

1.創建Dataset.yaml

data / coco128.yaml是一個小型教程數據集,由COCO train2017 中的前128張圖像組成。在此示例中,這些相同的128張圖像用於訓練和驗證。coco128.yaml定義1)訓練圖像目錄的路徑(或帶有訓練圖像列表的* .txt文件的路徑),2)與的驗證圖像相同的路徑,3)類數,4)類列表名稱:

訓練和Val的數據集(圖像目錄或* .txt與圖像路徑文件)
訓練: ../coco128/images/train2017/ 
VAL: ../coco128/images/train2017/

類數量

類名稱
名稱: [“人”,“自行車”,“汽車”,“摩托車”,“飛機”,“公共汽車”,“訓練”,“卡車”,“船”,“交通燈”,
        “消火栓” ”,“停車標志”,“停車計時器”,“長凳”,“鳥”,“貓”,“狗”,“馬”,“綿羊”,“牛”,
        “大象”,“熊”,“斑馬” ','長頸鹿','背包','雨傘','手提包','領帶','手提箱','飛盤',# parameters
nc: 80  # number of classes   <------------------  UPDATE to match your dataset
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32
# yolov5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 1-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 2-P2/4
   [-1, 3, Bottleneck, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 4-P3/8
   [-1, 9, BottleneckCSP, [256, False]],
   [-1, 1, Conv, [512, 3, 2]],  # 6-P4/16
   [-1, 9, BottleneckCSP, [512, False]],
   [-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 12, BottleneckCSP, [1024, False]],  # 10
  ]
# yolov5 head
head:
  [[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],  # 12 (P5/32-large)
   [-2, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Conv, [512, 1, 1]],
   [-1, 3, BottleneckCSP, [512, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],  # 16 (P4/16-medium)
   [-2, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 3, BottleneckCSP, [256, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],  # 21 (P3/8-small)
   [[], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

2. 創建標簽             

使用Labelbox或CVAT等工具標記圖像后,將標簽導出為darknet格式,每個圖像一個*.txt文件(如果圖像中沒有對象,則不需要*.txt文件)。*.txt文件規范如下:             

每個對象一行              

每一行是類x_center,y_center寬度高度格式。             

框坐標必須是標准化的xywh格式(從0到1)。如果方框以像素為單位,請將x_center和寬度除以圖像寬度,將y_center和高度除以圖像高度。             

類號是零索引的(從0開始)。             

每個圖像的標簽文件應該可以通過在其路徑名中將/image s/*.jpg替換為/labels/*.txt來定位。圖像和標簽對的示例如下:

dataset/images/train2017/000000109622.jpg  # image
dataset/labels/train2017/000000109622.txt  # label

一個有5個人的標簽文件示例(所有0類):

 

3. 組織目錄             

根據下面的示例組織您的train和val圖像和標簽。注意/coco128應該在/yolov5目錄旁邊。確保coco128/labels文件夾位於coco128/images文件夾旁邊。

 

4. 選擇模型             

從./models文件夾中選擇一個模型。在這里,選擇yolov5s.yaml,最小和最快的型號。請參閱的自述表,了解所有型號的完整比較。一旦您選擇了一個模型,如果您沒有訓練COCO,請更新yaml文件中的nc:80參數,以匹配步驟1中數據集中的類數。

# parameters
nc: 80  # number of classes   <------------------  UPDATE to match your dataset
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32
# yolov5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 1-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 2-P2/4
   [-1, 3, Bottleneck, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 4-P3/8
   [-1, 9, BottleneckCSP, [256, False]],
   [-1, 1, Conv, [512, 3, 2]],  # 6-P4/16
   [-1, 9, BottleneckCSP, [512, False]],
   [-1, 1, Conv, [1024, 3, 2]], # 8-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 12, BottleneckCSP, [1024, False]],  # 10
  ]
# yolov5 head
head:
  [[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],  # 12 (P5/32-large)
   [-2, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Conv, [512, 1, 1]],
   [-1, 3, BottleneckCSP, [512, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],  # 16 (P4/16-medium)
   [-2, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 3, BottleneckCSP, [256, False]],
   [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],  # 21 (P3/8-small)
   [[], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

5.訓練

運行以下訓練命令以訓練coco128.yaml5個時期。您可以通過傳遞從零開始訓練yolov5,也可以--cfg yolov5s.yaml --weights ''通過傳遞匹配的權重文件從預訓練的檢查點進行訓練:--cfg yolov5s.yaml --weights yolov5s.pt

# Train yolov5s on coco128 for 5 epochs
$ python train.py --img 640 --batch 16 --epochs 5 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights ''

 6.可視化

訓練開始后,查看train*.jpg圖像以查看訓練圖像,標簽和增強效果。請注意,鑲嵌數據加載器用於訓練(如下所示),這是由Ultralytics開發並在YOLOv4中首次使用的新數據加載概念。如果這些圖像中的標簽不正確,則說明您的數據標簽不正確,應重新訪問2.創建標簽。 

 

 在第一個階段完成后,查看test_batch0_gt.jpg以查看測試批次0地面真相標簽:

 

並查看test_batch0_pred.jpg以查看測試批次0的預測:

 

訓練損失和績效指標將保存到Tensorboard以及results.txt日志文件中。訓練完成后results.txt繪制results.pngresults.txt可以用繪制部分完成的文件from utils.utils import plot_results; plot_results()。在這里,顯示從coco128到100個紀元訓練的yolov5,從零開始(橙色),從預訓練的yolov5s.pt權重(藍色)開始:

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM