Ultralytics YOLO27:
Get Started

使用 Ultralytics YOLO 训练模型#

Ultralytics YOLO ecosystem and integrations

简介#

训练深度学习模型需要向模型输入数据并调整其参数,使其能够进行准确预测。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 多进程错误

在 Windows 上以脚本方式启动训练时,可能会收到 RuntimeError。在训练代码前添加 if __name__ == "__main__": 块即可解决此问题。

单 GPU 和 CPU 训练示例

设备会自动确定。如果有可用 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。

多 GPU 训练示例

要使用 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 多 GPU 支持

在 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 训练。

使用自定义代码进行多 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.py

AMD 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.sh
昇腾 NPU 训练示例
from 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 训练示例

要自动选择并使用最空闲的 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:

  1. 当前利用率较低
  2. 可用内存较多(空闲 VRAM 较大)

此功能在共享计算环境中,或在不同模型上同时运行多个训练任务时特别有用。它会自动适应不断变化的系统状况,无需手动干预即可确保合理分配资源。

Apple Silicon MPS 训练#

Ultralytics YOLO 模型现已支持 Apple silicon 芯片,因此你可以在使用强大 Metal Performance Shaders (MPS) 框架的设备上训练模型。MPS 为在 Apple 定制芯片上执行计算和图像处理任务提供了高性能方案。

要在 Apple silicon 芯片上启用训练,请在启动训练时将设备指定为 'mps'。下面分别介绍如何通过 Python 和命令行执行此操作:

MPS 训练示例
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 中的优化器自动选择逻辑。

