YOLOv5使用方法
数据集
YOLOv5 使用的数据集遵循的是 YOLO格式(YOLO annotation format)。以下是 YOLOv5 所需数据集的完整规范:
✅ 1. 目录结构
YOLOv5 通常的数据集结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| dataset/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ ├── img2.jpg │ ├── val/ │ │ ├── img3.jpg │ │ ├── img4.jpg │ ├── labels/ │ ├── train/ │ │ ├── img1.txt │ │ ├── img2.txt │ ├── val/ │ │ ├── img3.txt │ │ ├── img4.txt │ └── data.yaml
|
✅ 2. 标签文件格式(.txt
)
每张图像对应一个 .txt
文件,命名相同,内容如下格式:
1
| <class_id> <x_center> <y_center> <width> <height>
|
坐标说明:
class_id
:整数,表示目标所属的类别,从0开始。
x_center
、y_center
:目标中心的相对位置(范围是0~1,相对于图像宽度和高度)。
width
、height
:目标框的相对宽度和高度(范围0~1)。
例如:
表示第0类物体,其边界框中心在图像正中间,宽20%,高30%。
✅ 3. data.yaml
文件格式
用于配置训练集、验证集、类别名等信息。例如:
1 2 3 4 5 6
| train: images/train val: images/val
nc: 3 names: ['cat', 'dog', 'person']
|
注释代表非必须字段,path
指定后后面的路径只需写相对路径
✅ 4. 图片格式
- 支持常见格式:
.jpg
, .jpeg
, .png
- 图片尺寸不必统一,但建议大小适中(训练时可自动resize)
✅ 5. 常见注意事项
- 标签文件中坐标必须是 归一化格式,即相对于图像宽高,范围在
[0, 1]
。
- 每一行为一个标注框,没有标注的图像也必须有空的
.txt
文件。
images/train
和 labels/train
中的文件名必须一一对应。
✅ 示例
假设有一张图像 dog.jpg
尺寸为 800x600
,目标狗的位置是:
- 左上角
(x1=200, y1=150)
- 右下角
(x2=600, y2=450)
则:
x_center = (200+600)/2 / 800 = 0.5
y_center = (150+450)/2 / 600 = 0.5
width = (600 - 200) / 800 = 0.5
height = (450 - 150) / 600 = 0.5
标签行:
(假设“狗”的 class_id=1
)
配置文件说明
YOLOv5 的配置文件主要包括以下几类,它们用于配置模型结构、训练过程、数据集路径等。下面是各类配置文件的说明:
🗂 1. data.yaml
— 数据集配置文件(训练/验证/测试路径 + 类别信息)
位置:你自己创建或放在 data/
目录中
1 2 3 4 5 6 7 8
| path: ../dataset train: images/train val: images/val test: images/test
nc: 3 names: ['cat', 'dog', 'person']
|
📐 2. *.yaml
— 模型结构配置文件(模型架构与参数设置)
位置:models/
目录下,常见如 yolov5s.yaml
、yolov5m.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| nc: 80 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]], ...]
head: [[-1, 1, Detect, [nc, anchors]]]
|
✅ 训练时,使用的是你自己选择的模型结构文件(通过 --cfg
或 --weights
推断出)。
⚙️ 3. hyp.yaml
— 超参数配置文件(学习率、增强、损失函数等超参数)
位置:默认在 data/hyps/
目录下,如 hyp.scratch-low.yaml
1 2 3 4 5 6 7 8
| lr0: 0.01 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3.0 hsv_h: 0.015 hsv_s: 0.7 fl_gamma: 0.0
|
你可以通过 --hyp
参数指定这个文件,例如:
1
| python train.py --hyp data/hyps/hyp.scratch-low.yaml
|
✅ 小结:三大核心配置文件说明表
配置文件 |
作用 |
常见位置 |
data.yaml |
指定训练/验证/测试集和类别信息 |
你项目目录 / data/ |
*.yaml |
定义模型结构(yolov5s 等) |
models/ |
hyp.yaml |
设置训练超参数(增强、LR 等) |
data/hyps/ |
模型训练
执行指令说明
一般训练运行命令行命令:
1
| python train.py --img 640 --batch 16 --epochs 50 --data wheat.yaml --weights yolov5s.pt --name wheat_yolov5
|
📂 模型与数据相关参数
参数 |
类型 |
默认值 |
说明 |
--weights |
str |
yolov5s.pt |
初始权重路径,可为官方模型或自定义训练的 .pt 文件。 |
--cfg |
str |
"" |
模型结构配置文件(如 yolov5s.yaml )。为空则从 weights 推断。 |
--data |
str |
data/coco128.yaml |
数据集配置文件,包含 train , val , nc , names 等字段。 |
--hyp |
str |
data/hyps/hyp.scratch-low.yaml |
超参数配置文件,包括学习率、IoU阈值、损失等。 |
📈 训练控制参数
参数 |
类型 |
默认值 |
说明 |
--epochs |
int |
100 |
训练总轮数。 |
--batch-size |
int |
16 |
批大小,所有GPU总和。-1 表示自动推断。 |
--imgsz / --img / --img-size |
int |
640 |
输入图像尺寸(会缩放为正方形)。 |
--rect |
store_true |
False |
是否启用矩形训练(图像按长宽比例分组)。 |
--multi-scale |
store_true |
False |
是否在训练中动态改变图像大小(±50%)。 |
--resume |
可选参数 |
False |
是否从最近的断点继续训练。 |
--freeze |
List[int] |
[0] |
冻结网络层,示例:--freeze 0 1 2 表示冻结前3层。 |
--single-cls |
store_true |
False |
是否将所有类别视为一个类别(适用于单类数据)。 |
💾 模型保存与验证参数
参数 |
类型 |
默认值 |
说明 |
--nosave |
store_true |
False |
是否只保存最后一个模型,不保存中间checkpoint。 |
--noval |
store_true |
False |
是否仅在最后一个 epoch 验证模型性能。 |
--save-period |
int |
-1 |
每间隔 x 个 epoch 保存一次模型。小于1表示禁用。 |
🧠 超参数进化(进阶功能)
参数 |
类型 |
默认值 |
说明 |
--evolve |
int |
可选,默认300 |
使用遗传算法自动进化超参数,运行 x 代。 |
--evolve_population |
str |
data/hyps |
进化时加载的初始种群超参数路径。 |
--resume_evolve |
str |
None |
从先前进化的最后一代恢复。 |
🧰 运行控制参数
参数 |
类型 |
默认值 |
说明 |
--device |
str |
"" |
指定设备:如 0 、0,1 或 cpu 。 |
--optimizer |
str |
SGD |
选择优化器:SGD , Adam , AdamW 。 |
--sync-bn |
store_true |
False |
启用同步BatchNorm(仅 DDP 模式有效)。 |
--quad |
store_true |
False |
启用四元加载器优化(某些GPU加速)。 |
--cos-lr |
store_true |
False |
使用余弦学习率调度器。 |
--label-smoothing |
float |
0.0 |
标签平滑因子(防止过拟合)。 |
--patience |
int |
100 |
EarlyStopping容忍的无改进epoch数。 |
--seed |
int |
0 |
设置随机种子,确保结果可复现。 |
--workers |
int |
8 |
每个进程的数据加载线程数。 |
--local_rank |
int |
-1 |
DDP 多GPU模式下自动设置,不要手动修改。 |
📝 日志记录与结果保存
参数 |
类型 |
默认值 |
说明 |
--project |
str |
runs/train |
保存训练结果的项目目录。 |
--name |
str |
exp |
子目录名称。 |
--exist-ok |
store_true |
False |
如果目录存在,则不自动增加编号。 |
☁️ 云与缓存相关
参数 |
类型 |
默认值 |
说明 |
--bucket |
str |
"" |
用于 Google Cloud Storage 的 gsutil bucket 路径。 |
--cache |
str |
可选 |
ram 或 disk ,缓存图像到内存或硬盘以加速训练。 |
--image-weights |
store_true |
False |
图像采样根据权重进行(提升少数类样本)。 |
🔗 W\&B / Artifact 日志参数(用于实验追踪)
参数 |
类型 |
默认值 |
说明 |
--entity |
str |
None |
W\&B 实验的团队或个人实体名。 |
--upload_dataset |
store_true |
False |
是否上传数据集到 W\&B。可选 "val" 。 |
--bbox_interval |
int |
-1 |
日志中显示检测框图片的间隔 epoch。 |
--artifact_alias |
str |
"latest" |
指定使用的 artifact 版本标签。 |
🧾 NDJSON 日志参数(结构化日志)
参数 |
类型 |
默认值 |
说明 |
--ndjson-console |
store_true |
False |
在控制台输出 ndjson 格式日志。 |
--ndjson-file |
store_true |
False |
将 ndjson 日志输出到文件。 |
模型推理与验证
执行指令说明
一般目标检测执行命令:
1
| python detect.py --weights runs/train/wheat_yolov5/weights/best.pt --source /test_image_folder --img 640 --conf 0.25 --save-txt --save-conf --project runs/predict --name wheat_test
|
🎯 核心推理参数
参数 |
类型 |
默认值 |
说明 |
--weights |
str/list[str] |
yolov5s.pt |
模型路径(.pt 文件),也可为多个模型或 Triton 服务器地址。 |
--source |
str |
data/images |
输入来源:文件、文件夹、URL、glob、摄像头(如 0 )或 screen 。 |
--data |
str |
data/coco128.yaml |
数据集配置文件(可选)。用于加载类别名等信息。 |
--imgsz / --img / --img-size |
list[int] |
[640] |
推理图像的尺寸,单个值或 [h, w] 。如果只给一个,则会扩展成 [640, 640] 。 |
--conf-thres |
float |
0.25 |
置信度阈值,低于该值的检测框会被过滤。 |
--iou-thres |
float |
0.45 |
非极大值抑制(NMS)中的 IoU 阈值。 |
--max-det |
int |
1000 |
每张图片最多保留的目标检测数量。 |
--device |
str |
"" |
计算设备,如 '0' , '0,1' , 'cpu' 等。 |
🖼️ 可视化与保存选项
参数 |
类型 |
默认值 |
说明 |
--view-img |
bool |
False |
是否显示检测结果图像(本地窗口)。 |
--save-txt |
bool |
False |
是否将检测结果保存为 .txt 文件(YOLO格式或Pascal VOC格式)。 |
--save-format |
int |
0 |
配合 --save-txt :0 为 YOLO 格式,1 为 Pascal VOC 格式。 |
--save-csv |
bool |
False |
是否将结果保存为 .csv 文件。 |
--save-conf |
bool |
False |
是否将置信度一同保存到 .txt 文件中。 |
--save-crop |
bool |
False |
是否保存每个检测框裁剪出的目标图像。 |
--nosave |
bool |
False |
不保存任何图像或视频结果,仅在控制台输出。 |
--project |
str |
runs/detect |
结果保存根目录。 |
--name |
str |
exp |
子目录名称。 |
--exist-ok |
bool |
False |
如果目录已存在,不自动创建 exp2 , exp3 ,而是直接覆盖或重用。 |
--line-thickness |
int |
3 |
检测框的线宽(像素)。 |
--hide-labels |
bool |
False |
不在图像上显示类别标签。 |
--hide-conf |
bool |
False |
不在图像上显示置信度分数。 |
📊 检测控制选项
参数 |
类型 |
默认值 |
说明 |
--classes |
list[int] |
None |
仅检测指定类别,例如 --classes 0 2 3 。 |
--agnostic-nms |
bool |
False |
使用类别无关的 NMS(所有类别共用抑制逻辑)。 |
--augment |
bool |
False |
启用数据增强的推理(略慢但可能更鲁棒)。 |
--visualize |
bool |
False |
可视化中间特征图(需模型支持)。 |
--update |
bool |
False |
自动更新模型(转换旧格式为新格式)。 |
--half |
bool |
False |
使用半精度(FP16)推理,仅限于 CUDA 。 |
--dnn |
bool |
False |
使用 OpenCV DNN 模式进行 ONNX 推理。 |
--vid-stride |
int |
1 |
视频推理时的帧跳跃间隔,例如 --vid-stride 5 表示每5帧处理一帧。 |
✅ 示例命令
1 2 3 4 5 6 7 8
| python detect.py --weights yolov5s.pt --source ./data/images/zidane.jpg --conf-thres 0.3 --save-txt
python detect.py --weights yolov5s.pt --source ./data/images --classes 0 2 --view-img --nosave
python detect.py --weights yolov5s.pt --source video.mp4 --vid-stride 5 --save-txt --save-format 1
|
模型导出与部署
执行指令说明
以下是对每个命令行参数的详细解释:
🗂️ 数据和模型路径配置
参数 |
类型 |
默认值 |
说明 |
--data |
str |
data/coco128.yaml |
数据集配置文件路径,主要用于获取类别数等信息 |
--weights |
str/list |
yolov5s.pt |
训练好的模型权重路径,支持多个模型同时导出 |
--imgsz / --img / --img-size |
int list |
[640, 640] |
输入图片尺寸 [height, width] ,默认是正方形 |
--batch-size |
int |
1 |
推理时的 batch size,一般保持为1以防不兼容 |
⚙️ 设备和推理精度
参数 |
类型 |
默认值 |
说明 |
--device |
str |
cpu |
运行导出过程所使用的设备,如 0 , cpu , 0,1 等 |
--half |
flag |
False |
是否使用 FP16 精度导出(仅限支持的平台) |
⚙️ 导出行为控制
参数 |
类型 |
默认值 |
说明 |
--inplace |
flag |
False |
是否将 Detect() 的 inplace=True ,影响模型输出张量的修改方式 |
--keras |
flag |
False |
TensorFlow 导出时是否使用 Keras 模式(.h5 ) |
--optimize |
flag |
False |
TorchScript 优化用于移动端部署(会应用 graph 优化) |
🎯 量化和动态轴控制
参数 |
类型 |
默认值 |
说明 |
--int8 |
flag |
False |
导出 INT8 量化模型(支持 TF、CoreML、OpenVINO) |
--per-tensor |
flag |
False |
TensorFlow 的 per-tensor 量化方式(默认是 per-channel) |
--dynamic |
flag |
False |
启用动态输入尺寸(支持 ONNX、TF、TensorRT) |
🧠 ONNX 相关
参数 |
类型 |
默认值 |
说明 |
--simplify |
flag |
False |
简化 ONNX 模型图(需安装 onnxsim ) |
--opset |
int |
17 |
ONNX 的 opset 版本,常见为 11~17 |
🧠 TensorRT 相关
参数 |
类型 |
默认值 |
说明 |
--engine (由 --include engine 控制) |
|
|
TensorRT 导出开关 |
--cache |
str |
“” |
TensorRT 的时间 cache 文件路径(加速编译) |
--workspace |
int |
4 |
TensorRT 最大 workspace 大小(单位 GB) |
--verbose |
flag |
False |
TensorRT 导出时是否打印详细日志 |
🍏 CoreML 相关
参数 |
类型 |
默认值 |
说明 |
--mlmodel |
flag |
False |
导出 CoreML .mlmodel 格式 |
--int8 |
flag |
False |
可配合用于量化 CoreML |
🧪 TensorFlow.js(TF.js)相关(用于 Web 端)
参数 |
类型 |
默认值 |
说明 |
--nms |
flag |
False |
添加非极大抑制 NMS(默认模型中不包含) |
--agnostic-nms |
flag |
False |
类别无关的 NMS |
--topk-per-class |
int |
100 |
每个类别保留前 K 个检测结果 |
--topk-all |
int |
100 |
所有类别一共保留前 K 个检测结果 |
--iou-thres |
float |
0.45 |
NMS 的 IoU 阈值 |
--conf-thres |
float |
0.25 |
置信度阈值,低于此值的框会被丢弃 |
🎯 导出格式设置(核心参数)
参数 |
类型 |
默认值 |
说明 |
--include |
list |
['torchscript'] |
要导出的格式,可以包含多个: torchscript , onnx , openvino , engine , coreml , saved_model , pb , tflite , edgetpu , tfjs , paddle 等 |
✅ 示例用法
1 2 3 4 5 6 7 8 9
| python export.py \ --weights yolov5s.pt \ --img 640 \ --device 0 \ --include onnx torchscript engine \ --dynamic \ --simplify \ --opset 17
|
PS:封面图来源:
百鬼あやめ😈ホロライブ2期生