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期生