参数类型默认值说明
modelstrNone指定用于训练的模型文件。接受指向.pt预训练模型或.yaml配置文件的路径。这是定义模型结构或初始化权重的必要设置。
datastrNone数据集 YAML 文件的路径(例如 coco8.yaml),其中包含训练和验证数据的路径、类别名称和类别数量。分类任务则使用数据集目录或内置数据集名称(例如 imagenet10)。
epochsint100训练总轮数。每个轮次都表示完整遍历整个数据集一次。调整此值会影响训练时长和模型性能。
timefloatNone最长训练时间(小时)。如果设置此项,它会覆盖epochs参数,让训练在达到指定时长后自动停止。适用于训练时间受限的情况。
patienceint100验证指标未改善时,等待多少轮后提前停止训练。性能趋于平稳时停止训练,有助于防止过拟合。
batchint 或 float16批次大小,有三种模式:设为整数(例如 batch=16)、自动模式(使用 60% GPU 显存,batch=-1),或自动模式并指定显存使用比例(batch=0.70)。
imgszint640训练时的目标图像尺寸。图像会被缩放为边长等于指定值的正方形(如果是rect=False),YOLO 模型会保持宽高比,但 RT-DETR 不会。这会影响模型准确率和计算复杂度。
saveboolTrue启用训练检查点和最终模型权重的保存功能。适用于恢复训练或模型部署。
save_periodint-1保存模型检查点的频率,以轮数指定。值为 -1 时会禁用此功能。适合在长时间训练过程中保存中间模型。
cachebool 或 strFalse启用数据集图像缓存:缓存到内存(True/ram)、磁盘(disk),或禁用缓存(False)。通过减少磁盘 I/O 提高训练速度,但会增加内存使用量。
deviceint 或 str 或 listNone指定训练使用的计算设备:单个 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])。
workersint8用于数据加载的工作线程数(多 GPU 训练时为每个RANK配置)。此设置会影响数据预处理和输入模型的速度,在多 GPU 配置中尤其有用。
projectstrNone用于保存训练输出的项目目录名称。便于有序存储不同实验。
namestrNone训练运行名称。用于在项目文件夹中创建子目录,以存储训练日志和输出。
exist_okboolFalse如果为 True,则允许覆盖已有的项目/名称目录。适用于迭代实验,无需手动清理之前的输出。
save_dirstrNone指定保存运行输出的确切目录,覆盖project/name组合。路径会按原样使用,不会自动递增,因此连续运行会复用同一目录。
pretrainedbool 或 strTrue指定是否从预训练权重开始训练。可以是布尔值,也可以是要加载的权重文件路径字符串。pretrained=False会使用随机初始化的权重训练,同时保留模型架构。
cls_remapboolTrue跨数据集微调时,只要类别名称匹配,就会将预训练分类头的行复制到新模型中,让重叠类别保留已学习的偏置;如果分类头宽度不变,也会保留权重。无论类别数量是否相同,或类别顺序是否不同,都会应用此设置。
optimizerstr'auto'选择训练使用的优化器。选项包括 SGD、MuSGD、Adam、Adamax、AdamW、NAdam、RAdam、RMSProp 或 auto,可根据训练迭代次数选择 AdamW 或 MuSGD。这会影响收敛速度和稳定性。
seedint0设置训练的随机种子,确保使用相同配置进行多次运行时结果可复现。
deterministicboolTrue强制使用确定性算法,确保结果可复现;但由于限制使用非确定性算法,可能会影响性能和速度。
verboseboolTrue启用训练过程中的详细输出,在控制台显示进度条、每轮指标及其他训练信息。
single_clsboolFalse训练时将多类别数据集中的所有类别视为一个类别。适用于二分类任务,或关注对象是否存在而非类别的情况。
classeslist[int]None指定要参与训练的类别 ID 列表。适用于筛选并仅关注训练中的特定类别。
rectboolFalse启用最小填充策略——批次中的图像只进行最少填充,以达到统一尺寸,且最长边等于 imgsz。这可以提升效率和速度,但可能影响模型精度。无论此设置如何,标准 YOLO 训练器在检测、分割、姿态和 OBB 验证中都会使用 rect=True。
multi_scalefloat0.0每个批次随机调整imgsz,变化范围为 +/- multi_scale(例如,0.25 -> 0.75x 到 1.25x),并四舍五入到模型步幅的倍数;0.0会禁用多尺度训练。
cos_lrboolFalse使用余弦学习率调度器,在各轮训练中按余弦曲线调整学习率。这有助于管理学习率,从而更好地收敛。
close_mosaicint10在最后 N 轮训练中禁用马赛克数据增强,以便在训练结束前稳定模型。设为 0 可禁用此功能。
resumeboolFalse从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和轮数,让训练无缝继续。
ampbool 或 strTrue设置训练精度:True 或 "fp16" 使用 FP16,"bf16" 在支持的 CUDA 设备上使用 BF16,False 或 "fp32" 使用 FP32。
quantizeint 或 strNone设为8(或"int8")以启用 INT8 量化感知训练(QAT)。该训练会在循环中进行伪量化微调,使权重能够适应 INT8 导出。请参阅量化感知训练。
fractionfloat、int 或 list1.0数据集子集,可按比例/数量或[train, val, test]列表指定。1表示完整划分;大于1的整数表示图像数量;只有可选的 test 项接受0/0.0来表示无测试集。包含两项的列表会保留完整测试集。
profileboolFalse启用训练期间对 ONNX 和 TensorRT 速度的性能分析,适用于优化模型部署。
freezeint 或 listNone冻结模型的前 N 层,或按索引或模块名称冻结指定层(23.cv2,不带前导model.),以减少可训练参数数量。适用于微调或迁移学习。
lr0float0.01初始学习率(即SGD=1E-2、Adam=1E-3)。默认optimizer='auto'下会忽略此设置;要使用此设置,请明确指定优化器。
lrffloat0.01最终学习率与初始学习率的比值 = (lr0 * lrf),与调度器配合使用,以便随时间调整学习率。
momentumfloat0.937SGD 的动量因子或 Adam 优化器的 beta1,用于控制当前更新中纳入历史梯度的程度。
weight_decayfloat0.0005L2 正则化项,用于惩罚较大的权重以防止过拟合。
warmup_epochsfloat3.0学习率预热的轮数:逐步将学习率从较低值提升至初始学习率,以稳定训练初期的过程。
warmup_momentumfloat0.8预热阶段的初始动量,会在预热期间逐渐调整至设定的动量值。
warmup_bias_lrfloat0.1预热阶段偏置参数的学习率,有助于稳定训练初期的模型。使用默认optimizer='auto'时会自动设为0.0;要使用此设置,请明确指定优化器。
distill_modelstrNone用于知识蒸馏的教师模型检查点路径(例如 yolo26x.pt)。设置后,学生模型会在冻结教师模型的指导下,通过额外的蒸馏损失进行训练。
disfloat6.0添加到标准检测损失中的蒸馏损失权重。值越大,教师模型特征指导的影响越大。
boxfloat7.5损失函数中边界框损失分量的权重,影响模型对准确预测边界框坐标的重视程度。
clsfloat0.5总损失函数中分类损失的权重,影响相对于其他分量而言正确类别预测的重要性。
cls_pwfloat0.0用于处理类别不平衡的类别权重指数,按类别频率的倒数加权。0.0会禁用类别加权,1.0会应用完整的逆频率加权。介于 0 和 1 之间的值可进行部分加权。
dflfloat1.5边界框距离回归项的权重:检测头使用reg_max > 1时为分布焦点损失(DFL);不使用 DFL 的 YOLO26(reg_max: 1)则采用归一化边界框距离的 L1 损失。
posefloat12.0姿态估计模型中姿态损失的权重,影响模型对准确预测姿态关键点的重视程度。
kobjfloat1.0姿态估计模型中关键点目标置信度损失的权重,用于平衡检测置信度与姿态准确率。
rlefloat1.0姿态估计模型中残差对数似然估计损失的权重,会影响关键点定位的精度。
anglefloat1.0OBB 模型中角度损失的权重,会影响有向边界框角度预测的精度。
dlogfloat1.0深度估计模型中尺度不变对数(SILog)损失的权重,是影响深度准确率的主要项。
dgradfloat0.5深度估计模型中梯度损失的权重,用于惩罚深度边缘误差并促使表面边界更加清晰。
dlamfloat1.0深度估计模型中 SILog 损失的方差聚焦因子。1.0会使损失完全具有尺度不变性,而0.0会将其简化为普通的对数 RMSE。
nbsint64用于损失归一化的标称批次大小。
overlap_maskboolTrue确定训练时是否将所有对象掩码合并为单个掩码,或为每个对象分别保留掩码。合并时如果发生重叠,较小的掩码会叠加在较大的掩码之上。
mask_ratioint4分割掩码的下采样比例,会影响训练时所用掩码的分辨率,但不会改变预测掩码的分辨率。
dropoutfloat0.0分类任务中的正则化丢弃率,通过在训练期间随机丢弃单元来防止过拟合。
valboolTrue启用训练期间的验证,以便定期在单独的数据集上评估模型性能。
nmsbool,可选None选择用于每轮验证、检查点选择和提前停止的推理头。None 或 True使用带 NMS 的一对多头;False在可用时使用无 NMS 头。两种头都会保留各自的训练损失。
plotsboolTrue生成并保存训练和验证指标图,以及预测示例,直观呈现模型性能和学习进度。
compilebool 或 strFalse使用backend='inductor'启用 PyTorch 2.x torch.compile图编译。接受True → "default"、False → 禁用,或"default"、"reduce-overhead"、"max-autotune-no-cudagraphs"等字符串模式。如果不受支持,则会发出警告并回退到即时执行模式。
channels_lastboolNone训练卷积时使用 channels_last(NHWC)内存格式。None会在 PyTorch 1.11 或更高版本的 CUDA 上自动启用此格式,但 Windows 除外,因为实测速度更慢。False会禁用此格式,True则会显式启用此格式。CPU 或 MPS 上的训练始终使用 NCHW(True会被忽略,并发出警告)。
max_detint300训练验证期间每张图像的最大检测数。对于检测、分割、姿态和 OBB,仅当训练/验证集中带标签对象的最大数量超过默认值 300 时,最大检测数才会增加到该数量。其他值保持不变;超出限制时会触发警告。
批次大小设置说明

