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.7和PyTorch> = 1.5。
git clone https://github.com/ultralytics/yolov5 # clone repopython3 -c “from yolov5.utils.google_utils import gdrive_download; gdrive_download(‘1n_oKgR81BJtqk75b00eAjdv03qVCQn2f’,‘coco128.zip’)” # download datasetcd yolov5pip 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/
類數量
#類名稱名稱: [“人”,“自行車”,“汽車”,“摩托車”,“飛機”,“公共汽車”,“訓練”,“卡車”,“船”,“交通燈”, “消火栓” ”,“停車標志”,“停車計時器”,“長凳”,“鳥”,“貓”,“狗”,“馬”,“綿羊”,“?!?#xff0c; “大象”,“熊”,“斑馬” ',‘長頸鹿’,‘背包’,‘雨傘’,‘手提包’,‘領帶’,‘手提箱’,‘飛盤’,# parametersnc: 80 # number of classes <------------------ UPDATE to match your datasetdepth_multiple: 0.33 # model depth multiplewidth_multiple: 0.50 # layer channel multiple # anchorsanchors: - [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 backbonebackbone: # [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 headhead: [[-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) ]
- 創建標簽
使用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 # imagedataset/labels/train2017/000000109622.txt # label
一個有5個人的標簽文件示例(所有0類):
3. 組織目錄
根據下面的示例組織您的train和val圖像和標簽。注意/coco128應該在/yolov5目錄旁邊。確保coco128/labels文件夾位于coco128/images文件夾旁邊。
- 選擇模型
從./models文件夾中選擇一個模型。在這里,選擇yolov5s.yaml,最小和最快的型號。請參閱的自述表,了解所有型號的完整比較。一旦您選擇了一個模型,如果您沒有訓練COCO,請更新yaml文件中的nc:80參數,以匹配步驟1中數據集中的類數。
**# parametersnc: 80 # number of classes <------------------ UPDATE to match your datasetdepth_multiple: 0.33 # model depth multiplewidth_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.png。results.txt可以用繪制部分完成的文件from
utils.utils import plot_results; plot_results()。在這里,顯示從coco128到100個紀元訓練的yolov5,從零開始(橙色),從預訓練的yolov5s.pt權重(藍色)開始:
總結
以上是生活随笔為你收集整理的GitHub上YOLOv5开源代码的训练数据定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub上开源的YOLOv5
- 下一篇: 构建深度学习框架运行平台