Ultralytics 训练与测试参数全解析:基于源码的完整梳理
·
Ultralytics 没有单独的 test mode,所谓“测试”就是 val;如果你想在测试集上跑,就用 split=test。下面只统计“公开可传”的用户参数,不把内部对象参数如 trainer、validator、session、save_dir 算进去。
代码规则
model.train(**kwargs)会把默认配置、模型已有 overrides、cfg文件和kwargs合并;其中data/model/task会按代码补默认值。model.val(**kwargs)也会合并配置,但代码额外把rect的默认值改成了True。val运行时如果conf=None,验证器会把它设成0.001;若任务是 OBB,则设成0.01。训练过程中的验证还会在非 CPU 且 AMP 开启时强制half=True。
共享参数(训练和验证都可传)
| 参数 | 默认值 | 说明 |
|---|---|---|
model |
配置里 None;Python API 通常继承当前已加载模型 |
模型权重 .pt 或结构文件 .yaml。 |
data |
配置里 None |
数据集配置文件路径;训练时代码会在缺省时回退到当前任务的示例数据集。 |
imgsz |
640 |
输入图像尺寸;训练影响精度/显存,验证影响速度/精度。 |
batch |
16 |
批大小;训练支持整数、-1 自动批、或 0~1 显存占比自动批;验证通常用整数。 |
device |
None |
运行设备,如 cpu、0、0,1、mps、npu。 |
workers |
8 |
DataLoader worker 数;验证在 CPU/MPS 上代码可能自动改成 0。 |
project |
None |
结果保存的项目目录。 |
name |
None |
本次运行名;结果落到 project/name。 |
exist_ok |
False |
若目标目录已存在,是否允许直接复用/覆盖。 |
verbose |
True |
是否输出详细日志。 |
cfg |
None |
自定义 YAML 配置文件;其值会覆盖 default.yaml,但仍低于同次调用里的显式 kwargs。 |
compile |
False |
是否启用 torch.compile;也可传编译模式字符串。 |
classes |
None |
训练时表示“只训练这些类”;验证时表示“只评估这些类”。 |
single_cls |
False |
把多类问题按单类处理。 |
rect |
训练 False / 验证 True |
是否使用矩形批处理,减少 padding;验证默认由 Model.val() 代码改成了 True。 |
plots |
True |
是否保存图表/可视化;训练会保存 loss/metric 曲线,验证会保存 PR 曲线、混淆矩阵等。 |
训练专用参数
| 参数 | 默认值 | 说明 |
|---|---|---|
epochs |
100 |
总训练轮数。 |
time |
None |
最长训练时长,单位小时;一旦设置,会覆盖 epochs。 |
patience |
100 |
Early stopping 容忍轮数。 |
save |
True |
是否保存 checkpoint 和最终权重。 |
save_period |
-1 |
每隔多少个 epoch 保存一次 checkpoint;小于 1 表示关闭。 |
cache |
False |
是否缓存数据;可用 True/'ram'/'disk'。 |
pretrained |
True |
是否从预训练权重开始;也可直接给权重路径。 |
optimizer |
'auto' |
优化器;可选 SGD、MuSGD、Adam、AdamW 等。auto 会按任务/训练规模自动选。 |
seed |
0 |
随机种子。 |
deterministic |
True |
强制确定性算法,复现更好,但可能更慢。 |
multi_scale |
0.0 |
多尺度训练幅度;按 imgsz 上下浮动。 |
cos_lr |
False |
是否启用 cosine 学习率调度。 |
close_mosaic |
10 |
最后 N 个 epoch 关闭 mosaic。 |
resume |
False |
是否从中断 checkpoint 继续训练。 |
amp |
True |
是否启用混合精度训练。 |
fraction |
1.0 |
训练时只使用多少比例的数据集。 |
profile |
False |
训练中附带分析 ONNX / TensorRT 速度。 |
freeze |
None |
冻结前 N 层,或传层索引列表。 |
val |
True |
训练期间是否周期性做验证。 |
max_det |
300 |
训练内验证阶段,每张图最多保留多少检测框。 |
overlap_mask |
True |
分割任务专用;是否把实例 mask 合并。 |
mask_ratio |
4 |
分割任务专用;mask 下采样比例。 |
dropout |
0.0 |
分类任务专用;分类头 dropout。 |
augmentations |
无默认公开值 | Python API 专用;自定义 Albumentations 变换列表。 |
训练超参数 / loss 权重
| 参数 | 默认值 | 说明 |
|---|---|---|
lr0 |
0.01 |
初始学习率。 |
lrf |
0.01 |
最终学习率比例,最终 LR = lr0 * lrf。 |
momentum |
0.937 |
SGD 的 momentum,或 Adam 系列的 beta1。 |
weight_decay |
0.0005 |
L2 正则。 |
warmup_epochs |
3.0 |
warmup 轮数。 |
warmup_momentum |
0.8 |
warmup 初始 momentum。 |
warmup_bias_lr |
0.1 |
warmup 阶段 bias 的学习率。 |
box |
7.5 |
检测框回归损失权重。 |
cls |
0.5 |
分类损失权重。 |
cls_pw |
0.0 |
类别不平衡加权强度;0 关闭,1 为完整逆频率加权。 |
dfl |
1.5 |
Distribution Focal Loss 权重。 |
pose |
12.0 |
姿态任务关键点损失权重。 |
kobj |
1.0 |
姿态任务 keypoint objectness 损失权重。 |
rle |
1.0 |
姿态任务 RLE 损失权重。 |
angle |
1.0 |
OBB 任务角度损失权重。 |
nbs |
64 |
名义 batch size;用于 loss 归一化。 |
训练数据增强参数
| 参数 | 默认值 | 说明 |
|---|---|---|
hsv_h |
0.015 |
色相抖动强度。 |
hsv_s |
0.7 |
饱和度抖动强度。 |
hsv_v |
0.4 |
亮度抖动强度。 |
degrees |
0.0 |
随机旋转角度范围。 |
translate |
0.1 |
平移幅度。 |
scale |
0.5 |
缩放幅度;代码注释允许浮点或 (min,max)。 |
shear |
0.0 |
剪切角度。 |
perspective |
0.0 |
透视变换强度。 |
flipud |
0.0 |
上下翻转概率。 |
fliplr |
0.5 |
左右翻转概率。 |
bgr |
0.0 |
RGB/BGR 通道互换概率。 |
mosaic |
1.0 |
Mosaic 概率。 |
mixup |
0.0 |
MixUp 概率。 |
cutmix |
0.0 |
CutMix 概率。 |
copy_paste |
0.0 |
分割任务 copy-paste 概率。 |
copy_paste_mode |
'flip' |
分割任务 copy-paste 策略,常见为 flip 或 mixup。 |
auto_augment |
'randaugment' |
分类任务自动增强策略。 |
erasing |
0.4 |
分类任务随机擦除概率。 |
验证 / 测试专用参数
| 参数 | 默认值 | 说明 |
|---|---|---|
save_json |
False |
保存验证结果;检测/分割/姿态通常保存 COCO JSON,语义分割保存 PNG mask。 |
conf |
运行时默认 0.001 |
最低置信度阈值;用于验证时生成 PR 曲线。OBB 任务代码默认 0.01。 |
iou |
0.7 |
NMS 的 IoU 阈值。 |
max_det |
300 |
每张图最多保留的检测数。 |
half |
False |
是否使用 FP16 验证。 |
dnn |
False |
ONNX 路径下是否用 OpenCV DNN 推理。 |
split |
'val' |
选择跑 val、test 或 train 子集;跑测试集就设 split=test。 |
save_txt |
False |
是否把预测结果写成每图一个 .txt。 |
save_conf |
False |
与 save_txt 配合,把置信度也写入文本。 |
augment |
False |
是否启用 TTA(test-time augmentation)。 |
agnostic_nms |
False |
是否做类无关 NMS。 |
visualize |
False |
是否可视化 GT / TP / FP / FN。 |
show_labels |
True |
可视化时是否显示类别标签。 |
show_conf |
True |
可视化时是否显示置信度。 |
end2end |
None |
是否强制启用/关闭端到端无 NMS 头;主要给 YOLO26 / YOLOv10 这类模型。 |
几条容易忽略的代码级细节
val的rect=True不是default.yaml的原始默认值,而是Model.val()在方法层硬塞进去的默认值。conf在default.yaml里是空值,但验证器启动时会自动补成0.001;OBB 为0.01。- 训练过程里的验证会强制把
half设为“非 CPU 且 AMP 开启”。 - 对非 PyTorch 或静态导出后端,验证代码可能自动把
rect=False,并把batch改成导出模型 metadata 里的值。 show、save_frames、save_crop、line_width、show_boxes这些属于共享可视化/预测侧配置;官方val参数表没有把它们列为正式验证参数,所以我这里没有把它们算进“公开 val 参数集合”。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)