发布时间:
Ultralytics YOLOv5 🚀 是由 Ultralytics 开发的尖端、达到业界顶尖水平(SOTA)的计算机视觉模型。基于 PyTorch 框架,YOLOv5 以其易用性、速度和准确性而闻名。它融合了广泛研究和开发的见解与最佳实践,使其成为各种视觉 AI 任务的热门选择,包括目标检测,图像分割和图像分类
预训练模型和数据格式要求
-
数据格式要求:
YOLOv5 使用的标准数据格式是 YOLO 格式。对于每张图像,需要创建一个与之对应的标签文件,标签文件使用
.txt
格式,其中包含该图像中所有物体的位置信息。- 图像格式:YOLOv5 支持 JPEG、PNG、BMP 等常见图像格式。
- 标签格式:每个图像有一个对应的
.txt
标签文件,文件的名称与图像文件的名称相同。例如:image1.jpg
对应image1.txt
。
标签文件的每一行描述一个物体的边界框(bounding box)。每一行的格式为:
<class_id> <x_center> <y_center> <width> <height>
<class_id>
:物体类别的编号,从0
开始。例如:第一个类别是0
,第二个是1
,以此类推。<x_center>
,<y_center>
:边界框中心点的坐标,归一化到 [0, 1] 范围,即(x_center / image_width)
和(y_center / image_height)
。<width>
,<height>
:边界框的宽度和高度,归一化到 [0, 1] 范围,即(box_width / image_width)
和(box_height / image_height)
。
示例:
对于一张图像,假设图像的分辨率是 640x480,图中有一个物体(例如,线束圈),该物体的边界框为(x1, y1, x2, y2)
= (100, 150, 200, 250)。那么对应的标签文件内容应该是:0 0.25 0.5 0.15 0.21
其中,
0
是类别编号,x_center=0.25
、y_center=0.5
,width=0.15
、height=0.21
分别是归一化后的宽度和高度。 -
如何标注图片:
标注图像是为训练模型提供必要数据的过程。以下是常见的标注工具:- LabelImg:一个开源的图像标注工具,支持 YOLO 格式的标注。你可以手动绘制矩形框并标注物体类别,软件会生成对应的
.txt
文件。
- LabelImg:一个开源的图像标注工具,支持 YOLO 格式的标注。你可以手动绘制矩形框并标注物体类别,软件会生成对应的
-
图像分辨率要求:
-
推荐分辨率:YOLOv5 在训练时对输入图像的分辨率没有严格要求,通常推荐将图像调整到 640x640 或 416x416。
- 在训练过程中,YOLOv5 会自动将图像缩放到指定的大小。通常,较大的图像分辨率会带来更高的精度,但也需要更多的计算资源和内存。
-
最大尺寸:YOLOv5 可以处理较大的图像,但需要注意计算资源,过大的图像会增加内存和计算负担。
-
自适应输入:YOLOv5 支持自适应输入尺寸,如果图像不是标准大小,它会进行自动填充或裁剪以适配训练模型。
-
-
训练数据准备:
-
数据集划分:通常,数据集分为训练集、验证集和测试集。一般情况下:
- 训练集:80% 的数据用于训练。
- 验证集:10% 的数据用于验证。
- 测试集:10% 的数据用于最终测试。
-
文件结构:
/dataset /images /train /val /test /labels /train /val /test
-
-
YOLOv5 数据集的组织:
-
labels 文件夹:与
images
文件夹对应,里面存放每张图像的.txt
标签文件。 -
配置文件:YOLOv5 使用
.yaml
配置文件来定义数据集的信息,包括类别名称、数据集路径等。
示例:train: /path/to/train/images val: /path/to/val/images nc: 2 # 类别数 names: ['line_bundle', 'other_object'] # 类别名称
-
一、准备数据 #
收集图片数据,进行图片标注,图片格式要求,尽量使用大小一致的图片
二、标注工具 #
labelImg 需要 python 3.0 以上版本安装:
pip3 install labelImg
常用快捷键:
- W:启动矩形框标注工具。
- A:切换到上一张图片。
- D:切换到下一张图片。
- Del:删除当前选中标注框。
- Ctrl+D:复制当前标签和矩形框。
- Ctrl+Shift+D:删除当前图片。
三、创建数据集 #
目录结构:
- wiring
- images:图片
- train:训练图片
- val: 验证图片
- test:测试图片
- labels:边界框
- train:训练数据
- val:验证数据
- test:测试数据
- images:图片
- wiring.yaml yolo 配置文件
datasets
├── wiring
│ ├── images
│ │ ├── train
│ │ │ ├── 00000001.jpg (63959B)
│ │ │ ├── 00000002.jpg (68349B)
│ │ │ ├── 00000003.jpg (67362B)
│ │ │ ├── 00000004.jpg (67151B)
│ │ │ └── ...
│ │ └── val
│ │ ├── 00000005.jpg (63959B)
│ │ ├── 00000006.jpg (68349B)
│ │ ├── 00000007.jpg (67362B)
│ │ ├── 00000008.jpg (67151B)
│ │ └── ...
│ └── labels
│ ├── train
│ │ ├── 00000001.txt (38B)
│ │ ├── 00000002.txt (38B)
│ │ ├── 00000003.txt (38B)
│ │ ├── 00000004.txt (38B)
│ │ └── ...
│ ├── val
│ │ ├── 00000005.txt (114B)
│ │ ├── 00000006.txt (114B)
│ │ ├── 00000007.txt (76B)
│ │ ├── 00000008.txt (38B)
│ │ └── ...
├── wiring.yaml (193B)
train: ./datasets/wiring/images/train
val: ./datasets/wiring/images/val
nc: 2 # 类别数
names: ['L','T']
四、下载安装 YOLOv5 #
# 克隆 YOLOv5 仓库
git clone https://github.com/ultralytics/yolov5
# 导航到克隆的目录
cd yolov5
# 安装所需的包
pip install -r requirements.txt
将第三步的 datasets
所有数据拷贝到 yolov5
根目录
五、开始训练 #
最好使用显卡推理,默认有显卡会使用显卡推理,没有使用 CPU 推理,显卡推理需安装的软件和 cuda
版本对应。
使用 nvidia-smi
查询版本信息:
nvidia-smi
---------------------------------------------------------------------------------------+
| NVIDIA-SMI 539.28 Driver Version: 539.28 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla P40 TCC | 00000000:0B:00.0 Off | Off |
| N/A 33C P8 9W / 250W | 8MiB / 24576MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
安装兼容 CUDA Version: 12.2 相应的软件:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
训练命令 #
python train.py --img 1024 --batch 32 --epochs 150 ^
--data datasets/wiring.yaml ^
--weights yolov5s.pt ^
--name wiring ^
--cache ^
--device 0
扩展 #
开始 模型训练 使用 train.py
脚本。必要的参数包括:
--img
: 定义输入 图像大小 (例如,--img 640
)。较大的尺寸通常会产生更好的精度,但需要更多的 GPU 内存。--batch
: 确定 批次大小 (例如,--batch 16
)。选择您的 GPU 可以处理的最大尺寸。--epochs
: 指定训练的总轮数 个 epoch (例如,--epochs 100
)。一个 epoch 代表对整个训练数据集的完整传递。--data
: 您的路径dataset.yaml
文件(例如,--data coco128.yaml
)。--weights
: 初始权重文件的路径。使用预训练权重(例如,--weights yolov5s.pt
)强烈建议使用,以获得更快的收敛速度和更好的结果。要从头开始训练(除非您有非常大的数据集和特定需求,否则不建议这样做),请使用--weights '' --cfg yolov5s.yaml
.
六、开始测试 #
模型保存在 runs/train/wiring_exp/weights/best.pt
推理测试 #
推理结果保存在: runs/detect/exp
中
python detect.py --weights runs/train/wiring_exp/weights/best.pt --img 640 --source test.jpg
扩展 #
# 使用网络摄像头运行推理
python detect.py --weights yolov5s.pt --source 0
# 对本地图像文件运行推理
python detect.py --weights yolov5s.pt --source img.jpg
# 对本地视频文件运行推理
python detect.py --weights yolov5s.pt --source vid.mp4
# 对屏幕截图运行推理
python detect.py --weights yolov5s.pt --source screen
# 对图像目录运行推理
python detect.py --weights yolov5s.pt --source path/to/images/
# 对列出图像路径的文本文件运行推理
python detect.py --weights yolov5s.pt --source list.txt
# 对列出流 URL 的文本文件运行推理
python detect.py --weights yolov5s.pt --source list.streams
# 使用 glob 模式对图像运行推理
python detect.py --weights yolov5s.pt --source 'path/to/*.jpg'
# 对 YouTube 视频 URL 运行推理
python detect.py --weights yolov5s.pt --source 'https://youtu.be/LNwODJXcvt4'
# 对 RTSP、RTMP 或 HTTP 流运行推理
python detect.py --weights yolov5s.pt --source 'rtsp://example.com/media.mp4'