使用 Ultralytics YOLO 训练模型#
简介#
训练深度学习模型需要向模型输入数据并调整其参数,使其能够进行准确预测。Ultralytics YOLO26 的训练模式专为高效训练目标检测模型而设计,可充分利用现代硬件的能力。本指南旨在介绍使用 YOLO26 强大的功能集训练自有模型所需的全部信息。如果你尚未安装 Ultralytics,请先阅读快速入门指南。
查看尚未发布的 YOLO27 预览版,了解计划中的训练示例。
观看: 如何在 Google Colab 中使用自定义数据集训练 YOLO 模型。
为什么选择 Ultralytics YOLO 进行训练?#
以下是选择 YOLO26 训练模式的一些重要理由:
- 高效:充分利用硬件资源,无论你使用单 GPU 配置,还是扩展到多块 GPU。
- 灵活:除了 COCO、VOC 和 ImageNet 等现成数据集,你还可以使用自定义数据集进行训练。
- 易于使用:提供简单而强大的 CLI 和 Python 接口,让训练过程更加顺畅。
- 超参数灵活性:提供多种可自定义的超参数,可用于微调模型性能。如需更精细的控制,你可以直接自定义训练器。
- 云端训练:通过 Ultralytics Platform 使用云 GPU 进行训练,并实时查看指标和自动保存检查点。
训练模式的主要功能#
以下是 YOLO26 训练模式的一些主要功能:
- 自动下载数据集:首次使用时,会自动下载配置中指定了下载源的数据集,例如
yolo train data=coco8.yaml。有关支持的格式和数据集,请参阅数据集概览。 - 支持多 GPU:在多块 GPU 之间无缝扩展训练任务,加快训练进程。
- 超参数配置:可以通过 YAML 配置文件或 CLI 参数修改超参数。
- 可视化与监控:实时跟踪训练指标并可视化学习过程,以便更好地了解训练情况。
使用示例#
在 COCO8 数据集上以 640 的图像尺寸训练 YOLO26n,训练 100 个周期。可以使用 device 参数指定训练设备。如果未传入参数,则在 GPU device=0 可用时使用该设备;否则使用 device='cpu'。训练参数的完整列表请参阅下方的参数部分。
在 Windows 上以脚本方式启动训练时,可能会收到 RuntimeError。在训练代码前添加 if __name__ == "__main__": 块即可解决此问题。
设备会自动确定。如果有可用 GPU,就会使用该 GPU(默认 CUDA 设备 0);否则将在 CPU 上开始训练。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n.yaml") # 从 YAML 构建新模型
model = YOLO("yolo26n.pt") # 加载预训练模型(推荐用于训练)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # 从 YAML 构建模型并迁移权重
# 训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)多 GPU 训练#
多 GPU 训练会将训练负载分配到多块 GPU,从而更高效地利用可用硬件资源。Python API 和命令行接口均支持此功能。要启用多 GPU 训练,请指定要使用的 GPU 设备 ID。
要使用 CUDA 设备 0 和 1 这两块 GPU 进行训练,请运行以下命令。你可以根据需要扩展到更多 GPU。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n.pt") # 加载预训练模型(推荐用于训练)
# 使用 2 块 GPU 训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# 使用当前最空闲的两块 GPU 训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])在 Windows 上,使用官方 PyTorch wheel 的 torch>=2.4 无法进行多 GPU 训练。Ultralytics 通过 torch.distributed.run 启动 DDP,其会合步骤会构建一个 TCPStore;自 PyTorch 2.4 起,该对象默认使用 libuv 后端,而官方 Windows wheel 编译时未包含 libuv。训练会立即退出,并显示:
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
设置 USE_LIBUV=0 无法解决此问题,因为会合过程会直接构建 TCPStore,而该代码路径不会读取此变量。要使用多块 GPU,请在 Linux 或 WSL2 上训练;或者在 Windows 上使用 device=0 进行单 GPU 训练。
指定多个设备(例如 device=[0, 1])时,Ultralytics 会在内部启动一个新的训练器实例,并在后台执行 torch.distributed.run。对于标准 CLI 用法和未修改的 Python 脚本,此过程可以无缝运行。
但是,如果脚本包含自定义组件(例如自定义训练器、验证器、数据集或数据增强流程),这些对象就无法自动序列化并传递给 DDP 子进程。在这种情况下,你必须直接使用 torch.distributed.run 启动脚本:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyAMD GPU 训练使用 PyTorch ROCm 构建版本,并采用标准的 device=0 或 device=cuda:0 语法。有关 ROCm 安装、多 GPU 训练、AMP 注意事项以及导出模型的 MIGraphX 推理,请参阅 AMD 集成指南。
Intel GPU 训练使用 device=xpu:0,也可以使用提供 XCCL 的 PyTorch 构建版本指定多个 XPU ID。
华为昇腾 NPU 训练#
Ultralytics 通过 torch_npu 支持在华为昇腾 NPU 上进行训练和验证。请按照适用于 PyTorch 的昇腾扩展安装指南安装相互兼容的 CANN、PyTorch 和 torch_npu 版本,然后在启动 Ultralytics 前加载 CANN 环境:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# 在一块昇腾 NPU 上训练
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# 使用 HCCL 在两块昇腾 NPU 上训练
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")包括 AMP、验证、检查点保存和恢复训练在内的标准训练功能均使用当前启用的 NPU。单 NPU 训练支持 AutoBatch;多个 NPU ID 则会通过 HCCL 启动分布式训练。有关训练后模型导出和部署的信息,请参阅华为昇腾集成指南。
使用空闲 GPU 训练#
使用空闲 GPU 训练功能可在多 GPU 系统中自动选择利用率最低的 GPU,无需手动选择即可优化资源使用。此功能会根据利用率指标和 VRAM 可用量识别可用 GPU。
要自动选择并使用最空闲的 GPU 进行训练,请使用 -1 设备参数。这在共享计算环境或多用户服务器中特别有用。
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n.pt") # 加载预训练模型(推荐用于训练)
# 使用当前最空闲的一块 GPU 进行训练
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# 使用当前最空闲的两块 GPU 进行训练
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])自动选择算法会优先选择具有以下特征的 GPU:
- 当前利用率较低
- 可用内存较多(空闲 VRAM 较大)
此功能在共享计算环境中,或在不同模型上同时运行多个训练任务时特别有用。它会自动适应不断变化的系统状况,无需手动干预即可确保合理分配资源。
Apple Silicon MPS 训练#
Ultralytics YOLO 模型现已支持 Apple silicon 芯片,因此你可以在使用强大 Metal Performance Shaders (MPS) 框架的设备上训练模型。MPS 为在 Apple 定制芯片上执行计算和图像处理任务提供了高性能方案。
要在 Apple silicon 芯片上启用训练,请在启动训练时将设备指定为 'mps'。下面分别介绍如何通过 Python 和命令行执行此操作:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n.pt") # 加载预训练模型(推荐用于训练)
# 使用 MPS 训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")借助 Apple silicon 芯片的计算能力,你可以更高效地处理训练任务。如需更详细的指导和高级配置选项,请参阅 PyTorch MPS 文档。
恢复中断的训练#
从之前保存的状态恢复训练,是使用深度学习模型时一项至关重要的功能。在训练过程意外中断,或你希望使用新数据或增加训练轮数继续训练模型等各种情况下,这项功能都很有用。
恢复训练时,Ultralytics YOLO 会加载上次保存模型的权重,并还原优化器状态、学习率调度器、轮数和数据集。这样,你就可以从中断处无缝继续训练。若要改用其他数据集,而不是检查点中的数据集,请同时传入明确的 data= 和 resume。
在调用 train 方法时,将 resume 参数设为 True,并指定包含部分训练模型权重的 .pt 文件路径,即可轻松恢复 Ultralytics YOLO 训练。
下面是使用 Python 和命令行恢复中断训练的示例:
from ultralytics import YOLO
# 加载模型
model = YOLO("path/to/last.pt") # 加载部分训练过的模型
# 恢复训练
results = model.train(resume=True)设置 resume=True 后,train 函数会使用 'path/to/last.pt' 文件中保存的状态,从中断处继续训练。如果省略 resume 参数,或将其设为 False,train 函数就会启动新的训练会话。
请注意,检查点默认在每轮训练结束时保存,也可以通过 save_period 参数按固定间隔保存,因此至少必须完成 1 轮训练才能恢复训练。
训练设置#
YOLO 模型的训练设置包含训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和精度。主要训练设置包括批次大小、学习率、动量和权重衰减。此外,优化器、损失函数以及训练数据集的组成也会影响训练过程。仔细调整并试验这些设置对于优化性能至关重要。
MuSGD 优化器#
在 YOLO26 中,MuSGD 是一种混合优化器,将标准 SGD 更新与 Muon 风格的正交化更新相结合。
对于较长的 YOLO26 训练任务和较大的数据集,建议使用该优化器;正交化的 Muon 更新有助于稳定优化过程。
只有二维线性权重和四维卷积滤波器(重塑为二维后)会与 SGD 一起使用 Muon 风格更新;所有其他参数,例如批归一化权重和偏置项,仍使用标准 SGD。
使用 optimizer=auto 时,Ultralytics 会自动为较长的训练任务选择 MuSGD(通常是迭代次数 > 10000)。对于较短的训练任务,训练器会改用 AdamW。在 auto 模式下,训练器也会选择学习率,因此用户提供的 lr0 会被忽略。若要手动控制这些设置,请明确选择优化器,例如 optimizer=AdamW lr0=0.001。
用法示例:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD请参阅 ultralytics/optim/muon.py 中的实现,以及 BaseTrainer.build_optimizer 中的优化器自动选择逻辑。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | str | None | 指定用于训练的模型文件。接受指向.pt预训练模型或.yaml配置文件的路径。这是定义模型结构或初始化权重的必要设置。 |
data | str | None | 数据集 YAML 文件的路径(例如 coco8.yaml),其中包含训练和验证数据的路径、类别名称和类别数量。分类任务则使用数据集目录或内置数据集名称(例如 imagenet10)。 |
epochs | int | 100 | 训练总轮数。每个轮次都表示完整遍历整个数据集一次。调整此值会影响训练时长和模型性能。 |
time | float | None | 最长训练时间(小时)。如果设置此项,它会覆盖epochs参数,让训练在达到指定时长后自动停止。适用于训练时间受限的情况。 |
patience | int | 100 | 验证指标未改善时,等待多少轮后提前停止训练。性能趋于平稳时停止训练,有助于防止过拟合。 |
batch | int 或 float | 16 | 批次大小,有三种模式:设为整数(例如 batch=16)、自动模式(使用 60% GPU 显存,batch=-1),或自动模式并指定显存使用比例(batch=0.70)。 |
imgsz | int | 640 | 训练时的目标图像尺寸。图像会被缩放为边长等于指定值的正方形(如果是rect=False),YOLO 模型会保持宽高比,但 RT-DETR 不会。这会影响模型准确率和计算复杂度。 |
save | bool | True | 启用训练检查点和最终模型权重的保存功能。适用于恢复训练或模型部署。 |
save_period | int | -1 | 保存模型检查点的频率,以轮数指定。值为 -1 时会禁用此功能。适合在长时间训练过程中保存中间模型。 |
cache | bool 或 str | False | 启用数据集图像缓存:缓存到内存(True/ram)、磁盘(disk),或禁用缓存(False)。通过减少磁盘 I/O 提高训练速度,但会增加内存使用量。 |
device | int 或 str 或 list | None | 指定训练使用的计算设备:单个 GPU(device=0)、多个 GPU(device=[0,1])、CPU(device=cpu)、Apple 芯片上的 MPS(device=mps)、华为昇腾 NPU(device=npu:0 或 device=npu:0,1)、Intel XPU(device=xpu:0)、自动选择空闲 GPU(device=-1)或多个空闲 GPU(device=[-1,-1])。 |
workers | int | 8 | 用于数据加载的工作线程数(多 GPU 训练时为每个RANK配置)。此设置会影响数据预处理和输入模型的速度,在多 GPU 配置中尤其有用。 |
project | str | None | 用于保存训练输出的项目目录名称。便于有序存储不同实验。 |
name | str | None | 训练运行名称。用于在项目文件夹中创建子目录,以存储训练日志和输出。 |
exist_ok | bool | False | 如果为 True,则允许覆盖已有的项目/名称目录。适用于迭代实验,无需手动清理之前的输出。 |
save_dir | str | None | 指定保存运行输出的确切目录,覆盖project/name组合。路径会按原样使用,不会自动递增,因此连续运行会复用同一目录。 |
pretrained | bool 或 str | True | 指定是否从预训练权重开始训练。可以是布尔值,也可以是要加载的权重文件路径字符串。pretrained=False会使用随机初始化的权重训练,同时保留模型架构。 |
cls_remap | bool | True | 跨数据集微调时,只要类别名称匹配,就会将预训练分类头的行复制到新模型中,让重叠类别保留已学习的偏置;如果分类头宽度不变,也会保留权重。无论类别数量是否相同,或类别顺序是否不同,都会应用此设置。 |
optimizer | str | 'auto' | 选择训练使用的优化器。选项包括 SGD、MuSGD、Adam、Adamax、AdamW、NAdam、RAdam、RMSProp 或 auto,可根据训练迭代次数选择 AdamW 或 MuSGD。这会影响收敛速度和稳定性。 |
seed | int | 0 | 设置训练的随机种子,确保使用相同配置进行多次运行时结果可复现。 |
deterministic | bool | True | 强制使用确定性算法,确保结果可复现;但由于限制使用非确定性算法,可能会影响性能和速度。 |
verbose | bool | True | 启用训练过程中的详细输出,在控制台显示进度条、每轮指标及其他训练信息。 |
single_cls | bool | False | 训练时将多类别数据集中的所有类别视为一个类别。适用于二分类任务,或关注对象是否存在而非类别的情况。 |
classes | list[int] | None | 指定要参与训练的类别 ID 列表。适用于筛选并仅关注训练中的特定类别。 |
rect | bool | False | 启用最小填充策略——批次中的图像只进行最少填充,以达到统一尺寸,且最长边等于 imgsz。这可以提升效率和速度,但可能影响模型精度。无论此设置如何,标准 YOLO 训练器在检测、分割、姿态和 OBB 验证中都会使用 rect=True。 |
multi_scale | float | 0.0 | 每个批次随机调整imgsz,变化范围为 +/- multi_scale(例如,0.25 -> 0.75x 到 1.25x),并四舍五入到模型步幅的倍数;0.0会禁用多尺度训练。 |
cos_lr | bool | False | 使用余弦学习率调度器,在各轮训练中按余弦曲线调整学习率。这有助于管理学习率,从而更好地收敛。 |
close_mosaic | int | 10 | 在最后 N 轮训练中禁用马赛克数据增强,以便在训练结束前稳定模型。设为 0 可禁用此功能。 |
resume | bool | False | 从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和轮数,让训练无缝继续。 |
amp | bool 或 str | True | 设置训练精度:True 或 "fp16" 使用 FP16,"bf16" 在支持的 CUDA 设备上使用 BF16,False 或 "fp32" 使用 FP32。 |
quantize | int 或 str | None | 设为8(或"int8")以启用 INT8 量化感知训练(QAT)。该训练会在循环中进行伪量化微调,使权重能够适应 INT8 导出。请参阅量化感知训练。 |
fraction | float、int 或 list | 1.0 | 数据集子集,可按比例/数量或[train, val, test]列表指定。1表示完整划分;大于1的整数表示图像数量;只有可选的 test 项接受0/0.0来表示无测试集。包含两项的列表会保留完整测试集。 |
profile | bool | False | 启用训练期间对 ONNX 和 TensorRT 速度的性能分析,适用于优化模型部署。 |
freeze | int 或 list | None | 冻结模型的前 N 层,或按索引或模块名称冻结指定层(23.cv2,不带前导model.),以减少可训练参数数量。适用于微调或迁移学习。 |
lr0 | float | 0.01 | 初始学习率(即SGD=1E-2、Adam=1E-3)。默认optimizer='auto'下会忽略此设置;要使用此设置,请明确指定优化器。 |
lrf | float | 0.01 | 最终学习率与初始学习率的比值 = (lr0 * lrf),与调度器配合使用,以便随时间调整学习率。 |
momentum | float | 0.937 | SGD 的动量因子或 Adam 优化器的 beta1,用于控制当前更新中纳入历史梯度的程度。 |
weight_decay | float | 0.0005 | L2 正则化项,用于惩罚较大的权重以防止过拟合。 |
warmup_epochs | float | 3.0 | 学习率预热的轮数:逐步将学习率从较低值提升至初始学习率,以稳定训练初期的过程。 |
warmup_momentum | float | 0.8 | 预热阶段的初始动量,会在预热期间逐渐调整至设定的动量值。 |
warmup_bias_lr | float | 0.1 | 预热阶段偏置参数的学习率,有助于稳定训练初期的模型。使用默认optimizer='auto'时会自动设为0.0;要使用此设置,请明确指定优化器。 |
distill_model | str | None | 用于知识蒸馏的教师模型检查点路径(例如 yolo26x.pt)。设置后,学生模型会在冻结教师模型的指导下,通过额外的蒸馏损失进行训练。 |
dis | float | 6.0 | 添加到标准检测损失中的蒸馏损失权重。值越大,教师模型特征指导的影响越大。 |
box | float | 7.5 | 损失函数中边界框损失分量的权重,影响模型对准确预测边界框坐标的重视程度。 |
cls | float | 0.5 | 总损失函数中分类损失的权重,影响相对于其他分量而言正确类别预测的重要性。 |
cls_pw | float | 0.0 | 用于处理类别不平衡的类别权重指数,按类别频率的倒数加权。0.0会禁用类别加权,1.0会应用完整的逆频率加权。介于 0 和 1 之间的值可进行部分加权。 |
dfl | float | 1.5 | 边界框距离回归项的权重:检测头使用reg_max > 1时为分布焦点损失(DFL);不使用 DFL 的 YOLO26(reg_max: 1)则采用归一化边界框距离的 L1 损失。 |
pose | float | 12.0 | 姿态估计模型中姿态损失的权重,影响模型对准确预测姿态关键点的重视程度。 |
kobj | float | 1.0 | 姿态估计模型中关键点目标置信度损失的权重,用于平衡检测置信度与姿态准确率。 |
rle | float | 1.0 | 姿态估计模型中残差对数似然估计损失的权重,会影响关键点定位的精度。 |
angle | float | 1.0 | OBB 模型中角度损失的权重,会影响有向边界框角度预测的精度。 |
dlog | float | 1.0 | 深度估计模型中尺度不变对数(SILog)损失的权重,是影响深度准确率的主要项。 |
dgrad | float | 0.5 | 深度估计模型中梯度损失的权重,用于惩罚深度边缘误差并促使表面边界更加清晰。 |
dlam | float | 1.0 | 深度估计模型中 SILog 损失的方差聚焦因子。1.0会使损失完全具有尺度不变性,而0.0会将其简化为普通的对数 RMSE。 |
nbs | int | 64 | 用于损失归一化的标称批次大小。 |
overlap_mask | bool | True | 确定训练时是否将所有对象掩码合并为单个掩码,或为每个对象分别保留掩码。合并时如果发生重叠,较小的掩码会叠加在较大的掩码之上。 |
mask_ratio | int | 4 | 分割掩码的下采样比例,会影响训练时所用掩码的分辨率,但不会改变预测掩码的分辨率。 |
dropout | float | 0.0 | 分类任务中的正则化丢弃率,通过在训练期间随机丢弃单元来防止过拟合。 |
val | bool | True | 启用训练期间的验证,以便定期在单独的数据集上评估模型性能。 |
nms | bool,可选 | None | 选择用于每轮验证、检查点选择和提前停止的推理头。None 或 True使用带 NMS 的一对多头;False在可用时使用无 NMS 头。两种头都会保留各自的训练损失。 |
plots | bool | True | 生成并保存训练和验证指标图,以及预测示例,直观呈现模型性能和学习进度。 |
compile | bool 或 str | False | 使用backend='inductor'启用 PyTorch 2.x torch.compile图编译。接受True → "default"、False → 禁用,或"default"、"reduce-overhead"、"max-autotune-no-cudagraphs"等字符串模式。如果不受支持,则会发出警告并回退到即时执行模式。 |
channels_last | bool | None | 训练卷积时使用 channels_last(NHWC)内存格式。None会在 PyTorch 1.11 或更高版本的 CUDA 上自动启用此格式,但 Windows 除外,因为实测速度更慢。False会禁用此格式,True则会显式启用此格式。CPU 或 MPS 上的训练始终使用 NCHW(True会被忽略,并发出警告)。 |
max_det | int | 300 | 训练验证期间每张图像的最大检测数。对于检测、分割、姿态和 OBB,仅当训练/验证集中带标签对象的最大数量超过默认值 300 时,最大检测数才会增加到该数量。其他值保持不变;超出限制时会触发警告。 |
batch 参数有三种配置方式:
- 固定批次大小:设置一个整数值(例如
batch=16),直接指定每个批次包含的图像数量。 - 自动模式(60% GPU 显存):使用
batch=-1,自动调整批次大小,使 CUDA 显存利用率达到约 60%。 - 按利用率比例自动调整:设置一个比例值(例如
batch=0.70),根据指定的 GPU 显存使用比例调整批次大小。 - 显存不足时自动重试:如果第一轮训练期间发生 CUDA 显存溢出错误,训练器会自动将批次大小减半并重试(最多 3 次)。此功能仅适用于单 GPU 训练;多 GPU (DDP) 训练会立即报错。
- 未找到合适值:如果没有候选批次大小能生成可用的性能分析结果,AutoBatch 会抛出明确的
RuntimeError,而不会悄悄回退到无关的默认值。
数据增强设置和超参数#
数据增强技术通过增加训练数据的多样性,帮助模型更好地泛化到未见过的数据,因此对于提升 YOLO 模型的鲁棒性和性能至关重要。下表概述了各数据增强参数的用途和效果:
| 参数 | 类型 | 默认值 | 支持的任务 | 范围 | 说明 |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 按色轮的一定比例调整图像色调,增加颜色变化。帮助模型适应不同光照条件。对于 classify,仅在 auto_augment=None 时应用。 |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 按一定比例改变图像饱和度,从而影响颜色强度。适用于模拟不同的环境条件。对于 classify,仅在 auto_augment=None 时应用。 |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 按一定比例修改图像的明度(亮度),帮助模型在各种光照条件下保持良好表现。对于 classify,仅在 auto_augment=None 时应用。 |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | 在指定角度范围内随机旋转图像,提升模型识别不同朝向对象的能力。 |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | 按图像尺寸的一定比例水平和垂直平移图像,帮助模型学会检测部分可见的对象。 |
scale | float | tuple | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1,或显式指定的 (min, max) 元组(不适用于 classify) | 按增益系数缩放图像,模拟与摄像头距离不同的对象。 |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | 按指定角度剪切图像,模拟从不同角度观察对象的效果。 |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | 对图像应用随机透视变换,增强模型理解 3D 空间中对象的能力。 |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 按指定概率将图像上下翻转,增加数据变化性,同时不影响对象特征。 |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | 按指定概率将图像左右翻转,适用于学习对称对象并提高数据集多样性。 |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | 按指定概率将图像通道从 RGB 翻转为 BGR,适用于提升模型对通道顺序错误的鲁棒性。 |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | 将四张训练图像合并为一张,模拟不同的场景构成和对象交互。对复杂场景理解非常有效。 |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | 混合两张图像及其标签,生成一张合成图像。通过引入标签噪声和视觉变化,提升模型的泛化能力。 |
cutmix | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | 合并两张图像的部分区域,形成局部混合,同时保留清晰的区域边界。通过构造遮挡场景增强模型鲁棒性。 |
copy_paste | float | 0 | segment, semantic, obb | 0.0 - 1.0 | 粘贴符合条件对象的比例;flip 会在图像内镜像这些对象,而 mixup 还会将此值用作跨图像应用概率。 |
copy_paste_mode | str | flip | segment, semantic, obb | - | 指定要使用的 copy-paste 策略。选项包括 'flip' 和 'mixup'。 |
auto_augment | str | randaugment | classify | - | 应用预定义的增强策略('randaugment'、'autoaugment' 或 'augmix'),通过增加视觉多样性来提升模型性能。 |
erasing | float | 0.4 | classify | 0.0 - 1.0 | 训练期间随机擦除图像区域,促使模型关注不那么明显的特征。 |
augmentations | list | None | detect, segment, semantic, depth, pose, obb | - | 用于高级数据增强的自定义 Albumentations 变换(仅限 Python API)。接受变换对象列表,以满足特定的增强需求。 |
你可以根据数据集和任务的具体要求调整这些设置。尝试不同的值,有助于找到能使模型性能达到最佳的数据增强策略。
有关训练数据增强操作的更多信息,请参阅参考章节。
日志记录#
训练指标、图表和检查点始终会写入运行目录;Ultralytics 也会将它们实时传输到你已安装并启用的任何实验跟踪工具:Comet、ClearML、TensorBoard、MLflow、Weights & Biases 和 DVCLive。你可以通过 Ultralytics 设置启用或停用各个日志记录器,例如 yolo settings tensorboard=True。下面介绍三种最常见的配置。
Comet#
Comet 是一个平台,数据科学家和开发者可以使用它跟踪、比较、解释和优化实验及模型。该平台提供实时指标、代码差异和超参数跟踪等功能。
使用 Comet 的方法:
# pip install comet_ml
import comet_ml
comet_ml.login()请记得登录 Comet 网站上的账户并获取 API 密钥。你需要将该密钥添加到环境变量或脚本中,才能记录实验。
ClearML#
ClearML 是一个开源平台,可自动跟踪实验并帮助高效共享资源。它旨在帮助团队更高效地管理、执行和复现 ML 工作。
使用 ClearML 的方法:
# pip install clearml
import clearml
clearml.browser_login()运行此脚本后,你需要在浏览器中登录 ClearML 账户并验证会话。
TensorBoard#
TensorBoard 是用于 TensorFlow 的可视化工具包。你可以使用它可视化 TensorFlow 图、绘制图执行过程中的定量指标,并展示经过该图的图像等其他数据。
在 Google Colab 中使用 TensorBoard:
%load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directory若要在本地使用 TensorBoard,请运行以下命令,然后在 localhost:6006 中查看结果。
tensorboard --logdir ultralytics/runs # replace with 'runs' directory此操作会启动 TensorBoard,并将其指向保存训练日志的目录。
设置好日志记录器后,你就可以开始训练模型。所有训练指标都会自动记录到你选择的平台;你可以查看这些日志,持续监控模型性能、比较不同模型并找出需要改进的地方。
接下来做什么#
使用留出数据验证训练好的模型,检查其实际精度,然后将其导出为 ONNX、TensorRT 或其他部署格式。如果你使用自己的数据而不是 COCO8 进行训练,请先按照数据集指南设置数据格式。
常见问题#
可以。Ultralytics Platform 云训练提供免费额度,供你开始使用。上传数据集,选择模型和 GPU,然后直接在浏览器中训练。
使用 Ultralytics YOLO26 训练目标检测模型时,你可以使用 Python API 或 CLI。下面分别给出示例:
单 GPU 和 CPU 训练示例from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n.pt") # 加载预训练模型(推荐用于训练) # 训练模型 results = model.train(data="coco8.yaml", epochs=100, imgsz=640)更多详情请参阅训练设置章节。
Ultralytics YOLO26 训练模式的主要功能包括:
- 自动下载数据集:自动下载 COCO、VOC 和 ImageNet 等标准数据集。
- 多 GPU 支持:将训练任务扩展到多个 GPU,以加快处理速度。
- 超参数配置:通过 YAML 文件或 CLI 参数自定义超参数。
- 可视化与监控:实时跟踪训练指标,以便深入了解训练情况。
这些功能让训练既高效又能根据你的需求灵活定制。更多详情请参阅训练模式的主要功能章节。
若要从中断的会话恢复训练,请将
resume参数设为True,并指定上次保存的检查点路径。恢复训练示例from ultralytics import YOLO # 加载部分训练过的模型 model = YOLO("path/to/last.pt") # 恢复训练 results = model.train(resume=True)更多信息请参阅恢复中断的训练章节。
如果训练数据中某些类别的样本数量明显少于其他类别,就会出现类别不平衡。这可能导致模型在少数类别上的表现不佳。Ultralytics YOLO 支持通过
cls_pw参数设置类别权重,以解决此问题。cls_pw参数根据类别频率的倒数控制类别加权强度:cls_pw=0.0(默认值):禁用类别加权cls_pw=1.0:应用完整的频率倒数加权- 介于
0.0和1.0之间的值:对类别进行部分加权,以适应中度不平衡的情况
类别权重按
(1.0 / class_counts) ^ cls_pw计算,并经过归一化,使其均值等于 1.0。在类别不平衡的数据集上训练from ultralytics import YOLO # 加载预训练模型 model = YOLO("yolo26n.pt") # 对严重不平衡的数据应用完整的类别加权进行训练 results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # 或者对中度不平衡的数据应用部分加权 (0.25) results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)提示对于中度不平衡的数据集,可以先使用
cls_pw=0.25;如果少数类别的表现仍不理想,再将其提高到1.0。你可以检查训练日志中计算出的类别权重,以确认权重分布。可以,Ultralytics YOLO26 支持利用 Metal Performance Shaders (MPS) 框架在 Apple 芯片上训练。请将 'mps' 指定为训练设备。
MPS 训练示例from ultralytics import YOLO # 加载预训练模型 model = YOLO("yolo26n.pt") # 在 Apple 芯片 (M1/M2/M3/M4) 上训练模型 results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")更多详情请参阅 Apple 芯片 MPS 训练章节。
Ultralytics YOLO26 允许你通过参数配置各种训练设置,例如批次大小、学习率、训练轮数等。以下是简要概述:
参数 默认值 说明 modelNone用于训练的模型文件路径。 dataNone数据集 YAML 文件的路径(例如 coco8.yaml),或者用于分类的数据集目录或名称(例如imagenet10)。epochs100训练总轮数。 batch16批次大小,可设置为整数或自动模式。 imgsz640训练目标图像尺寸。 deviceNone用于训练的计算设备,例如 cpu、0、0,1或mps。saveTrue启用训练检查点和最终模型权重的保存功能。 如需深入了解训练设置,请参阅训练设置章节。