天天看點

[煉丹術]YOLOv5訓練自定義資料集

YOLOv5訓練自定義資料

一、開始之前的準備工作

克隆 repo 并在Python>=3.6.0環境中安裝requirements.txt,包括PyTorch>=1.7。模型和資料集會從最新的 YOLOv5版本中自動下載下傳。

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt
           

二、訓練自定義資料

2.1 建立my_dataset.yaml

COCO128是一個示例小教程資料集,由COCO train2017中的前 128 張圖像組成。這些相同的 128 張圖像用于訓練和驗證,以驗證我們的訓練管道是否能夠過拟合。資料/ coco128.yaml,如下所示,是資料集的配置檔案,它定義1)資料集根目錄

path

和相對路徑

train

/

val

test

圖像目錄(或* .txt與圖像檔案的路徑),2)的類的數量

nc

和3)類清單

names

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir 資料集根目錄
train: images/train2017  # train images (relative to 'path') 128 images #訓練圖像(相對于“path”)
val: images/train2017  # val images (relative to 'path') 128 images # val 圖像(相對于“path”)
test:  # test images (optional) #測試圖像(可選)

# Classes
nc: 80  # number of classes
names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]  # class names
           

這裡設定資料集路徑有三種方式:

    1. dir: path/to/imgs,
    1. file: path/to/imgs.txt, 或
    1. list: [path/to/imgs1, path/to/imgs2, .. ]

2.2 建立label标簽

使用CVAT或makeense.ai等工具标記圖像後,将标簽導出為YOLO 格式,

*.txt

每個圖像一個檔案(如果圖像中沒有對象,則不需要

*.txt

檔案)。該

*.txt

檔案規格有:

  • 每個對象一行
  • 每一行都是

    class x_center y_center width height

    格式。
  • 框坐标必須采用标準化 xywh格式(從 0 - 1)。如果您的箱子以像素為機關,劃分

    x_center

    width

    通過圖像寬度,

    y_center

    height

    通過圖像高度。
  • 類号是零索引的(從 0 開始)。
[煉丹術]YOLOv5訓練自定義資料集

上圖對應的标簽檔案包含2個人(class 0)和一條領帶(class 27):

[煉丹術]YOLOv5訓練自定義資料集

2.3 整理目錄

根據以下示例組織您的訓練和驗證圖像和标簽。YOLOv5 假設

/coco128

/datasets

目錄旁邊的

/yolov5

目錄中。YOLOv5通過将

/images/

每個圖像路徑中的最後一個執行個體替換為

/labels/

. 例如:

../datasets/coco128/images/im0.jpg   #圖像
../datasets/coco128/labels/im0.txt   #标簽
           

檔案結構,如下圖所示:

[煉丹術]YOLOv5訓練自定義資料集

2.4 選擇模型型号

選擇一個預訓練模型開始訓練。這裡我們選擇YOLOv5s,這是可用的最小和最快的模型。有關所有模型的完整比較,請參閱 README表。

[煉丹術]YOLOv5訓練自定義資料集
[煉丹術]YOLOv5訓練自定義資料集

2.5 train訓練

通過指定資料集、批量大小、圖像大小以及預訓練

--weights yolov5s.pt

(推薦)或随機初始化

--weights '' --cfg yolov5s.yaml

(不推薦),在 COCO128 上訓練 YOLOv5s 模型。預訓練權重是從最新的 YOLOv5 版本自動下載下傳的。

# 在COCO128 上訓練
YOLOv5s 3 epochs $ python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
           

所有訓練結果都儲存在

runs/train/

遞增的運作目錄中,即

runs/train/exp2

runs/train/exp3

等。有關更多詳細資訊,請參閱我們的 Google Colab Notebook 的訓練部分。

[煉丹術]YOLOv5訓練自定義資料集
[煉丹術]YOLOv5訓練自定義資料集

三、可視化

權重和偏差記錄(🚀 新)

權重和偏差(W&B) 現在與 YOLOv5 內建,用于訓練運作的實時可視化和雲記錄。這允許更好地運作比較和内省,以及提高團隊成員之間的可見性和協作。要啟用 W&B 日志記錄,請安裝

wandb

,然後正常訓練(首次使用時将指導您進行設定)。

pip install wandb
           

在訓練過程期間,你将在https://wandb.ai看到實時更新,并且您可以使用 W&B 報告工具建立結果的詳細報告。

[煉丹術]YOLOv5訓練自定義資料集

四、本地日志

所有的結果都在預設情況下記錄

runs/train

,為每個新的教育訓練作為建立一個新的實驗目錄

runs/train/exp2

runs/train/exp3

等檢視火車和Val JPG檔案看馬賽克,标簽,預測和增強效果。請注意,使用 Ultralytics Mosaic Dataloader進行訓練(如下所示),它在訓練期間将 4 個圖像組合成 1 個馬賽克。

train_batch0.jpg

顯示訓練批次 0 馬賽克和标簽:

[煉丹術]YOLOv5訓練自定義資料集

val_batch0_labels.jpg

顯示 val 批次 0 标簽:

[煉丹術]YOLOv5訓練自定義資料集

val_batch0_pred.jpg

顯示 val 批次 0預測:

[煉丹術]YOLOv5訓練自定義資料集

訓練結果自動記錄到Tensorboard和CSV中

results.csv

results.png

訓練完成後繪制為(下圖)。您還可以

results.csv

手動繪制任何檔案:

from utils.plots import plot_results 
plot_results('path/to/results.csv')  # plot 'results.csv' as 'results.png'
           
[煉丹術]YOLOv5訓練自定義資料集

Talk is cheap. Show me the code