batch 参数有三种配置方式:

  • 固定批次大小:设置一个整数值(例如 batch=16),直接指定每个批次包含的图像数量。
  • 自动模式(60% GPU 显存):使用 batch=-1,自动调整批次大小,使 CUDA 显存利用率达到约 60%。
  • 按利用率比例自动调整:设置一个比例值(例如 batch=0.70),根据指定的 GPU 显存使用比例调整批次大小。
  • 显存不足时自动重试:如果第一轮训练期间发生 CUDA 显存溢出错误,训练器会自动将批次大小减半并重试(最多 3 次)。此功能仅适用于单 GPU 训练;多 GPU (DDP) 训练会立即报错。
  • 未找到合适值:如果没有候选批次大小能生成可用的性能分析结果,AutoBatch 会抛出明确的RuntimeError,而不会悄悄回退到无关的默认值。

数据增强设置和超参数#

数据增强技术通过增加训练数据的多样性,帮助模型更好地泛化到未见过的数据,因此对于提升 YOLO 模型的鲁棒性和性能至关重要。下表概述了各数据增强参数的用途和效果:

参数类型默认值支持的任务范围说明
hsv_hfloat0.015detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0按色轮的一定比例调整图像色调,增加颜色变化。帮助模型适应不同光照条件。对于 classify,仅在 auto_augment=None 时应用。
hsv_sfloat0.7detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0按一定比例改变图像饱和度,从而影响颜色强度。适用于模拟不同的环境条件。对于 classify,仅在 auto_augment=None 时应用。
hsv_vfloat0.4detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0按一定比例修改图像的明度(亮度),帮助模型在各种光照条件下保持良好表现。对于 classify,仅在 auto_augment=None 时应用。
degreesfloat0detect, segment, semantic, depth, pose, obb0.0 - 180在指定角度范围内随机旋转图像,提升模型识别不同朝向对象的能力。
translatefloat0.1detect, segment, semantic, depth, pose, obb0.0 - 1.0按图像尺寸的一定比例水平和垂直平移图像,帮助模型学会检测部分可见的对象。
scalefloat | tuple0.5detect, segment, semantic, depth, classify, pose, obb0 - 1,或显式指定的 (min, max) 元组(不适用于 classify)按增益系数缩放图像,模拟与摄像头距离不同的对象。
shearfloat0detect, segment, semantic, depth, pose, obb-180 - +180按指定角度剪切图像,模拟从不同角度观察对象的效果。
perspectivefloat0detect, segment, semantic, depth, pose, obb0.0 - 0.001对图像应用随机透视变换,增强模型理解 3D 空间中对象的能力。
flipudfloat0detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0按指定概率将图像上下翻转,增加数据变化性,同时不影响对象特征。
fliplrfloat0.5detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0按指定概率将图像左右翻转,适用于学习对称对象并提高数据集多样性。
bgrfloat0detect, segment, semantic, depth, pose, obb0.0 - 1.0按指定概率将图像通道从 RGB 翻转为 BGR,适用于提升模型对通道顺序错误的鲁棒性。
mosaicfloat1detect, segment, semantic, pose, obb0.0 - 1.0将四张训练图像合并为一张,模拟不同的场景构成和对象交互。对复杂场景理解非常有效。
mixupfloat0detect, segment, semantic, pose, obb0.0 - 1.0混合两张图像及其标签,生成一张合成图像。通过引入标签噪声和视觉变化,提升模型的泛化能力。
cutmixfloat0detect, segment, semantic, pose, obb0.0 - 1.0合并两张图像的部分区域,形成局部混合,同时保留清晰的区域边界。通过构造遮挡场景增强模型鲁棒性。
copy_pastefloat0segment, semantic, obb0.0 - 1.0粘贴符合条件对象的比例;flip 会在图像内镜像这些对象,而 mixup 还会将此值用作跨图像应用概率。
copy_paste_modestrflipsegment, semantic, obb-指定要使用的 copy-paste 策略。选项包括 'flip' 和 'mixup'。
auto_augmentstrrandaugmentclassify-应用预定义的增强策略('randaugment'、'autoaugment' 或 'augmix'),通过增加视觉多样性来提升模型性能。
erasingfloat0.4classify0.0 - 1.0训练期间随机擦除图像区域,促使模型关注不那么明显的特征。
augmentationslistNonedetect, 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启用训练检查点和最终模型权重的保存功能。

    如需深入了解训练设置,请参阅训练设置章节。

评论