查看 Markdown

数据增强矩阵

设置一个数据增强参数,并不保证它真的会到达流水线。本页记录每个可训练家族如何对待 TrainConfig 上的每个参数,依据的是库自带的那张声明式表格——它是唯一的事实来源。

参数一览

这些是 TrainConfig 的字段名,不是 CLI 的写法。CLI 把自己的别名映射到它们上面, 所以 --mosaic 设置的是 mosaic_prob

参数含义
mosaic_prob构建一个 4 图 mosaic 样本的概率
mixup_prob混入第二个样本的概率
hsv_probHSV 颜色抖动的概率
flip_prob水平翻转概率
degrees仿射变换的随机旋转范围,单位为度
translate仿射变换的随机平移比例
mosaic_scale仿射变换的随机缩放范围
mixup_scale施加在 MixUp 配对图像上的抖动缩放范围
shear仿射变换的随机错切范围,单位为度
perspective仿射变换的投影变换强度
flipud垂直翻转概率
no_aug_epochs训练末尾关闭强增强的轮数
auto_augment分类的 AutoAugment 策略:randaugment、autoaugment 或 augmix
erasing分类的 RandomErasing 概率
mixup分类的 batch-MixUp 概率,带软标签
cutmix分类的 batch-CutMix 概率,带软标签

最后四个是分类那一组。检测家族会忽略它们。mixup 是只在 API 上存在的参数:CLI 的 --mixup 是检测端 mixup_prob 的别名。

直接查询 spec
from libreyolo.data.augment.spec import (    AUG_KNOBS,    aug_support,    ignored_aug_params,    uses_mosaic_gating,) print(sorted(AUG_KNOBS)) table = aug_support("yolo9")print(table["mixup_prob"].status, table["mixup_prob"].note) print(sorted(ignored_aug_params("dfine")))print(uses_mosaic_gating("yolo9"), uses_mosaic_gating("yolonas"))

三种状态

状态含义
used参数会到达该家族的训练流水线,并改变样本
gated_by_mosaic参数只作用于走了 mosaic 分支的样本,所以当 mosaic_prob == 0 时它永远不会触发
ignored参数永远到不了流水线;设置它没有任何效果

ignored 是开始训练之前值得检查的那一个,因为不会有任何东西报错。当显式设置的某个训练 参数正好是所选家族忽略的参数时,CLI 会发出警告;当 mixup_prob > 0 却因为该家族把 MixUp 门控在 mosaic 上、而 mosaic_prob 为零而无法触发时,训练器会发出警告。

流水线原型

本页覆盖的每个家族都遵循六种流水线之一,个别家族另有偏差,列在下面。

参数YOLOX 式YOLO-NASDETR 式分类语义分割复原
mosaic_probusedignoredignoredignoredignoredignored
mixup_probgatedusedignoredignoredignoredignored
hsv_probusedusedignoredignoredignoredignored
flip_probusedusedusedignoredignoredignored
degreesgatedusedignoredignoredignoredignored
translategatedusedignoredignoredignoredignored
mosaic_scalegatedusedignoredignoredignoredignored
mixup_scalegatedusedignoredignoredignoredignored
sheargatedusedignoredignoredignoredignored
perspectivegatedusedignoredignoredignoredignored
flipudusedusedignoredignoredignoredignored
no_aug_epochsusedusedusedusedusedused
auto_augmentignoredignoredignoredusedignoredignored
erasingignoredignoredignoredusedignoredignored
mixupignoredignoredignoredusedignoredignored
cutmixignoredignoredignoredusedignoredignored

在 YOLOX 式流水线里,逐样本的预处理会施加 HSV 抖动和翻转,而仿射变换和 MixUp 只在 mosaic 分支内部运行。YOLO-NAS 则是跑一个始终开启的逐样本仿射,忽略 mosaic,并独立 施加 MixUp,把 mosaic_scale 复用为仿射的缩放范围。

DETR 式流水线是一个直通变换,没有 mosaic。它的光度扰动、zoom-out 和 IoU 裁剪是配方 里的常量,而不是可配置的参数,这就是 hsv_prob 和那些几何参数永远到不了它那里的 原因。分类流水线用的是 ImageFolder 变换,它的水平翻转是固定的 0.5,而不是 flip_prob。语义分割的尺度抖动和 HSV 来自家族的类属性,而不是配置参数;复原的翻转 则是输入和目标耦合在一起的操作,概率固定为 0.5。

