作者|Jacob Solawetz, Joseph Nelson
編譯|Flin
來源|blog

YOLO系列的目標檢測模型隨著YOLOv5的引入變得越來越強大,在這篇文章中,我們將介紹如何訓練YOLOv5為你的定制用例識別定制物件,

非常感謝Ultralytics將此存盤庫組合在一起,我們相信,與干凈的資料管理工具相結合,任何希望在其專案中部署計算機視覺專案的開發人員都可以輕松地使用此技術,
我們使用公共血細胞檢測資料集,你可以自己匯出,你也可以在自己的自定義資料上使用本教程,
- 公共血細胞檢測資料集:https://public.roboflow.ai/object-detection/bccd
為了訓練探測器,我們采取以下步驟:
-
安裝YOLOv5依賴項
-
下載自定義YOLOv5物件檢測資料
-
定義YOLOv5模型配置和架構
-
訓練一個定制的YOLOv5探測器
-
評估YOLOv5性能
-
可視化YOLOv5訓練資料
-
對測驗影像運行YOLOv5推斷
-
匯出保存的YOLOv5權重以供將來推斷
YOLOv5:有什么新鮮的嗎?
就在兩個月前,我們對googlebrain引入EfficientDet感到非常興奮,并寫了一些關于EfficientDet的博客文章,我們認為這個模型可能會超越YOLO家族在實時目標探測領域的突出地位——事實證明我們錯了,
三周內,YOLOv4在Darknet框架下發布,我們還寫了更多關于分解YOLOv4研究的文章,
在寫這篇文章之前幾個小時,YOLOv5已經發布,我們發現它非常清晰明了,
YOLOv5是在Ultralytics-Pythorch框架中撰寫的,使用起來非常直觀,推理速度非常快,事實上,我們和許多人經常將YOLOv3和YOLOv4 Darknet權重轉換為Ultralytics PyTorch權重,以便使用更輕的庫更快地進行推理,
YOLOv5比YOLOv4表現更好嗎?我們很快會向你介紹,你可能對YOLOv5和YOLOv4有了初步的猜測,

