使用 Ultralytics YOLO 进行模型训练#
简介#
训练深度学习模型需要向其输入数据并调整参数,以便模型能够做出准确的预测。Ultralytics YOLO26 中的训练模式专为高效、有效地训练目标检测模型而设计,可充分利用现代硬件性能。本指南旨在涵盖你使用 YOLO26 丰富的功能开始训练自己的模型所需的所有详细信息。如果你尚未安装 Ultralytics,请从快速入门指南开始。
请参考unreleased YOLO27 preview了解计划中的训练示例。
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
为什么选择 Ultralytics YOLO 进行训练?#
以下是选择 YOLO26 训练模式的一些令人信服的理由:
- 高效性: 充分利用你的硬件,无论你是使用单 GPU 设置还是跨多个 GPU 扩展。
- 多功能性: 除了 COCO、VOC 和 ImageNet 等现成的数据集外,还可以在自定义数据集上进行训练。
- 用户友好: 提供简单而强大的 CLI 和 Python 接口,带来直接的训练体验。
- 超参数灵活性: 拥有广泛的可自定义超参数,以微调模型性能。如需更深入的控制,你可以自行自定义训练器。
- 云端训练: 通过Ultralytics 平台在云端 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
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)多 GPU 训练#
多 GPU 训练通过将训练负载分摊到多个 GPU 上,从而更高效地利用可用的硬件资源。此功能可以通过 Python API 和命令行接口使用。要启用多GPU训练,请指定你希望使用的 GPU 设备 ID。
要使用 2 个 GPU(CUDA 设备 0 和 1)进行训练,请使用以下命令。根据需要扩展到更多的 GPU。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])多 GPU 训练在 Windows 上无法与用于 torch>=2.4 的官方 PyTorch 轮子包一起使用。Ultralytics 通过 torch.distributed.run 启动 DDP,其集合点步骤构建了一个自 PyTorch 2.4 起默认使用 libuv 后端的 TCPStore,而官方的 Windows 轮子包在构建时未包含 libuv。训练会立即退出并显示:
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
设置 USE_LIBUV=0 无法解决此问题,因为集合点直接构造了 TCPStore,且该代码路径从未读取该变量。请在 Linux 或WSL2上进行多 GPU 训练,或者在 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 相同。有关安装以及当前MIGraphX、DirectML和Ryzen AI NPU支持状态,请参阅 AMD integration guide。
Intel GPU 训练使用 device=xpu:0,或使用提供 XCCL 的 PyTorch 构建版本的多个 XPU ID。
华为昇腾 NPU 训练#
Ultralytics支持通过 torch_npu 在华为昇腾NPU上进行训练和验证。请按照 Ascend Extension for PyTorch installation guide 安装相互兼容的CANN、PyTorch和 torch_npu 版本,然后在启动Ultralytics之前加载CANN环境变量:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")标准训练功能(包括AMP、验证、检查点和恢复)会使用活动的NPU。AutoBatch适用于单NPU训练,而多个NPU ID则通过HCCL启动分布式训练。有关训练后的模型导出和部署,请参阅 Huawei Ascend integration guide。
闲置 GPU 训练#
闲置 GPU 训练支持在多 GPU 系统中自动选择利用率最低的 GPU,在无需手动选择 GPU 的情况下优化资源利用率。此功能根据利用率指标和显存可用性来识别可用的 GPU。
要自动选择并使用最闲置的 GPU 进行训练,请使用 -1 设备参数。这在共享计算环境或有多用户的服务器中特别有用。
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])自动选择算法优先考虑具有以下特征的 GPU:
- 较低的当前利用率百分比
- 较高的可用内存(空闲显存)
- 较低的温度和功耗
此功能在共享计算环境或跨不同模型运行多个训练任务时特别有价值。它能自动适应不断变化的系统条件,确保在无需人工干预的情况下实现最优的资源分配。
Apple Silicon MPS 训练#
随着 Ultralytics YOLO 模型对 Apple 芯片支持的集成,现在可以在利用强大的金属性能着色器 (MPS) 框架的设备上训练你的模型。MPS 提供了一种在 Apple 自研芯片上执行计算和图像处理任务的高性能方式。
要启用在 Apple 芯片上的训练,你应在初始化训练过程时将 'mps' 指定为你的设备。以下是一个如何在 Python 中以及通过命令行执行此操作的示例:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")在利用 Apple 芯片的计算能力的同时,这能够更高效地处理训练任务。有关更详细的指导和高级配置选项,请参阅PyTorch MPS 文档。
恢复中断的训练#
从先前保存的状态恢复训练在使用深度学习模型时是一项关键功能。这在各种情况下非常方便,例如训练过程意外中断时,或者当你希望使用新数据或进行更多轮次继续训练模型时。
当恢复训练时,Ultralytics YOLO 会从最后保存的模型中加载权重,并恢复优化器状态、学习率调度器、轮次编号以及数据集。这能让你从中断的地方无缝继续训练过程。传入显式的 data= 以及 resume,以便在不同的数据集上继续训练,而不是使用检查点的数据集。
你可以在调用 train 方法时,将 resume 参数设置为 True,并指定包含部分训练模型权重的 .pt 文件的路径,从而在 Ultralytics YOLO 中轻松恢复训练。
以下是如何使用 Python 和通过命令行恢复中断训练的示例:
from ultralytics import YOLO
# Load a model
model = YOLO("path/to/last.pt") # load a partially trained model
# Resume training
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 更新可以帮助稳定优化过程。
只有 2D 线性权重和 4D 卷积滤波器(重塑为 2D)与 SGD 一起接收 Muon 样式更新,而所有其他参数(例如批归一化权重和偏置项)仍保留在标准 SGD 上。
当使用 optimizer=auto 时,Ultralytics 会自动为较长的训练运行(通常在迭代次数 > 10000 时)选择 MuSGD。对于较短的运行,训练器会回退到 AdamW。
使用示例:
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 | False | 启用将数据集图像缓存到内存(True/ram)、磁盘(disk),或禁用缓存(False)。通过减少磁盘 I/O 提高训练速度,但会增加内存使用量。 |
device | int 或 str 或 list | None | 指定训练使用的计算设备:单个 GPU(device=0)、多个 GPU(device=[0,1])、CPU(device=cpu)、Apple silicon 上的 MPS(device=mps)、Huawei Ascend NPU(device=npu:0 或 device=npu:0,1),或自动选择空闲 GPU(device=-1)或多个空闲 GPU(device=[-1,-1])。 |
workers | int | 8 | 数据加载的工作线程数(Multi-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。可以提高效率和速度,但可能影响模型准确率。 |
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 的整数表示图像数量,只有可选的测试项接受 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)。调整此值对优化过程至关重要,会影响模型权重更新的速度。 |
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 会将其简化为普通的对数均方根误差。 |
nbs | int | 64 | 用于归一化损失的名义批次大小。 |
overlap_mask | bool | True | 决定是否将对象掩码合并为单个掩码进行训练,或为每个对象分别保留掩码。发生重叠时,合并过程中较小的掩码会叠加在较大的掩码上方。 |
mask_ratio | int | 4 | 分割掩码的下采样比例,影响训练期间使用的掩码分辨率。 |
dropout | float | 0.0 | 分类任务中的正则化丢弃率,通过在训练期间随机忽略单元来防止过拟合。 |
val | bool | True | 启用训练期间的验证,从而可以定期在独立数据集上评估模型性能。 |
nms | bool,可选 | None | 选择用于轮次验证、检查点选择和早停的推理头。None 或 True 使用带 NMS 的一对多(one-to-many);False 在可用时使用无 NMS(NMS-free)的头。两个头都保留其训练损失。 |
plots | bool | True | 生成并保存训练和验证指标图,以及预测示例,为模型性能和学习进展提供可视化洞察。 |
compile | bool 或 str | False | 使用 backend='inductor' 启用 PyTorch 2.x 的 torch.compile 图编译。接受 True → "default"、False → 禁用,或使用 "default"、"reduce-overhead"、"max-autotune-no-cudagraphs" 等字符串模式。不支持时会发出警告并回退到 eager 模式。 |
channels_last | bool | None | 在训练期间为卷积使用 channels_last (NHWC) 内存格式。None 会在配备 PyTorch 1.11 或更新版本的 CUDA 上自动启用它,但在测得运行较慢的 Windows 系统上除外。False 会禁用它,而 True 会显式请求它。PyTorch 1.10 及更旧版本、CPU 和 MPS 默认保持 NCHW 格式。 |
max_det | int | 300 | 训练验证期间每张图像的最大检测数。对于 detect、segment、pose 和 OBB,默认的 300 只有在训练集/验证集标注对象最大数量超过 300 时才会增加到该数量。其他值保持固定;超出限制会触发警告。 |
batch 参数可以通过三种方式配置:
- 固定批次大小:设置一个整数值(例如
batch=16),直接指定每个批次的图像数量。 - 自动模式(60% GPU 内存):使用
batch=-1自动调整批次大小,以实现大约 60% 的 CUDA 内存利用率。 - 带利用率比例的自动模式:设置一个比例值(例如
batch=0.70),根据指定的 GPU 内存使用比例来调整批次大小。 - OOM 自动重试:如果在第一个轮次期间发生 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 | 对图像应用随机透视变换,增强模型理解三维空间中对象的能力。 |
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、pose、obb | 0.0 - 1.0 | 组合两张图像的部分区域,在保留清晰区域的同时创建局部混合效果。通过创建遮挡场景增强模型鲁棒性。 |
copy_paste | float | 0 | segment、obb | 0.0 - 1.0 | 要粘贴的符合条件对象所占的比例;flip 会在图像内镜像这些对象,而 mixup 还会将该值用作跨图像应用概率。 |
copy_paste_mode | str | flip | segment、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 settings 进行切换,例如 yolo settings tensorboard=True。下面展示了三种最常见的设置。
Comet#
Comet 是一个平台,允许数据科学家和开发人员跟踪、比较、解释和优化实验与模型。它提供实时指标、代码差异和超参数跟踪等功能。
要使用 Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()请记住登录其网站上的 Comet 账户并获取你的 API 密钥。你需要将其添加到你的环境变量或脚本中以记录你的实验。
ClearML#
ClearML 是一个开源平台,可自动跟踪实验并帮助高效共享资源。它旨在帮助团队更高效地管理、执行和重现其机器学习工作。
要使用 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 平台云端训练包含免费额度以供开始使用。上传你的数据集、选择模型和 GPU,并直接从浏览器进行训练。
要使用 Ultralytics YOLO26 训练目标检测模型,你可以使用 Python API 或 CLI。以下是这两者的示例:
单 GPU 和 CPU 训练示例from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training) # Train the model 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 # Load the partially trained model model = YOLO("path/to/last.pt") # Resume training 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 # Load a pretrained model model = YOLO("yolo26n.pt") # Train with full class weighting for severely imbalanced data results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # Or use partial weighting (0.25) for moderate imbalance 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 # Load a pretrained model model = YOLO("yolo26n.pt") # Train the model on Apple silicon chip (M1/M2/M3/M4) results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")有关更多详细信息,请参考Apple Silicon MPS 训练一节。
Ultralytics YOLO26 允许你通过参数配置各种训练设置,例如批量大小、学习率、训练轮数等。以下是简要概述:
参数 默认值 描述 modelNone用于训练的模型文件的路径。 dataNone数据集 YAML 的路径(例如 coco8.yaml),或者是用于分类的数据集目录或名称(例如imagenet10)。epochs100训练总轮数。 batch16批量大小,可调整为整数或自动模式。 imgsz640训练的目标图像大小。 deviceNone用于训练的计算设备,例如 cpu、0、0,1或mps。saveTrue启用训练检查点和最终模型权重的保存。 有关训练设置的深入指南,请查阅训练设置一节。