no_aug_epochs 在所有地方都被遵守,只是它关掉的东西各不相同:YOLOX 式关掉 mosaic 和 MixUp,YOLO-NAS 关掉仿射和 MixUp,DETR 式关掉强光度增强和裁剪增强以及学习率的 尾段,其余的则关掉调度器的尾段。

各原型下的家族

原型家族
YOLOX 式yoloxyolo7yolo9yolo9_e2eyolo9_p2rtmdetpicodetrtdetrrtdetrv2fomo
YOLO-NASyolonas
DETR 式dfinedomedetrdeimdeimv2rtdetrv4rfdetrecdinov2
分类resnetconvnextmobilenetv4efficientnetv2
语义分割segformer
复原nafnet

一共覆盖二十五个家族。不在这份列表里的家族会返回一个空的忽略集合,所以不会为它发出 任何警告。

偏差

家族与其原型的差异
rtmdet忽略 flipud:它的变换里没有垂直翻转
picodet忽略 flipud
rtdetr忽略 flipud
rtdetrv2忽略 flipud
fomo忽略 perspectiveflipud
ec会使用 hsv_probdegreestranslate,但仅限 task="pose";detect 和 segment 使用固定的光度配方
dinov2会使用分类那一组,但仅限 task="classify"

ecdinov2 是多任务家族,所以只有当该家族每一个可训练任务都忽略某个参数时,这 个参数才会被标为 ignored。这样一来,CLI 的警告就不会出现对一个任务说错、对另一个任 务说对的情况。

Dome-DETR 原样继承 D-FINE 的变换。它唯一吃不下的是多尺度训练,而关掉它的是它自己的 配置文件,不是数据增强 spec。

家族专有参数

有些家族把数据增强参数挂在自己的 TrainConfig 子类上,而不是基类上。CLI 不暴露这些 参数;请通过 Python API 设置。

家族参数含义
yolo9yolo9_e2eyolo9_p2copy_pastecopy-paste 实例增强的概率,仅限 task="segment"
yolo9yolo9_e2eyolo9_p2copy_paste_modecopy-paste 的来源:flip 镜像同一个样本,mixup 使用第二个样本
yolo9yolo9_e2eyolo9_p2rot90随机 90 度旋转的概率
rfdetrcopy_pastetask="segment" 的 copy-paste 概率,仅支持 flip 模式
rfdetrcopy_paste_modetask="segment" 的 copy-paste 来源模式
rfdetrcrop_resize_prob原生流水线里随机裁剪缩放的概率
dfinecrop_resize_prob随机裁剪缩放的概率,task="segment"
eccrop_resize_prob随机裁剪缩放的概率,task="segment"
ecyolonasbrightness_contrast_prob亮度和对比度抖动的概率,task="pose"
ecyolonasaffine_prob关键点感知的仿射概率,task="pose"

yolo9 上,rot90 作用于 detect 和 OBB。

查询 spec

辅助函数返回
aug_support(family)参数到 Support 的对照表,未知家族返回 None
ignored_aug_params(family)该家族忽略的参数名集合;未知家族返回空集合
uses_mosaic_gating(family)该家族的 MixUp 是否只在 mosaic 样本上触发
display_name(family)警告里使用的、面向人的家族名
mixup_gating_warning(family, mosaic_prob, mixup_prob)MixUp 永远无法触发时的警告文本,否则为 None

Support 是一个由 statusnote 组成的具名元组,其中 note 说明某个参数为什么在 该家族上被忽略或被门控。

mosaic 门控

对 YOLOX 式家族来说,mixup_prob=0.5 配上 mosaic_prob=0 会完全关掉 MixUp,因为 MixUp 只作用于 mosaic 样本。在训练后期关掉 mosaic 时,很容易凑出这个组合。训练器会 记一条点名该家族的警告,mixup_gating_warning 就是它背后的纯函数。

参数列表、状态、原型、各家族的差异以及辅助函数,均读自 v1.5.0 的 libreyolo/data/augment/spec.py。那张表格由 tests/unit/test_augment_spec.py 锁定到真实的流水线上。