- Getting Started with Roboflow
- LabelImg for Labeling Object Detection Data
- How to Train YOLO v5 on a Custom Dataset
- 构建深度学习环境
-
克隆仓库
# clone YOLOv5 repository git clone https://github.com/ultralytics/yolov5
-
安装依赖
cd yolov5 pip install -qr requirements.txt
通过 构建深度学习环境 后,可以不用执行依赖的安装
环境是否ok验证
import torch from IPython.display import Image, clear_output print('Setup complete. Using torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))
显示这个表示ok
# %s 表示占位,实际输出为准 Setup complete. Using torch %s.%s.%s+cux _CudaDeviceProperties(name='%s', major=%s, minor=%s, total_memory=%sMB, multi_processor_count=%s)
-
下载自定义数据集
从Roboflow下载数据集,导出格式使用
YOLOv5 PyTorch
具体细节请看
前提条件
将下载的文件解压后放到
yolov5/mydata
(放哪随意)修改
yolov5/mydata/data.yaml
文件train
val
train: your_path/yolov5/mydata/train/images val: your_path/yolov5/mydata/valid/images nc: 1 names: ['xxxx']
-
修改
yolov5/yolov5/models/
文件夹下的模板这里使用的是
yolov5s.yaml
,关于如何选择请参考主要是修改
nc
为yolov5/mydata/data.yaml
里定义的数量# parameters nc: 80 # number of classes 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]], # 0-P1/2 [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 [-1, 3, BottleneckCSP, [128]], [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 [-1, 9, BottleneckCSP, [256]], [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 [-1, 9, BottleneckCSP, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 1, SPP, [1024, [5, 9, 13]]], [-1, 3, BottleneckCSP, [1024, False]], # 9 ] # YOLOv5 head head: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, BottleneckCSP, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, BottleneckCSP, [256, False]], # 17 (P3/8-small) [-1, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, BottleneckCSP, [512, False]], # 20 (P4/16-medium) [-1, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, BottleneckCSP, [1024, False]], # 23 (P5/32-large) [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) ]
-
使用
yolov5/train.py
来进行训练python train.py --img 416 --batch 16 --epochs 800 --data your_path/yolov5/mydata/data.yaml --cfg /your_path/yolov5/models/custom_yolov5s.yaml --weights '' --workers 0 --name result --cache
训练成功会出现
...skip Stopping training early as no improvement observed in last 800 epochs. Best results observed at epoch 482, best model saved as best.pt. ...skip Results saved to runs/train/mydata CPU times: user 12.3 s, sys: 1.59 s, total: 13.9 s Wall time: 14min 7s
-
开始测试模型推断
python detect.py --weights your_path/yolov5/runs/train/mydata/weights/best.pt --img 600 --conf 0.4 --source your_path/yolov5/test/images
输出大概如下
...skip Speed: 0.5ms pre-process, 13.7ms inference, 0.7ms NMS per image at shape (1, 3, 608, 608) Results saved to runs/detect/exp3
遇到问题建议谷歌,一般都是环境问题