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_centery_center:目标中心的相对位置(范围是0~1,相对于图像宽度和高度)。
  • widthheight:目标框的相对宽度和高度(范围0~1)。

例如:

1
0 0.5 0.5 0.2 0.3

表示第0类物体,其边界框中心在图像正中间,宽20%,高30%。


✅ 3. data.yaml 文件格式

用于配置训练集、验证集、类别名等信息。例如:

1
2
3
4
5
6
# path: ./dataset
train: images/train
val: images/val
# test: ./dataset/images/test
nc: 3 # 类别数量
names: ['cat', 'dog', 'person'] # 类别名称列表

注释代表非必须字段,path指定后后面的路径只需写相对路径


✅ 4. 图片格式

  • 支持常见格式:.jpg, .jpeg, .png
  • 图片尺寸不必统一,但建议大小适中(训练时可自动resize)

✅ 5. 常见注意事项

  • 标签文件中坐标必须是 归一化格式,即相对于图像宽高,范围在 [0, 1]
  • 每一行为一个标注框,没有标注的图像也必须有空的 .txt 文件
  • images/trainlabels/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

标签行:

1
1 0.5 0.5 0.5 0.5

(假设“狗”的 class_id=1

配置文件说明

YOLOv5 的配置文件主要包括以下几类,它们用于配置模型结构、训练过程、数据集路径等。下面是各类配置文件的说明:


🗂 1. data.yaml — 数据集配置文件(训练/验证/测试路径 + 类别信息

位置:你自己创建或放在 data/ 目录中

1
2
3
4
5
6
7
8
# 示例
path: ../dataset # 数据集根路径(可选)
train: images/train # 训练图片路径(相对 path 或绝对路径)
val: images/val # 验证图片路径
test: images/test # (可选)测试图片路径

nc: 3 # 类别数量
names: ['cat', 'dog', 'person'] # 类别名称列表

📐 2. *.yaml — 模型结构配置文件(模型架构与参数设置

位置:models/ 目录下,常见如 yolov5s.yamlyolov5m.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# yolov5s.yaml 示例
nc: 80 # 类别数,会在训练时被 data.yaml 中的 nc 覆盖
depth_multiple: 0.33 # 网络深度系数(层数缩放)
width_multiple: 0.50 # 通道宽度系数(通道数缩放)

anchors:
- [10,13, 16,30, 33,23] # P3
- [30,61, 62,45, 59,119] # P4
- [116,90, 156,198, 373,326] # P5

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 # 最终学习率 (final LR = lr0 * lrf)
momentum: 0.937 # SGD动量
weight_decay: 0.0005
warmup_epochs: 3.0 # 预热轮数
hsv_h: 0.015 # 色调增强
hsv_s: 0.7 # 饱和度增强
fl_gamma: 0.0 # Focal Loss gamma

你可以通过 --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 "" 指定设备:如 00,1cpu
--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 可选 ramdisk,缓存图像到内存或硬盘以加速训练。
--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-txt0 为 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

# 仅检测类别 0 和 2,显示结果但不保存图像
python detect.py --weights yolov5s.pt --source ./data/images --classes 0 2 --view-img --nosave

# 对视频推理,每5帧检测一次,保存检测框为 Pascal VOC 格式
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
# 导出 ONNX + TorchScript + TensorRT 引擎(使用 GPU)
python export.py \
--weights yolov5s.pt \
--img 640 \
--device 0 \
--include onnx torchscript engine \
--dynamic \
--simplify \
--opset 17

PS:封面图来源:
百鬼あやめ😈ホロライブ2期生