YOLOv5與EfficientDet的性能對比
YOLOv4顯然沒有在YOLOv5存盤庫中進行評估,也就是說,YOLOv5更易于使用,而且它在我們最初運行的定制資料上表現非常出色,
我們建議你在 YOLOv5 Colab Notebook 中同時進行接下來的操作,
- https://colab.research.google.com/drive/1gDZ2xcTOgR39tGGs-EZ6i3RTs16wmzZQ
安裝YOLOv5環境
從YOLOv5開始,我們首先克隆YOLOv5存盤庫并安裝依賴項,這將設定我們的編程環境,準備好運行物件檢測訓練和推理命令,
!git clone https://github.com/ultralytics/yolov5 # clone repo
!pip install -U -r yolov5/requirements.txt # install dependencies
%cd /content/yolov5
然后,我們可以看看我們的訓練環境免費提供給我們的谷歌Colab,
import torch
from IPython.display import Image # for displaying images
from utils.google_utils import gdrive_download # for downloading models/datasets
print('torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))
很可能你會從谷歌Colab收到一個 Tesla P100 GPU,以下是我收到的:
torch 1.5.0+cu101 _CudaDeviceProperties(name='Tesla P100-PCIE-16GB', major=6, minor=0, total_memory=16280MB, multi_processor_count=56)
GPU可以讓我們加快訓練時間,Colab也很好,因為它預裝了torch和cuda,如果你嘗試在本地上使用本教程,可能需要執行其他步驟來設定YOLOv5,
下載自定義YOLOv5物件檢測資料
在本教程中,我們將從Roboflow下載YOLOv5格式的自定義物件檢測資料,在本教程中,我們使用公共血細胞檢測資料集訓練YOLOv5檢測血流中的細胞,你可以使用公共血細胞資料集或上傳你自己的資料集,
- Roboflow:https://roboflow.ai/
- 公共血細胞資料集:https://public.roboflow.ai/object-detection/bccd
關于標記工具的快速說明
如果你有未標記的影像,則首先需要標記它們,對于免費的開源標簽工具,我們推薦 LabelImg入門 或 CVAT注釋工具入門 的指南,嘗試標記約50幅影像再繼續本教程,要在以后提高模型的性能,你將需要添加更多標簽,
- https://blog.roboflow.ai/getting-started-with-labelimg-for-labeling-object-detection-data/
- https://blog.roboflow.ai/getting-started-with-cvat/
一旦你標記了資料,要將資料移動到Roboflow中,請創建一個免費帳戶,然后你可以以任何格式拖動資料集:(VOC XML、COCO JSON、TensorFlow物件檢測CSV等),
上傳后,你可以選擇預處理和增強步驟:

為BCCD示例資料集選擇的設定
然后,單擊 Generate 和 Download,你將能夠選擇YOLOv5 Pythorch格式,

選擇“YOLO v5 Pythorch”
當出現提示時,一定要選擇“Show Code Snippet”,這將輸出一個下載curl腳本,這樣你就可以輕松地將資料以正確的格式移植到Colab中,
curl -L "https://public.roboflow.ai/ds/YOUR-LINK-HERE" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip
正在Colab中下載…

下載YOLOv5格式的自定義物件資料集
匯出將創建一個名為data.yaml的YOLOv5.yaml檔案,指定YOLOv5 images檔案夾、YOLOv5 labels檔案夾的位置以及自定義類的資訊,
定義YOLOv5模型配置和架構
接下來,我們為我們的定制物件檢測器撰寫一個模型組態檔,在本教程中,我們選擇了最小、最快的YOLOv5基本模型,你可以從其他YOLOv5模型中選擇,包括:
- YOLOv5s
- YOLOv5m
- YOLOv5l
- YOLOv5x
你也可以在此步驟中編輯網路結構,但一般不需要這樣做,以下是YOLOv5模型組態檔,我們將其命名為custom_yolov5s.yaml:
nc: 3
depth_multiple: 0.33
width_multiple: 0.50
anchors:
- [10,13, 16,30, 33,23]
- [30,61, 62,45, 59,119]
- [116,90, 156,198, 373,326]
backbone:
[[-1, 1, Focus, [64, 3]],
[-1, 1, Conv, [128, 3, 2]],
[-1, 3, Bottleneck, [128]],
[-1, 1, Conv, [256, 3, 2]],
[-1, 9, BottleneckCSP, [256]],
[-1, 1, Conv, [512, 3, 2]],
[-1, 9, BottleneckCSP, [512]],
[-1, 1, Conv, [1024, 3, 2]],
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 6, BottleneckCSP, [1024]],
]
head:
[[-1, 3, BottleneckCSP, [1024, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],
[-2, 1, nn.Upsample, [None, 2, "nearest"]],
[[-1, 6], 1, Concat, [1]],
[-1, 1, Conv, [512, 1, 1]],
[-1, 3, BottleneckCSP, [512, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],
[-2, 1, nn.Upsample, [None, 2, "nearest"]],
[[-1, 4], 1, Concat, [1]],
[-1, 1, Conv, [256, 1, 1]],
[-1, 3, BottleneckCSP, [256, False]],
[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1, 0]],
[[], 1, Detect, [nc, anchors]],
]
訓練定制YOLOv5探測器
我們的data.yaml和custom_yolov5s.yaml檔案準備好了,我們準備好訓練了!
為了開始訓練,我們使用以下選項運行訓練命令:
-
img:定義輸入影像大小
-
batch:確定批次大小
-
epochs:定義訓練時間段的數量,(注:通常,3000+很常見!)
-
data:設定yaml檔案的路徑
-
cfg:指定我們的模型配置
-
weights:指定權重的自定義路徑,(注意:你可以從Ultralytics Google Drive檔案夾下載權重)
-
name:結果名稱
-
nosave:只保存最后的檢查點
-
cache:快取影像以加快訓練速度
運行訓練命令:

訓練定制的YOLOv5探測器,它訓練得很快!
在訓練期間,你想看 [email protected] 來了解你的探測器是如何運行的,請參閱這篇文章,
- https://blog.roboflow.ai/what-is-mean-average-precision-object-detection/
評估定制YOLOv5探測器性能
現在我們已經完成了訓練,我們可以通過查看驗證指標來評估訓練程序的執行情況,訓練腳本將洗掉tensorboard日志,我們將其可視化:

在我們的自定義資料集上可視化tensorboard結果
如果你因為一些原因不能把張量板可視化,結果也可以用utils.plot_result來繪制并保存為result.png,

我早早就停止了訓練,你需要在驗證映射達到其最高點處獲取經過訓練的模型權重,
可視化YOLOv5訓練資料
在訓練程序中,YOLOv5訓練管道通過增強創建成批的訓練資料,我們可以可視化訓練資料真實性和增強訓練資料,

我們的真實訓練資料

我們的訓練資料采用自動YOLOv5增強
對測驗影像運行YOLOv5推斷
現在我們利用我們訓練過的模型,對測驗影像進行推理,訓練完成后,模型權重將保存 weights/,
對于推理,我們呼叫這些權重和一個指定模型置信度的conf(要求的置信度越高,預測越少)和一個推理源,源可以接受一個包含影像、單個影像、視頻檔案以及設備的網路攝像頭埠的目錄,對于源代碼,我將test/*jpg移到test-infer/,
!python detect.py --weights weights/last_yolov5s_custom.pt --img 416 --conf 0.4 --source ../test_infer
推理時間非常快,在我們的 Tesla P100 上,YOLOv5s 達到了每秒142幀!!

以142 FPS(0.007s/影像)的速度推斷YOLOv5s
最后,我們在測驗影像上可視化我們的探測器推斷,

測驗影像的YOLOv5推理
匯出保存的YOLOv5權重以供將來推斷
既然我們定制的YOLOv5物體探測器已經過驗證,我們可能需要從Colab中取出權重,用于實時計算機視覺任務,為此,我們匯入一個Google驅動器模塊并將其發送出去,
from google.colab import drive
drive.mount('/content/gdrive')
%cp /content/yolov5/weights/last_yolov5s_custom.pt /content/gdrive/My\ Drive
結論
我們希望你喜歡訓練你的定制YOLOv5探測器!
使用 YOLOv5 非常方便,YOLOv5訓練迅速,推理迅速,表現出色,
讓我們把它弄出來!
原文鏈接:https://blog.roboflow.ai/how-to-train-yolov5-on-a-custom-dataset/
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/99243.html
標籤:其他
