YOLO中参数的作用(追踪篇)
前言1、lr02、lrf3、momentum4、weight_decay5、warmup_epochs6、warmup_momentum7、warmup_bias_lr8、box9、cls10、dfl11、pose12、kobj13、rle14、angle15、nbs16、hsv_h17、hsv_s18、hsv_v19、degrees20、translate21、scale22、shear23、p
本文是关于追踪与增强的参数的作用
文章目录
目录
前言
由于YOLO中参数较多,将参数按照使用的位置和用途划分不同篇章,本文是关于推理的参数的作用,其余参数可参考:
以下是本文所学习的参数:
lr0: 0.01 # (float) initial learning rate (SGD=1e-2, Adam/AdamW=1e-3)
lrf: 0.01 # (float) final LR fraction; final LR = lr0 * lrf
momentum: 0.937 # (float) SGD momentum or Adam beta1
weight_decay: 0.0005 # (float) weight decay (L2 regularization)
warmup_epochs: 3.0 # (float) warmup epochs (fractions allowed)
warmup_momentum: 0.8 # (float) initial momentum during warmup
warmup_bias_lr: 0.1 # (float) bias learning rate during warmup
box: 7.5 # (float) box loss gain
cls: 0.5 # (float) classification loss gain
dfl: 1.5 # (float) distribution focal loss gain
pose: 12.0 # (float) pose loss gain (pose tasks)
kobj: 1.0 # (float) keypoint objectness loss gain (pose tasks)
rle: 1.0 # (float) rle loss gain (pose tasks)
angle: 1.0 # (float) oriented angle loss gain (obb tasks)
nbs: 64 # (int) nominal batch size used for loss normalization
hsv_h: 0.015 # (float) HSV hue augmentation fraction
hsv_s: 0.7 # (float) HSV saturation augmentation fraction
hsv_v: 0.4 # (float) HSV value (brightness) augmentation fraction
degrees: 0.0 # (float) rotation degrees (+/-)
translate: 0.1 # (float) translation fraction (+/-)
scale: 0.5 # (float) scale gain (+/-)
shear: 0.0 # (float) shear degrees (+/-)
perspective: 0.0 # (float) perspective fraction (0–0.001 typical)
flipud: 0.0 # (float) vertical flip probability
fliplr: 0.5 # (float) horizontal flip probability
bgr: 0.0 # (float) RGB↔BGR channel swap probability
mosaic: 1.0 # (float) mosaic augmentation probability
mixup: 0.0 # (float) MixUp augmentation probability
cutmix: 0.0 # (float) CutMix augmentation probability
copy_paste: 0.0 # (float) segmentation copy-paste probability
copy_paste_mode: flip # (str) copy-paste strategy for segmentation: flip or mixup
auto_augment: randaugment # (str) classification auto augmentation policy: randaugment, autoaugment, augmix
erasing: 0.4 # (float) random erasing probability for classification (0–0.9), <1.0
1、lr0
lr0 是一个关键超参数,表示:初始学习率(Initial Learning Rate)
它是优化器(如 SGD、Adam)在训练第 0 轮(epoch 0)时使用的学习率,直接影响模型收敛速度和最终性能。
| 模型类型 | lr0 默认值 |
|---|---|
| 检测(detect) | 0.01 |
| 分割(segment) | 0.01 |
| 分类(classify) | 0.001 |
| 姿态估计(pose) | 0.01 |
这些值针对 SGD 优化器 设计;若使用 Adam,通常需更小的学习率(如 0.001)。
lr0 对训练的影响
lr0 值 |
效果 | 风险 |
|---|---|---|
| 过大(如 0.1) | 收敛快 | 震荡、不收敛、loss 爆炸 |
| 过小(如 0.0001) | 稳定 | 收敛极慢、陷入局部最优 |
| 合适(如 0.01) | 平衡速度与稳定性 | 推荐起点 |
方法 1:使用 学习率查找器(LR Finder)
YOLOv8 内置支持(实验性):
model = YOLO('yolov8s.pt')
model.lr_find(data='coco.yaml') # 自动测试不同 lr 的 loss 变化
选择 loss 下降最快且稳定 的 lr 值。
方法 2:经验法则
|
优化器 |
推荐 |
|---|---|
|
SGD + Momentum |
|
|
Adam / AdamW |
|
方法 3:参考官方配置
-
COCO 训练:
lr0=0.01 -
小数据集微调:
lr0=0.001 ~ 0.005
参数值的选择可以参考以下场景:
lr0 |
mAP@0.5:0.95 | 收敛速度 |
|---|---|---|
| 0.001 | 42.1 | 慢(100 epoch 未收敛) |
| 0.01 | 44.9 | 正常 |
| 0.05 | 38.7 | 震荡,不稳定 |
| 0.1 | NaN | Loss 爆炸 |
lr0是训练 YOLO 的“油门踏板”:
- 太猛(大 lr)→ 撞墙(不收敛)
- 太轻(小 lr)→ 龟速(训练慢)
- 默认
0.01(SGD)是安全起点- 用
lr_find()找最佳值最科学
如果你在训练时遇到 loss 不下降 或 剧烈震荡,优先检查 lr0 是否合适。
2、lrf
lrf 是一个关键超参数,全称为: Final Learning Rate Factor(最终学习率缩放因子)
它与 lr0(初始学习率)配合,共同定义学习率调度策略(Learning Rate Scheduler)的终点。
YOLO 默认使用 余弦退火(Cosine Annealing) 调度器,学习率变化如下:
lr(t)=lr0×[lrf+(1−lrf)×(1+cos(t⋅πT))/2]
其中:
- tt :当前 epoch
- TT :总 epoch 数
lr0:初始学习率(起点)lrf:最终学习率相对于lr0的比例(终点)
🔹 最终学习率 =
lr0 × lrf
- 前期大步长快速收敛
- 后期小步长微调权重
参数值的选择可以参考以下场景:
lrf 值 |
效果 | 适用场景 |
|---|---|---|
| 0.01(默认) | 平滑收敛,避免后期震荡 | ✅ 通用推荐 |
| 0.1 | 最终 lr 较高,保留一定探索能力 | 数据噪声大、非平稳分布 |
| 0.001 | 极小最终 lr,精细微调 | 高精度需求、小数据集微调 |
| 1.0 | 恒定学习率(无衰减) | ❌ 不推荐(易震荡) |
lrf 越小,训练后期越“谨慎”。
-
lrf不是绝对学习率,而是比例因子- 实际最终 lr =
lr0 × lrf
- 实际最终 lr =
-
过小的
lrf可能导致收敛停滞- 如果 loss 在后期不再下降,可尝试增大
lrf(如 0.05)
- 如果 loss 在后期不再下降,可尝试增大
-
与优化器类型相关
- Adam 优化器对 lr 衰减敏感度低于 SGD
- YOLO 使用 warmup + cosine decay
- 前
warmup_epochs(默认 3)线性升到lr0 - 之后按余弦衰减到
lr0 × lrf
- 前
如果你发现模型训练后期 loss 不再下降,可以尝试:
- 稍微增大
lrf(如 0.02) - 或延长训练 epoch
3、momentum
momentum 是优化器(通常是 SGD with Momentum)的一个关键超参数,用于加速收敛、抑制震荡、帮助跳出局部最优。
momentum |
效果 | 风险 |
|---|---|---|
| 0.0 | 等价于标准 SGD | 收敛慢、易震荡 |
| 0.9 | 平衡加速与稳定性 | 安全选择 |
| 0.937(默认) | 针对 YOLO 架构优化 | 推荐保持 |
| 0.99 | 极强惯性,快速穿越平坦区 | 可能冲过最优解 |
| ≥1.0 | ❌ 不稳定(发散) | 绝对避免 |
与其它参数的关系:
| 参数 | 与 momentum 的协同 |
|---|---|
lr0(学习率) |
高 momentum 可配稍高 lr0(如 0.02) |
weight_decay |
动量不影响正则化,两者独立 |
| Batch Size | 大 batch → 可略微提高 momentum(如 0.95) |
仅对 SGD 有效
- 如果使用 Adam/AdamW 优化器(YOLO 不默认使用),
momentum被忽略(Adam 有自己的动量机制beta1)
不要随意修改
- YOLO 的默认
momentum=0.937是经过网格搜索确定的,除非有充分理由,否则保持默认
微调时通常不变
- 即使调整
lr0或batch_size,momentum一般无需改动
momentum是 SGD 优化器的“惯性控制器”:
- 默认
0.937= YOLO 的黄金参数- 平衡收敛速度与稳定性
- 绝大多数场景无需调整
如果你的训练出现 loss 震荡剧烈 或 收敛极慢,可优先检查 lr0 和数据质量,而非 momentum。
4、weight_decay
weight_decay 是一个用于正则化(Regularization) 的关键超参数,主要作用是:防止模型过拟合(Overfitting),提升泛化能力。
| 值 | 效果 | 风险 |
|---|---|---|
| 0.0 | 无正则化 | 容易过拟合(尤其小数据集) |
| 0.0001 ~ 0.0005 | 轻微约束权重 | 推荐范围 |
| 0.001+ | 强正则化 | 可能欠拟合(训练 loss 下降慢) |
| >0.01 | 过度惩罚 | 模型无法学习有效特征 |
在大数据集中,一般保持0.0005即可;在小数据集中,为了防止过拟合,将参数增大至0.001。
注意事项
-
与 Batch Size 相关
-
大 batch size → 梯度更稳定 → 可略微增大
weight_decay -
小 batch size → 梯度噪声大 → 保持默认或略减
-
-
不是万能药
-
过拟合更应优先考虑:数据增强、早停、Dropout(YOLO 一般不用)
-
weight_decay是辅助手段
-
-
YOLO 架构已内置一定正则化
-
如 BN(BatchNorm)、数据增强(Mosaic, MixUp)
-
所以
weight_decay通常设得很小
-
weight_decay是 YOLO 的“防过拟合安全阀”:
- 默认
0.0005适用于通用场景- 小数据集 → 增大(0.001)
- 欠拟合 → 减小(0.0001)
- 配合数据增强使用效果最佳
如果你的验证集性能明显低于训练集,优先尝试增大 weight_decay!
5、warmup_epochs
warmup_epochs 是一个用于控制 学习率预热(Learning Rate Warmup)阶段长度 的超参数。
| 值 | 效果 | 适用场景 |
|---|---|---|
| 0 | 无预热,直接用 lr0 |
❌ 不推荐(易震荡) |
| 1~2 | 轻微预热 | 小模型(如 yolov8n)、微调 |
| 3(默认) | 平衡稳定性与效率 | ✅ 通用推荐 |
| 5~10 | 强预热 | 大模型(yolov8x)、大 batch size、不稳定数据 |
若训练初期 loss 剧烈震荡或出现 NaN → 增大 warmup_epochs。
| 参数 | 协同建议 |
|---|---|
batch_size |
batch 越大 → 可略增 warmup_epochs(如 5) |
lr0 |
lr0 越大 → 需更强预热 |
| 模型大小 | YOLOv8x > YOLOv8s > YOLOv8n → 预热需求递增 |
warmup_epochs是训练稳定的“安全启动器”:
- 防止初期爆炸,平滑进入训练
- 默认
3适用于 95% 场景- 仅在初期 loss 震荡时才需调整
如果你看到训练日志中 第 1~2 轮 loss 极高或 NaN,优先尝试增大 warmup_epochs 到 5!
6、warmup_momentum
warmup_momentum 是一个用于控制 动量(Momentum)预热策略 的超参数。在训练的前 warmup_epochs 轮,动量(momentum)从一个较低值线性增长到目标值(如 0.937),而不是一开始就使用高动量。
YOLO 默认使用 SGD with Momentum 优化器。
在 warmup 阶段(前 warmup_epochs 轮):
| 参数 | 变化方式 |
|---|---|
| 学习率(LR) | 从 lr0 / 1000 → lr0(线性增长) |
| 动量(Momentum) | 从 warmup_momentum → momentum(线性增长) |
-
初始权重随机,梯度方向不可靠
- 高动量会放大错误方向的“惯性”,导致发散
-
与 BN(BatchNorm)协同稳定
- 前几轮 BN 统计量(mean/var)不稳定
- 低动量 + 低学习率 → 更平滑的特征分布演化
-
提升收敛鲁棒性
- 尤其在小数据集或复杂模型上效果明显
实验表明:关闭动量预热(直接用 0.937)可能导致前 5 轮 loss 震荡 ±20%
warmup_momentum是 YOLO 训练稳定性的“隐形守护者”:
- 从 0.8 渐进到 0.937,避免初期动量过大
- 与
lr0warmup、warmup_bias_lr协同工作- 默认值已高度优化,绝大多数场景无需修改
如果你遇到 训练前几轮 loss 剧烈震荡或 NaN,可检查是否意外关闭了 warmup(如 warmup_epochs=0),而非调整 warmup_momentum。
7、warmup_bias_lr
warmup_bias_lr 是一个专门用于检测头(Detection Head)偏置项(bias)的初始学习率,仅在 warmup 阶段(前 warmup_epochs 轮)生效。
| 值 | 效果 | 风险 |
|---|---|---|
| 0.0 | bias 更新极慢 | 初期大量假阳性(FP),mAP 低 |
| 0.01(=lr0) | 与主干同步更新 | 收敛稍慢 |
| 0.1(默认) | 快速校准检测头 | 最佳平衡 |
| >0.2 | bias 更新过快 | 可能震荡,loss 不稳 |
在 warmup 阶段,对 bias 使用更高的学习率,快速调整其初始值。
在 前 warmup_epochs 轮:
- 主干网络权重(weights):使用标准 warmup 学习率(从
lr0/1000→lr0) - 检测头偏置(biases):使用
warmup_bias_lr(固定值,不 warmup)
warmup_bias_lr=0.1 可使 COCO 训练前 10 轮 mAP 提升 2~3%
-
仅适用于检测/分割/姿态模型
- 分类任务(
classify)无检测头 → 此参数无效
- 分类任务(
-
与
box_loss、cls_loss权重无关- 它是优化器层面的学习率设置,不是损失函数系数
-
不要与
lr0混淆lr0:主干网络和检测头 weights 的初始 lrwarmup_bias_lr:仅检测头 bias 的 warmup lr
-
默认值已高度优化
- 几乎所有场景都应保持
0.1
- 几乎所有场景都应保持
warmup_bias_lr是 YOLO 训练的“检测头加速器”:
- 用 10 倍学习率快速校准偏置,抑制初期假阳性
- 默认
0.1= 经验最优值- 无需修改,除非你明确知道自己在做什么
如果你发现训练第 0 轮输出大量无意义检测框,很可能是 warmup_bias_lr 被错误设置!
8、box
box 是一个损失函数超参数,用于控制 边界框回归损失(Bounding Box Loss)在总损失中的权重。
| 任务类型 | box 默认值 |
|---|---|
| 检测(detect) | 7.5 |
| 分割(segment) | 7.5 |
| 姿态估计(pose) | 12.0 |
这些值经过 COCO 数据集大量调优,平衡了定位与分类性能。
YOLOv8 使用 CIoU Loss(Complete IoU)作为边界框回归损失:
Lbox=1−CIoU(Bpred,Bgt)Lbox=1−CIoU(Bpred,Bgt)
CIoU 综合考虑:
- 重叠区域(IoU)
- 中心点距离
- 长宽比一致性
比原始 IoU/L1/L2 损失更符合检测任务目标
box 值 |
效果 | 适用场景 |
|---|---|---|
| 过小(如 2.0) | 定位不准,框偏移/大小错误 | 不推荐 |
| 默认(7.5) | 定位与分类平衡 | 通用场景 |
| 过大(如 15.0) | 定位极准,但可能牺牲分类精度 | 小目标密集场景(如无人机检测) |
参数调整参考以下场景:
| 场景 | 推荐操作 |
|---|---|
| 默认 COCO 风格数据 | 保持 box=7.5 |
| 小目标密集场景(细胞、零件) | ↑ 增大到 10.0~12.0(强调精确定位) |
| 大目标、稀疏场景 | 可略减至 5.0(分类更重要) |
| mAP@0.5 高但 mAP@0.75 低 | ↑ 增大 box(提升高 IoU 精度) |
| 分类准确但框不准 | ↑ 增大 box |
box是 YOLO 定位精度的“调节旋钮”:
- 默认
7.5= 定位与分类的最佳平衡点- 仅在定位明显不足时才增大
- 调整后务必验证 mailto:mAP@0.5 和 mailto:mAP@0.75
如果你的模型分类正确但框偏移,优先尝试增大 box 到 10.0!
9、cls
cls 是一个损失函数超参数,用于控制 分类损失(Classification Loss)在总损失中的权重。
| 任务类型 | cls 默认值 |
|---|---|
| 检测(detect) | 0.5 |
| 分割(segment) | 0.5 |
| 姿态估计(pose) | 0.5 |
这个值与 box=7.5 配合,使总损失中 定位损失占主导(因定位对 mAP 影响更大)。
cls 值 |
效果 | 适用场景 |
|---|---|---|
| 过小(如 0.1) | 分类不准,误检率高 | 不推荐 |
| 默认(0.5) | 分类与定位平衡 | 通用场景 |
| 过大(如 2.0) | 分类极准,但可能框偏移 | 类别混淆严重场景(如细粒度分类) |
cls=0.5→ COCO 上 mAP 最优cls=0.1→ 大量 FP(假阳性),因模型不关心类别cls=2.0→ Recall 下降(过于保守)
| 场景 | 推荐操作 |
|---|---|
| 默认检测任务 | 保持 cls=0.5 |
| 类别高度相似(如不同车型) | ↑ 增大到 1.0 |
| 背景复杂、FP 多 | ↑ 略增至 0.7~1.0(强化分类判别力) |
| 小目标、定位难 | ↓ 减小到 0.3(让模型更专注定位) |
| mAP 高但 Precision 低 | ↑ 增大 cls(减少误分类为正样本) |
-
cls与box需协同调整- 默认比例:
box : cls = 7.5 : 0.5 = 15 : 1 - 若增大
cls,建议略微减小box以保持梯度平衡
- 默认比例:
-
YOLOv5 vs YOLOv8 数值不可比
- YOLOv5 默认
cls=0.5(但损失计算方式不同) - 不要跨版本直接套用数值
- YOLOv5 默认
-
多类 vs 单类任务
- 单类检测(如 only "person"):
cls影响较小,可略降 - 多类(>10 类):保持默认或略增
- 单类检测(如 only "person"):
-
不适用于分类任务(
classify)cls参数仅用于检测/分割/姿态任务
cls是 YOLO 分类精度的“调节旋钮”:
- 默认
0.5= 与定位损失的最佳配比- 仅在类别混淆严重或 FP 过多时才增大
- 调整后需监控 Precision/Recall 平衡
如果你的模型经常把 A 类误检为 B 类,尝试将 cls 从 0.5 提高到 0.8~1.0!
10、dfl
dfl 是一个损失函数超参数,用于控制 分布焦点损失(Distribution Focal Loss, DFL)在总损失中的权重。 DFL 是 YOLOv8 的核心技术之一,用于提升边界框回归的精度。
传统目标检测将边界框坐标(如 x, y, w, h)视为单个连续值进行回归。
而 DFL 将每个坐标建模为一个离散的概率分布,从而:
- 更精细地表示边界位置(亚像素级)
- 建模预测不确定性
- 提升小目标和密集场景的定位精度
技术原理简述:
- 对每个坐标(如左边界),用 16 维向量 表示其在
[0, 15]区间内的概率分布 - 真实值
5.6→ 转化为P(5)=0.4, P(6)=0.6 - 通过 分类交叉熵 学习该分布
- 最终坐标 = ∑i=015P(i)⋅i∑i=015P(i)⋅i
| 参数 | 默认值 | 说明 |
|---|---|---|
dfl |
1.5 | 平衡 DFL 与 CIoU 损失 |
box |
7.5 | 主定位损失(CIoU) |
cls |
0.5 | 分类损失 |
调整 dfl 的效果:
dfl 值 |
效果 |
|---|---|
| 0.0 | 完全禁用 DFL → 退化为传统回归(不推荐) |
| 0.5 | DFL 贡献弱 → 定位精度下降(尤其小目标) |
| 1.5(默认) | 最佳平衡,COCO 验证最优 |
| 3.0+ | 过度强调分布学习 → 可能干扰 CIoU 优化 |
dfl是 YOLOv8 高精度定位的“秘密武器”:
- 默认
1.5= 经 COCO 验证的最优值- 几乎无需修改,除非特殊场景
- 禁用 DFL 会显著降低模型性能
如果你追求极致定位精度(如缺陷检测、遥感),确保 dfl=1.5 已启用!
11、pose
pose 指的是 人体姿态估计(Human Pose Estimation)任务,即检测图像中的人体关键点(如鼻子、肩膀、膝盖等)并输出其坐标。
YOLOv8-Pose 的核心能力
-
同时输出:
- 人体边界框(Bounding Box)
- 关键点坐标(Keypoints,如 17 个 COCO 关键点)
- 置信度(Box 置信度 + 每个关键点的可见性/置信度)
-
支持的关键点数量:
- COCO 格式:17 个关键点
- 自定义数据集:可定义任意数量(需修改配置)
-
实时性能:
- YOLOv8s-pose 在 RTX 3090 上可达 150 FPS
| 损失项 | 说明 |
|---|---|
box |
边界框回归损失(CIoU) |
cls |
人体分类损失 |
dfl |
分布焦点损失(用于 box 精细化) |
kpt |
关键点损失(核心!) |
| 目标 | 推荐操作 |
|---|---|
| 更高精度 | 使用 yolov8m-pose 或 yolov8l-pose |
| 更快推理 | 导出为 TensorRT:yolo export model=yolov8s-pose.pt format=engine |
| 小目标关键点 | 增大 imgsz=1280,调整 kpt=1.0 |
| 自定义关键点 | 修改 kpt_shape 并重新训练 |
YOLOv8-Pose = 实时人体检测 + 高精度关键点回归
- 端到端单阶段架构,无需后处理
- 支持 17+ 关键点,内置骨架可视化
- 通过
kpt参数控制关键点损失权重- 默认模型已适用于大多数场景
如果你需要检测人体姿态,直接使用 yolov8s-pose.pt 是最快方案。
12、kobj
kobj 是一个与姿态估计(Pose Estimation)任务相关的损失函数超参数,全称为:Key Objectness Loss Weight(关键点目标性损失权重)。它用于控制 关键点“存在性”预测的置信度损失 在总损失中的重要性。
YOLOv8-Pose 模型对每个检测到的人体实例,会输出:
- 边界框(Box)
- 类别置信度(Class)
- 每个关键点的坐标(x, y)
- 每个关键点的“可见性/存在性”置信度(objectness)
| 场景 | 建议 |
|---|---|
| 默认 COCO 风格数据 | 保持 kobj=1.0 |
| 遮挡严重、关键点常不可见 | ↑ 增大到 1.5~2.0(强化存在性判别) |
| 关键点几乎总是可见 | ↓ 减小到 0.5(降低其影响) |
| 关键点置信度不准(高坐标误差但高 conf) | ↑ 增大 kobj |
-
仅适用于 Pose 任务
- 普通检测(detect)、分割(segment)不使用
kobj
- 普通检测(detect)、分割(segment)不使用
-
与
kpt协同工作kpt:控制关键点 坐标精度kobj:控制关键点 存在性置信度- 两者独立但互补
-
标签格式必须正确
- COCO 标准:
v=0(不可见),v=1(遮挡可见),v=2(完全可见) - YOLO 通常将
v=1/2视为正样本,v=0为负样本
- COCO 标准:
-
不影响关键点坐标预测
kobj只影响置信度分支,不影响(x, y)回归
kobj是 YOLOv8-Pose 中“关键点可见性预测”的调节器:
- 默认
1.0= 平衡存在性与坐标损失- 遮挡多 → 增大;遮挡少 → 减小
- 调整后需检查关键点置信度校准情况
如果你的姿态模型经常对遮挡关键点给出高置信度,尝试将 kobj 从 1.0 提高到 1.5。
13、rle
在目标检测和实例分割领域,特别是在 COCO 数据集 和 Ultralytics YOLO(如 YOLOv8-seg) 的上下文中,RLE 是指:Run-Length Encoding(游程编码)。它是一种用于高效存储和传输二值掩码(binary masks)的压缩格式,被 COCO 官方采用作为实例分割标注的标准格式。
实例分割模型(如 YOLOv8-seg)输出的是每个对象的像素级掩码(mask),例如一个 640×640 的二值图(0=背景,1=前景)。
- 原始存储:640×640 = 409,600 字节(未压缩)
- RLE 压缩后:通常仅需几十到几百字节
对一行像素 [0,0,0,1,1,1,0,0]:
- 游程(run):连续相同值的长度
- 编码为:
(start, length)对
但 COCO 使用的 RLE 是“扁平化 + 列优先”的变体:
- 将 2D 掩码按列优先(column-major) 展平为 1D 数组
(注意:不是行优先!这是 COCO 的约定) - 记录所有 前景(1)段的起始位置和长度
# 原始 mask (3x3)
[[0, 1, 0],
[0, 1, 0],
[0, 1, 1]]
# 列优先展平 → [0,0,0, 1,1,1, 0,0,1]
# 前景段:从索引 3 开始,长度 3;从索引 8 开始,长度 1
# RLE counts: [3, 3, 2, 1] # (3个0, 3个1, 2个0, 1个1)
-
RLE ≠ 多边形(Polygons)
- COCO 支持两种分割标注:RLE(栅格化) 和 Polygons(矢量)
- YOLOv8 训练时通常使用 Polygons(更紧凑),内部转为 mask
- 评估时统一用 RLE 与 GT 比较
-
不要手动编辑 RLE
- RLE 对尺寸敏感,
size必须与图像一致 - 错误的
counts会导致解码失败
- RLE 对尺寸敏感,
-
Base64 编码
- COCO JSON 中的
counts通常是 base64 字符串(节省空间)
- COCO JSON 中的
RLE 是实例分割的“标准压缩语言”:
- 高效存储二值掩码
- COCO 官方评估必需格式
- YOLOv8 自动处理,用户通常无需干预
- 调试时可用
mask2rle/rle2mask转换
如果你在做 自定义实例分割数据集,推荐使用多边形标注(如 LabelMe),YOLOv8 会自动处理;只有在直接操作 COCO JSON 时才需关注 RLE。
14、angle
angle 并不是标准检测/分割/姿态模型中的内置超参数或输出字段。
如果你使用的是 YOLO 的旋转检测变体(如 YOLOv5-OBB, YOLOv8-OBB, RT-DETR-OBB 等),那么:angle 表示边界框的旋转角度(通常以弧度或度为单位)。
参数表示法:(x, y, w, h, angle)
(x, y):中心点w, h:宽高angle:旋转角度(例如:-π/2 ~ π/2或0°~180°)
-
角度范围必须一致
- 标签和预测需使用相同范围(如都用
[-90°, 90°])
- 标签和预测需使用相同范围(如都用
-
角度损失设计 tricky
- 直接 L1/L2 损失会导致
0°和180°被视为差异巨大 - 推荐使用
1 - cos(θ_pred - θ_gt)或 向量回归
- 直接 L1/L2 损失会导致
-
评估指标不同
- 使用 mAP with R-IoU,而非标准 IoU
angle= 旋转目标检测中的关键参数
- 仅在 OBB(Oriented Bounding Box)任务中存在
- 表示边界框的旋转角度(弧度或度)
- 标准 YOLOv8 detect/segment/pose 不包含此字段
如果你的任务涉及 任意方向的目标(如遥感、文本、工业零件),你可能需要:
- 使用 YOLOv8-OBB 社区版本
- 自定义角度回归头
- 采用 R-IoU NMS 后处理
15、nbs
nbs 是一个用于归一化 batch size 的参考值,全称为:Nominal Batch Size(名义批大小)
它不是实际训练时的 batch size,而是一个用于学习率自动缩放的基准值。
-
nbs不影响实际 batch size- 它只是一个缩放参考值
- 实际 batch 由
batch=参数决定
-
仅对
lr0缩放,不影响其他超参momentum,weight_decay等不随 batch size 变化
-
与梯度累积(Gradient Accumulation)兼容
- 若使用
batch=16+accumulate=4→ 等效 batch=64 - YOLO 会自动按 等效 batch size 缩放 lr
- 若使用
-
Adam 优化器通常不使用此规则
- 但 YOLO 默认用 SGD,所以适用
nbs是 YOLO 学习率自适应的“标尺”:
- 默认
64= 行业标准参考 batch size- 自动缩放
lr0以匹配你的实际 batch size- 用户几乎永远不需要修改它
如果你看到训练日志中的 LR: 0.0025(而你设了 lr0=0.01),很可能是因为 batch=16 触发了 nbs=64 的缩放。
16、hsv_h
在 Ultralytics YOLO(YOLOv5 / YOLOv8)的训练配置中,hsv_h 是一个数据增强(Data Augmentation)超参数,用于控制 图像色相(Hue)扰动的强度。
YOLO 在训练时会对输入图像进行 HSV(色相-饱和度-明度)颜色空间扰动,以提升模型对光照、色彩变化的鲁棒性。
hsv_h:控制 色相(Hue) 的随机偏移范围- 色相 = 颜色的基本类型(红、绿、蓝等)
hsv_h 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0 | 无色相扰动 | 颜色是关键判别特征(如交通灯) |
| 0.015(默认) | 轻微扰动,模拟自然光照变化 | 通用推荐 |
| 0.1~0.3 | 强扰动(红→绿→蓝) | 颜色无关任务(如工业零件检测) |
| >0.5 | 极端颜色失真 | 不推荐(破坏语义) |
对于正常的场景一般不需要对参数进行改动,对于特殊场景参考以下:
| 场景 | 推荐操作 |
|---|---|
| 通用目标检测 | 保持默认 0.015 |
| 颜色敏感任务(如水果分类、交通标志) | ↓ 减小到 0.005 或 0.0 |
| 红外/灰度图像 | 设为 0.0(无色相信息) |
| 域泛化需求强(多光照环境) | ↑ 增大到 0.03 |
| 过拟合严重 | 可略增至 0.02(增强正则化) |
若验证集上 颜色相关类别性能显著下降 → 降低 hsv_h
hsv_h是 YOLO 颜色鲁棒性的“微调旋钮”:
- 默认
0.015= 轻微、自然的色相扰动- 颜色关键任务 → 降低或关闭
- 域泛化需求 → 可适度增大
如果你的任务依赖精确颜色信息(如医学图像、遥感地物分类),建议将 hsv_h 设为 0.0。
17、hsv_s
hsv_s 是一个数据增强(Data Augmentation)超参数,用于控制 图像饱和度(Saturation)扰动的强度。
YOLO 在训练时会对输入图像进行 HSV(Hue, Saturation, Value)颜色空间扰动,以提升模型对光照、色彩变化的鲁棒性。
hsv_s:控制 饱和度(Saturation) 的随机缩放范围- 饱和度 = 颜色的“纯度”或“鲜艳程度”
s = 0→ 灰度图(无彩色)s = 1→ 完全饱和(最鲜艳)
hsv_s 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0 | 无饱和度扰动(保持原图饱和度) | 颜色纯度是关键特征(如艺术画作分析) |
| 0.3~0.5 | 轻微扰动 | 室内/可控光照场景 |
| 0.7(默认) | 中等扰动,模拟户外光照变化 | ✅ 通用推荐(COCO 验证最优) |
| 1.0+ | 极强扰动(接近灰度 ↔ 超鲜艳) | 颜色无关任务(如结构检测、工业缺陷) |
何时调整 hsv_s可参考以下场景:
| 场景 | 推荐操作 |
|---|---|
| 通用目标检测(COCO 风格) | 保持默认 0.7 |
| 低光照/夜间图像 | ↓ 减小到 0.3~0.5(避免过度去饱和) |
| 高对比度场景(如遥感、医学) | ↓ 减小到 0.2 或 0.0 |
| 颜色不重要(如金属零件、建筑结构) | ↑ 可增至 1.0(增强鲁棒性) |
| 过拟合 | 可略增至 0.8(加强正则化) |
若模型在阴天/黄昏图像上性能骤降 → 适当增大 hsv_s
若浅色目标漏检严重 → 降低 hsv_s
-
与
hsv_h、hsv_v协同工作- 三者共同构成完整的 HSV 增强
- 默认组合:
hsv_h=0.015,hsv_s=0.7,hsv_v=0.4
-
仅在训练阶段生效
- 推理时使用原始图像,无此扰动
-
对灰度图像无效
- 若输入是单通道图,应将
hsv_s=0.0
- 若输入是单通道图,应将
-
不要与其它颜色增强冲突
- 如已使用 Albumentations 的 ColorJitter,需关闭 YOLO 内置 HSV
hsv_s是 YOLO 对“颜色鲜艳度”变化的适应器:
- 默认
0.7= 平衡自然扰动与语义保留- 低光照/浅色目标 → 降低
- 域泛化需求强 → 可适度增大
- 灰度图或颜色关键任务 → 设为 0.0
如果你的数据集包含大量低饱和度目标(如白色车辆、浅色衣物),建议将 hsv_s 从 0.7 降低到 0.3~0.5。
18、hsv_v
hsv_v 是一个数据增强(Data Augmentation)超参数,用于控制 图像明度(Value / Brightness)扰动的强度。YOLO 在训练时会对输入图像进行 HSV(Hue, Saturation, Value)颜色空间扰动,以提升模型对光照变化的鲁棒性。
hsv_v:控制 明度(Value) 的随机缩放范围- 明度(V) = 图像整体亮度(0=全黑,1=原始亮度)
hsv_v 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0 | 无亮度扰动(保持原图亮度) | 光照恒定场景(如工业相机) |
| 0.2~0.3 | 轻微扰动 | 室内/可控环境 |
| 0.4(默认) | 中等扰动,覆盖常见户外光照 | 通用推荐(COCO 验证最优) |
| 0.6+ | 强扰动(接近黑夜 ↔ 强光过曝) | 极端光照鲁棒性需求(如自动驾驶) |
何时调整 hsv_v可参考以下场景:
| 场景 | 推荐操作 |
|---|---|
| 通用检测(COCO 风格) | 保持默认 0.4 |
| 夜间/低照度图像为主 | ↓ 减小到 0.2~0.3(避免过度变暗) |
| 高动态范围(HDR)场景 | ↑ 可增至 0.5~0.6 |
| 工业检测(恒定光照) | ↓ 设为 0.0 或 0.1 |
| 过拟合 | 可略增至 0.5(加强正则化) |
- 若模型在暗图上漏检严重 → 降低
hsv_v(减少变暗增强) - 若在强光下性能差 → 可略增大
hsv_v
hsv_v是 YOLO 对“光照变化”的适应器:
- 默认
0.4= 平衡鲁棒性与信息保留- 夜间/暗目标任务 → 降低
- 多光照场景 → 可适度增大
- 恒定光照工业场景 → 设为 0.0
如果你的数据集包含大量低照度图像(如监控、夜视),建议将 hsv_v 从 0.4 降低到 0.2~0.3,以避免训练时过度模拟“全黑”样本导致目标丢失。
19、degrees
degrees 是一个数据增强(Data Augmentation)超参数,用于控制 图像随机旋转的角度范围。
在训练过程中,YOLO 会对输入图像进行随机几何变换以提升模型对目标姿态变化的鲁棒性。
degrees:定义图像顺时针或逆时针旋转的最大角度(单位:度)- 实际旋转角度 =
random.uniform(-degrees, +degrees)
示例:
degrees=10.0→ 图像随机旋转 -10° 到 +10° 之间的任意角度- 旋转中心 = 图像中心
- 背景填充:通常用灰色((114, 114, 114))或边缘像素外推
degrees 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0(默认) | 无旋转 | 通用检测(COCO 风格) |
| 5.0~10.0 | 轻微倾斜 | 手持拍摄、轻微抖动场景 |
| 15.0~30.0 | 中等旋转 | 航拍、机器人视角、文档分析 |
| 45.0+ | 强旋转(含倒置) | 工业零件、遥感、任意方向文本 |
使用该参数可以参考以下场景:
| 场景 | 推荐值 |
|---|---|
| 通用目标检测(人/车/动物) | 0.0(保持默认) |
| 航拍图像(无人机、卫星) | 10.0 ~ 30.0 |
| 文档/表格/文本检测 | 5.0 ~ 15.0 |
| 工业质检(任意摆放零件) | 30.0 ~ 90.0 |
| 医学图像(可旋转器官) | 5.0 ~ 10.0 |
若验证集包含明显倾斜的目标而模型漏检 → 启用 degrees=10.0
degrees是 YOLO 对“目标方向变化”的适应器:
- 默认
0.0= 大多数场景无需旋转- 仅在目标可能任意朝向时才启用
- 推荐从小值开始(如 10.0),逐步调优
如果你的任务涉及非 upright 目标(如遥感飞机、倾斜文字、散落零件),尝试设置 degrees=15.0。
20、translate
translate 是一个数据增强(Data Augmentation)超参数,用于控制 图像随机平移(Translation)的强度。
YOLO 在训练时会对输入图像进行随机空间变换,以提升模型对目标位置变化的鲁棒性。
translate:定义图像在 水平和垂直方向上随机平移的最大比例- 实际平移量 =
random.uniform(-translate, +translate) × 图像尺寸
translate=0.1→ 图像最多向任意方向平移 10% 的宽或高- 对 640×640 图像 → 最大平移 ±64 像素
平移后空白区域用灰色 (114, 114, 114) 填充,边界框坐标同步更新。
translate 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0 | 无平移(目标始终居中) | 不推荐(降低泛化性) |
| 0.1(默认) | 轻微偏移 | 通用推荐(COCO 验证最优) |
| 0.2~0.3 | 中等偏移(目标靠近边缘) | 小目标检测、密集场景 |
| >0.5 | 极端平移(目标可能被切出) | 不推荐(信息丢失) |
translate=0.1可提升 mAP 0.3~0.8%(因模拟真实裁剪)- 过大值会导致目标被截断,尤其对小目标不利
使用该参数可以参考以下场景:
| 场景 | 推荐操作 |
|---|---|
| 通用检测(COCO 风格) | 保持默认 0.1 |
| 小目标密集场景(如细胞、无人机) | ↑ 增大到 0.2(模拟目标靠近边缘) |
| 目标总是居中(如工业相机) | ↓ 减小到 0.05 |
| 过拟合 | 可略增至 0.15(加强正则化) |
| 边界目标漏检严重 | ↑ 增大 translate(让模型见更多边缘样本) |
-
与 Mosaic 增强协同工作
- 平移应用于 Mosaic 合成后的整图
- 可使目标出现在合成图的任意位置
-
标签自动同步
- 平移后,YOLO 自动更新所有边界框坐标
- 被完全移出图像的目标会被过滤(不参与 loss)
-
不要与
crop混淆translate是带填充的平移- 不同于随机裁剪(YOLO 使用 Mosaic + Resize,无独立 crop)
-
对小目标需谨慎
- 大
translate可能使小目标完全移出视野 → 有效 batch size 下降
- 大
此增强迫使模型不依赖“目标总在中心”的假设。
translate是 YOLO 对“目标位置变化”的适应器:
- 默认
0.1= 平衡边缘鲁棒性与信息保留- 边缘目标漏检 → 增大
- 目标总居中 → 可略减小
- 避免 >0.3(防止目标丢失)
如果你的数据集中大量目标靠近图像边界,建议将 translate 从 0.1 提高到 0.15~0.2。
21、scale
scale 是一个数据增强(Data Augmentation)超参数,用于控制 图像随机缩放(Scaling)的强度。
YOLO 在训练过程中会对输入图像进行随机仿射变换(Affine Transform),其中 scale 控制图像的整体缩放比例。
scale定义了图像放大或缩小的最大比例范围- 实际缩放因子 =
random.uniform(1 - scale, 1 + scale)
scale=0.5→ 图像缩放范围为 0.5× 到 1.5×(即 50% ~ 150%)- 缩小:模拟远距离目标
- 放大:模拟近距离目标(并裁剪)
缩放后图像会被重新调整回训练尺寸(如 640×640),多余部分裁剪,不足部分用灰色 (114,114,114) 填充。
边界框坐标会同步更新,保证标签一致性。
scale 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0 | 无缩放(固定尺度) | 不推荐(泛化性差) |
| 0.2~0.3 | 轻微缩放 | 目标尺度变化小的场景(如固定距离监控) |
| 0.5(默认) | 中等缩放 | 通用推荐(COCO 验证最优) |
| 0.7~0.9 | 强缩放(含大幅放大/缩小) | 小目标检测、多尺度目标(如遥感) |
| ≥1.0 | 极端缩放(可能只剩背景) | 不推荐(信息丢失严重) |
scale=0.5可显著提升模型对不同距离目标的检测能力- 对小目标尤其重要(通过放大增强细节)
- 过大值会导致目标被裁剪过多,影响学习
| 场景 | 推荐操作 |
|---|---|
| 通用检测(COCO 风格) | 保持默认 0.5 |
| 小目标密集场景(如无人机、细胞) | ↑ 增大到 0.7~0.9(强化放大增强) |
| 目标尺度单一(如工业零件) | ↓ 减小到 0.2~0.3 |
| 过拟合 | 可略增至 0.6(加强正则化) |
| 远距离目标漏检 | ↑ 增大 scale(让模型见更多缩小样本) |
若验证集中小目标或远距离目标召回率低 → 增大 scale
scale是 YOLO 对“目标尺度变化”的核心增强器:
- 默认
0.5= 平衡多尺度鲁棒性与信息完整性- 小目标检测 → 增大(0.7~0.9)
- 尺度固定场景 → 减小(0.2~0.3)
- 避免 ≥1.0(防止目标丢失)
如果你的任务包含大量小目标或远距离物体(如航拍、交通监控),强烈建议将 scale 从 0.5 提高到 0.7~0.9。
22、shear
shear 是一个数据增强(Data Augmentation)超参数,用于控制 图像随机错切(Shearing)的强度。
错切变换是一种仿射变换,使图像沿某一方向发生“倾斜”形变,类似于推倒一摞书时的视觉效果:
- 水平错切:行像素按 y 坐标线性偏移
- 垂直错切:列像素按 x 坐标线性偏移
YOLO 中的 shear 同时包含水平和垂直方向的随机错切。
shear:定义错切角度的最大值(单位:度)- 实际错切角度 =
random.uniform(-shear, +shear)
shear 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0(默认) | 无错切 | 通用检测(COCO 风格) |
| 2.0~5.0 | 轻微倾斜 | 手持拍摄抖动、轻微透视畸变 |
| 10.0~20.0 | 明显错切 | 文档扫描、OCR、斜拍文本 |
| >30.0 | 极端形变 | 不推荐(破坏目标结构) |
使用该参数可以参考以下场景:
| 场景 | 推荐值 |
|---|---|
| 通用目标检测(人/车/动物) | 0.0(保持默认) |
| 文档分析 / OCR | 5.0 ~ 10.0 |
| 斜拍工业零件 | 3.0 ~ 8.0 |
| 遥感图像(倾斜视角) | 2.0 ~ 5.0 |
| 过拟合且其他增强已饱和 | 可尝试 2.0(谨慎) |
若验证集包含明显倾斜的矩形目标(如歪斜的车牌、文档),而模型定位不准 → 尝试 shear=5.0
shear是 YOLO 对“图像倾斜形变”的适应器:
- 默认
0.0= 大多数场景无需错切- 仅在目标常呈倾斜矩形时启用(如文本、文档、标牌)
- 推荐从小值开始(如 2.0~5.0)
如果你的任务涉及扫描文档、歪斜车牌或斜拍工业件,尝试设置 shear=5.0。
23、perspective
perspective 并不是一个标准的训练超参数。 YOLO 默认不支持透视变换(Perspective Transform)作为内置数据增强。
某些 YOLO 社区分支可能会引入 透视变换增强,模拟相机倾斜拍摄导致的“近大远小”效果。
- 作用:将矩形图像/目标变换为四边形,模拟真实视角畸变
- 参数含义:通常控制最大透视扰动强度(如 0.001 表示轻微)
YOLO 使用 随机仿射变换(Random Affine) 进行几何增强,包括:
- 旋转(
degrees) - 平移(
translate) - 缩放(
scale) - 错切(
shear)
但 仿射变换 ≠ 透视变换:
| 变换类型 | 是否保平行线 | YOLO 支持 |
|---|---|---|
| 仿射(Affine) | 是 | 官方支持 |
| 透视(Perspective) | 否 | 官方不支持 |
透视变换需要 3×3 单应矩阵(Homography),而仿射只需 2×3 矩阵。
何时需要透视增强?
| 场景 | 建议 |
|---|---|
| 通用目标检测(COCO 风格) | 不需要 |
| 文档扫描 / OCR | 强烈推荐(可提升斜拍鲁棒性) |
| 车牌识别(倾斜拍摄) | 推荐 |
| 室内 AR / 机器人导航 | 可考虑 |
| 航拍 / 卫星图像 | 通常用旋转+缩放即可 |
perspective不是 Ultralytics YOLO 的标准参数:
- 官方 YOLOv8/YOLOv5 不支持透视变换增强
- 可通过 Albumentations 等库自定义实现
- 仅推荐用于文档、OCR、车牌等特定场景
如果你正在处理严重透视畸变的图像(如手机斜拍文档),建议:
- 使用 Albumentations + 自定义 Dataset
- 或改用 支持 OBB(旋转框)的 YOLO 变体
24、flipud
flipud 是一个数据增强(Data Augmentation)超参数,用于控制 图像随机上下翻转(Vertical Flip)的概率。
flipud:定义每张训练图像被上下翻转(沿水平轴翻转)的概率- 取值范围:0.0 ~ 1.0
flipud=0.0→ 永不翻转flipud=0.5→ 50% 的图像被上下翻转flipud=1.0→ 所有图像都被上下翻转
YOLO 默认不启用上下翻转!
这是因为大多数自然场景中的目标(如人、车、动物)上下方向具有语义意义,翻转后不合理。
flipud 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0(默认) | 无上下翻转 | 通用检测(COCO 风格) |
| 0.1~0.3 | 低概率翻转 | 对称目标或无方向性场景 |
| 0.5 | 一半图像翻转 | 卫星图、显微镜图像、工业零件 |
| 1.0 | 全部翻转 | 极少使用(破坏语义) |
- 对非对称目标(如人、文字、汽车),
flipud > 0通常降低性能 - 对上下对称或无方向性目标(如细胞、圆形零件、航拍建筑),可提升泛化性
| 场景 | 推荐值 | 说明 |
|---|---|---|
| 通用目标检测(人/车/动物) | 0.0 |
人倒立不合理 |
| 遥感/航拍图像 | 0.2~0.5 |
飞机、船舶无绝对上下 |
| 医学图像(X光、细胞) | 0.3~0.5 |
生物结构常对称 |
| 工业质检(圆形/对称零件) | 0.5 |
方向无关 |
| 文档分析 | 0.0 |
文字倒置不可读 |
若你的目标没有“头尾”或“上下”之分 → 可安全启用 flipud
flipud是 YOLO 对“垂直对称性”的适应器:
- 默认
0.0= 大多数场景禁用上下翻转- 仅当目标无上下方向性时才启用(如遥感、医学、工业)
- 推荐值:0.2~0.5,避免 1.0
如果你的数据集中目标天然具有上下对称性或方向无关,可以尝试设置 flipud=0.3。
25、fliplr
fliplr 是一个数据增强(Data Augmentation)超参数,用于控制 图像随机左右翻转(Horizontal Flip)的概率。
fliplr:定义每张训练图像被水平翻转(沿垂直轴镜像)的概率- 取值范围:0.0 ~ 1.0
fliplr=0.0→ 永不翻转fliplr=0.5→ 50% 的图像被左右翻转fliplr=1.0→ 所有图像都被翻转
翻转后,所有边界框的 x 坐标会同步更新,确保标签正确。
对于关键点(如姿态估计),还会根据预定义的对称映射(如左肩↔右肩)交换关键点。
这是 YOLO 中最常用且有效的增强之一,因为大多数自然场景在水平方向具有对称性或可翻转性。
fliplr 值 |
效果 | 适用场景 |
|---|---|---|
| 0.0 | 无左右翻转 | 文字检测、方向敏感目标(如箭头、车牌) |
| 0.5(默认) | 一半图像翻转 | 通用推荐(COCO 验证最优) |
| 1.0 | 全部翻转 | 不推荐(破坏原始分布) |
fliplr=0.5可提升 mAP 0.5~1.0%(因有效扩充数据多样性)- 对左右对称目标(人、车、动物)效果显著
- 对文字、数字、方向标志可能有害(需关闭)
| 场景 | 推荐操作 |
|---|---|
| 通用检测(COCO 风格) | 保持默认 0.5 |
| 文本/OCR/车牌识别 | ↓ 设为 0.0(文字不可翻转) |
| 医学图像(器官不对称) | ↓ 设为 0.0 或 0.2 |
| 工业零件(有方向标记) | ↓ 根据标记决定 |
| 过拟合 | 可保持 0.5(强正则化) |
fliplr是 YOLO 最重要且安全的数据增强之一:
- 默认
0.5= 强烈推荐用于大多数场景- 仅在目标方向敏感时才关闭(如文字、数字、方向标志)
- 几乎零成本,显著提升泛化能力
如果你的任务不涉及文字或方向敏感目标,请务必保持 fliplr=0.5。
26、bgr
YOLO 模型内部始终使用 RGB 顺序进行训练和推理。
但 OpenCV 默认读取图像是 BGR 顺序,因此 YOLO 在预处理时会自动将 BGR 转为 RGB。
关键点:
- 训练/推理时无需手动设置
bgr - Ultralytics 底层已处理通道转换:
在模型导出(如 ONNX、TensorRT)或部署到特定硬件时,可能会遇到 bgr 相关选项
- 某些社区工具或后处理脚本可能提供
--bgr标志,表示“输入是 BGR 格式,需转 RGB” - 但这不属于 Ultralytics 官方超参
| 问题 | 答案 |
|---|---|
bgr 是 YOLO 超参数吗? |
否 |
| YOLO 使用 BGR 还是 RGB? | 内部全程使用 RGB |
需要手动设置 bgr=True 吗? |
不需要,自动处理 |
| OpenCV 显示结果颜色异常? | 需将 YOLO 输出从 RGB 转 BGR |
如果你看到某个配置文件或脚本中使用了 bgr,那很可能是非官方扩展或部署工具的选项,而非 Ultralytics YOLO 的标准参数。
27、mosaic
mosaic 是一个核心数据增强(Data Augmentation)超参数,用于控制 Mosaic 数据增强的使用概率。Mosaic 是 YOLO 系列最具特色的增强技术之一,由 YOLOv4 首创,YOLOv5/v8 默认启用。
Mosaic 将 4 张随机训练图像 拼接成一张大图进行训练:
- 随机缩放、裁剪、放置 4 张图
- 合并它们的标签(边界框、类别等)
- 最终 resize 到训练尺寸(如 640×640)
+----------+----------+
| 图像 A | 图像 B |
| (缩放) | (缩放) |
+----------+----------+
| 图像 C | 图像 D |
| (缩放) | (缩放) |
+----------+----------+
↓
单张 640×640 输入
模拟多尺度、多上下文场景,提升小目标检测和泛化能力
默认全程启用 Mosaic(前几个 epoch 可能 warmup 关闭)
mosaic:每张训练 batch 中,使用 Mosaic 增强的概率- 取值范围:0.0 ~ 1.0
mosaic=1.0→ 所有图像都用 Mosaicmosaic=0.5→ 50% 的 batch 使用 Mosaic,50% 使用原始图像mosaic=0.0→ 完全禁用 Mosaic
| 场景 | 推荐值 | 说明 |
|---|---|---|
| 通用检测(COCO 风格) | 1.0 |
默认最优 |
| 小目标密集场景 | 1.0 |
强烈推荐 |
| 极小数据集(<1k images) | 0.5~0.8 |
防止过拟合 |
| 高分辨率图像(>2000px) | 0.5 |
减少内存/CPU 压力 |
| 调试/快速验证 | 0.0 |
加速训练 |
| 目标常被截断(如医学切片) | 0.0 |
避免语义破坏 |
-
最后 N 个 epoch 自动关闭
- YOLO 默认在 最后 10 个 epoch 关闭 Mosaic(通过
close_mosaic参数) - 目的:让模型在“干净”图像上微调
- YOLO 默认在 最后 10 个 epoch 关闭 Mosaic(通过
-
与 MixUp 可组合
mixup=0.1表示 10% 的 Mosaic 图再与另一张图线性混合
-
不适用于所有任务
- 姿态估计(Pose):Mosaic 会打乱人体结构 → 通常仍启用,但需谨慎
- 实例分割(Segment):支持,mask 会同步拼接
-
显存影响小,CPU 影响大
- Mosaic 在 CPU 上完成,不会增加 GPU 显存占用
mosaic是 YOLO 性能的关键增强:
- 默认
1.0= 强烈推荐保持开启- 小目标、多尺度场景必备
- 仅在调试、CPU 瓶颈或语义敏感任务时关闭
如果你的任务包含小目标或复杂背景,务必确保 mosaic=1.0。
28、mixup
mixup 是一个数据增强(Data Augmentation)超参数,用于控制 MixUp 增强的使用概率。 MixUp 是一种样本间线性插值增强方法,可提升模型鲁棒性和泛化能力。
mixup:每张训练图像被 MixUp 增强的概率- 取值范围:0.0 ~ 1.0
mixup=0.0→ 禁用 MixUpmixup=0.1→ 10% 的 batch 使用 MixUpmixup=1.0→ 所有图像都参与 MixUp
优势:
- 正则化效果强,减少过拟合
- 提升分类置信度校准
- 对小数据集有效
风险(尤其在目标检测中):
- 边界框语义模糊:混合后“半人半车”无真实意义
- 可能降低定位精度
- 与 Mosaic 冲突:Mosaic 已含多图上下文,MixUp 可能过度扰动
| 场景 | 推荐值 | 说明 |
|---|---|---|
| 通用检测(COCO 风格) | 0.0 |
默认关闭,Mosaic 已足够 |
| 小数据集(<1k images) | 0.1~0.2 |
防止过拟合 |
| 分类主导任务(如单目标) | 0.2 |
MixUp 对分类更有效 |
| 高精度需求 + 充足训练时间 | 0.1 |
微调阶段尝试 |
| 实时性要求高 | 0.0 |
避免额外计算开销 |
原始图像
→ Mosaic(4图合成,概率=mosaic)
→ MixUp(与另一 Mosaic 图混合,概率=mixup)
→ HSV/仿射/Flip
→ 输入模型
-
不适用于所有任务
- 姿态估计(Pose):关键点混合无意义 → 禁用
- 实例分割(Segment):mask 混合可能导致边界模糊 → 谨慎使用
-
标签处理细节
- 分类标签:软标签(soft labels)加权
- 边界框:直接保留两图的所有 bbox(不插值坐标)
YOLO 的 MixUp 只混合图像像素,不混合 bbox 位置!
(这是与原始 MixUp 论文的区别)
-
Beta 分布参数固定
- YOLO 使用
beta=32.0,使 λλ 接近 0 或 1(避免 50-50 混合)
- YOLO 使用
-
最后 N 个 epoch 自动关闭
- 与 Mosaic 一样,默认在最后 10 个 epoch 关闭 MixUp
mixup是 YOLO 的辅助正则化增强:
- 默认
0.0= 大多数场景无需启用- 小数据集过拟合 → 可尝试
0.1- 不混合 bbox 坐标,仅混合图像像素
如果你的数据集非常小(<500 张图)且过拟合明显,可以尝试 mixup=0.1。
29、cutmix
在 Ultralytics YOLO(YOLOv5 / YOLOv8)的官方实现中,cutmix 并不是一个标准支持的数据增强超参数。截至 2026 年,YOLOv8 和 YOLOv5 官方代码库中均未内置 CutMix 增强。
CutMix 是一种数据增强技术,通过从一张图像中裁剪一个区域,并粘贴到另一张图像上,同时混合标签:
- 随机选择两个样本 A 和 B
- 在 A 上生成一个随机矩形掩码(mask)
- 将 B 的对应区域“剪切”并“粘贴”到 A
- 标签按面积比例加权
目的:提升模型对局部遮挡的鲁棒性,并增强注意力机制。
cutmix不是 Ultralytics YOLO 的标准参数:
- 官方 YOLOv8/YOLOv5 不支持 CutMix
- Mosaic 已覆盖其核心优势(多图融合)
- 仅建议在分类任务或研究场景中自定义实现
如果你看到某个项目使用了 cutmix,请确认它是否基于非官方 YOLO 分支。
30、copy_paste
copy_paste 是一个专用于实例分割(Instance Segmentation)任务的数据增强超参数,用于控制 Copy-Paste 增强的使用概率。
Copy-Paste 是一种面向掩码(mask)的增强技术,特别适用于 实例分割 任务:
- 从一张图像中随机选择若干实例(含其掩码和边界框)
- 将这些实例“复制”并“粘贴”到另一张图像的随机位置
- 粘贴时保留原始像素值(不混合),仅叠加掩码和标签
目的:
- 增加小目标/稀有类别的出现频率
- 提升模型对密集场景和遮挡的鲁棒性
- 扩充训练样本多样性(尤其当某些类别样本少时)
copy_paste 参数含义
copy_paste:每张训练图像被应用 Copy-Paste 增强的概率- 取值范围:0.0 ~ 1.0
copy_paste=0.0→ 完全禁用copy_paste=0.3→ 30% 的图像使用 Copy-Pastecopy_paste=1.0→ 所有图像都使用
| 场景 | 推荐值 | 说明 |
|---|---|---|
| 通用实例分割(COCO 风格) | 0.3(默认) |
平衡增强与真实性 |
| 小目标/稀有类别少 | 0.5~0.7 |
强化少数类采样 |
| 高密度场景(如人群) | 0.2~0.3 |
避免过度拥挤 |
| 小数据集(<1k images) | 0.5 |
数据扩充 |
| 调试/快速训练 | 0.0 |
关闭以加速 |
-
仅支持实例分割
- 需要
.masks标签(COCO RLE 或多边形) - 检测任务无 mask,无法使用
- 需要
-
可能产生不合理场景
- 如“飞机粘贴到室内”——但实验表明模型仍能受益
-
增加 CPU 负载
- 需加载额外图像并处理 mask 合成
-
最后 N 个 epoch 自动关闭
- 类似 Mosaic,默认在最后 10 个 epoch 关闭
copy_paste
- 类似 Mosaic,默认在最后 10 个 epoch 关闭
copy_paste是 YOLOv8 实例分割的“秘密武器”:
- 默认
0.3= 强烈推荐保持开启- 小目标、稀有类别、数据不平衡场景必备
- 仅用于
segment任务,其他任务无效
如果你在训练 YOLOv8-seg,请确保 copy_paste ≥ 0.3。
31、copy_paste_mode
copy_paste_mode 是一个与 copy_paste 增强配套的配置参数,用于指定 Copy-Paste 数据增强的具体粘贴策略(mode)。它控制 如何将复制的实例粘贴到目标图像上,影响合成图像的真实性和多样性。
Copy-Paste 是 YOLOv8 实例分割(-seg 模型)中的一种增强技术:
- 从一张图像中复制带掩码(mask)的实例
- 粘贴到另一张图像的随机位置
- 用于提升小目标、稀有类别的检测与分割性能
而 copy_paste_mode 决定了 “粘贴”时的行为细节。copy_paste_mode 支持以下模式:
| 模式 | 说明 | 默认? |
|---|---|---|
'flip' |
粘贴时随机水平翻转复制的实例 | 是 |
'mixup' |
使用 MixUp 风格的像素混合(加权叠加) | 否 |
'vanilla' |
直接粘贴,不翻转、不混合(原始像素覆盖) | 否 |
1. 'flip'(默认)
-
复制的实例有 50% 概率被水平翻转后再粘贴
-
优点:
-
增加姿态多样性(如左车 → 右车)
-
对称目标(人、车、动物)更自然
-
-
适用场景:通用实例分割(COCO 风格)
2. 'vanilla'(原始粘贴)
-
直接将像素和掩码复制到新位置
-
优点:
-
保持原始外观,避免翻转失真
-
-
适用场景:
-
方向敏感目标(如文字、箭头、不对称工业零件)
-
医学图像(器官不可翻转)
-
3. 'mixup'(实验性)
-
粘贴区域使用 像素加权混合(类似 MixUp):
Inew=(1−α)⋅Ibg+α⋅IfgInew=(1−α)⋅Ibg+α⋅Ifg
-
优点:模拟半透明遮挡
-
缺点:可能破坏边界清晰度,不推荐用于分割
| 你的数据特点 | 推荐 copy_paste_mode |
|---|---|
| 通用目标(人、车、动物) | 'flip'(默认) |
| 文字、数字、车牌、方向标志 | 用 'vanilla'(禁用翻转) |
| 医学图像(心脏、肝脏等不对称器官) | 'vanilla' |
| 工业零件(有方向标记) | 'vanilla' |
| 航拍/遥感(上下无方向) | 'flip' 仍可用 |
copy_paste_mode控制 Copy-Paste 增强的粘贴策略:
- 默认
'flip'= 推荐用于大多数场景- 方向敏感目标 → 改用
'vanilla''mixup'模式不推荐(可能降低分割精度)
如果你在训练 文本分割、医学图像或工业质检模型,强烈建议设置 copy_paste_mode='vanilla'。
32、auto_augment
auto_augment 是一个可选的数据增强策略参数,用于启用 AutoAugment —— 一种由 Google 提出的自动搜索最优图像增强策略的方法。
AutoAugment 是一种基于强化学习或预定义策略库的自动数据增强方法:
- 不使用固定增强(如 HSV、旋转)
- 而是从一个庞大的增强子策略池中,随机选择并组合多个操作
- 每个子策略包含 2~3 个图像变换(如:旋转 + 对比度 + 剪切)
目的:自动发现最适合当前数据集的增强组合,提升泛化能力。
auto_augment 参数含义
auto_augment:指定使用的 AutoAugment 策略名称- 类型:字符串(str)
- 默认值:
'randaugment'
| 参数值 | 实际增强方法 | 说明 |
|---|---|---|
'autoaugment' |
AutoAugment (ImageNet 策略) | 使用固定子策略库 |
'randaugment' |
RandAugment | YOLOv8 真正默认启用的方式 |
'augmix' |
AugMix | 更鲁棒的混合增强(较少用) |
None / '' |
禁用 | 回退到手动增强(HSV、仿射等) |
在 YOLOv8 源码中,即使你写 auto_augment='randaugment',它调用的也是 RandAugment 实现。
该参数的使用可以参考以下场景:
| 场景 | 推荐设置 | 说明 |
|---|---|---|
| 通用检测(COCO 风格) | 'randaugment'(默认) |
已验证有效 |
| 小数据集(<1k images) | 'randaugment' |
强正则化防过拟合 |
| 高分辨率/医学图像 | ''(禁用) |
避免过度扭曲细节 |
| 工业检测(需保真) | '' |
手动增强更可控 |
| 追求 SOTA 性能 | 尝试 'autoaugment' |
但收益通常 <1% mAP |
randaugment在 COCO 上比传统增强 +0.5~1.0 mAP- 但会略微增加训练时间(~10% CPU 开销)
-
与传统增强互斥
- 若
auto_augment非空,则跳过hsv_h/s/v、degrees、shear等手动增强 - 但 Mosaic、Flip、Copy-Paste 仍会应用
- 若
-
仅用于分类和检测
- 分割(seg)和姿态(pose)任务可能不完全兼容
-
不可与 Albumentations 混用
- YOLOv8 内置增强流水线,外部库需自定义 Dataset
-
调试时建议关闭
- 设
auto_augment=''可复现“干净”训练过程
- 设
auto_augment是 YOLOv8 的高级增强开关:
- 默认
'randaugment'= 推荐保持开启(尤其小数据集)- 提供比手动增强更强的正则化
- 工业/医学等保真场景 → 禁用(设为空字符串)
如果你的任务是通用目标检测且数据量中等,请保留默认 auto_augment=randaugment。
33、erasing
erasing 是一个用于控制 随机擦除(Random Erasing)数据增强 应用概率的超参数。
- 参数名:
erasing - 类型:浮点数(float)
- 取值范围:
0.0到1.0 - 含义:每张训练图像被应用随机擦除增强的概率
erasing=0.3 表示 30% 的训练图像会经历随机擦除。
-
随机选择一个矩形区域:
- 面积占原图的 2% ~ 33%(即 0.02 ~ 1/3)
- 宽高比在 0.3 ~ 3.0 之间(可瘦高或扁宽)
-
填充该区域:
- 使用 随机像素值(非固定灰度或黑色)
- 目的是模拟遮挡、污渍、传感器噪声等
-
标签不变:
- 即使目标被部分或完全擦除,其边界框(bbox)仍保留在标签中
- 模型需学会从残缺信息中识别目标
| 场景 | 效果 |
|---|---|
| 通用目标检测(COCO) | 提升对遮挡的鲁棒性,mAP +0.2~0.6% |
| 小目标检测 | 可能有害(易被完全擦除导致学习困难) |
| 过拟合 | 正则化效果强,可缓解过拟合 |
| 医学/遥感图像 | 不推荐(关键细节不可丢失) |
| 姿态估计 / 实例分割 | 谨慎使用(关键点或 mask 可能被破坏) |
参数的调整可以参考以下场景:
| 数据集特点 | 推荐 erasing 值 |
|---|---|
| 通用场景(人、车等) | 0.4(默认) |
| 小目标密集(无人机、细胞) | 0.0 ~ 0.2 |
| 遮挡常见(交通、零售) | 0.4 ~ 0.5 |
| 工业质检(需高保真) | 0.0 |
| 小样本(<1k 图像) | 0.3 ~ 0.4(防过拟合) |
-
与 Mosaic 共存
- 随机擦除作用于 Mosaic 合成后的整图,可能同时遮挡多个目标
-
不删除标签
- 即使目标被完全擦除,loss 仍会计算 → 可能引入噪声监督
-
最后若干 epoch 自动关闭
- 类似其他增强,默认在训练末期(如最后 10 个 epoch)禁用
-
任务依赖性
- 分类任务:效果显著
- 检测任务:中等收益
- 分割/姿态:一般不推荐
erasing是 YOLOv8 提升遮挡鲁棒性的轻量级增强:
- 默认 0.4 适用于大多数检测任务
- 小目标或高保真场景应降低或关闭
- 可作为过拟合时的正则化手段
如果你的数据包含真实遮挡(如行人被树遮挡、货架商品重叠),建议保留默认 erasing=0.4。
更多推荐


所有评论(0)