跳至内容

模型培训Ultralytics YOLO

Ultralytics YOLO 生态系统和集成

导言

训练深度学习模型包括向其提供数据并调整其参数,使其能够做出准确的预测。Ultralytics YOLO11 中的 "训练 "模式旨在充分利用现代硬件能力,有效、高效地训练物体检测模型。本指南旨在介绍使用 YOLO11 的强大功能集开始训练自己的模型所需的所有细节。



观看: 如何在Google Colab 中的自定义数据集上训练YOLO 模型。

为什么选择Ultralytics YOLO 进行培训?

以下是选择 YOLO11 的火车模式的一些令人信服的理由:

  • 效率:充分利用硬件,无论您是使用单个GPU 设置还是在多个 GPU 之间扩展。
  • 多功能性:除 COCO、VOC 和 ImageNet 等现成数据集外,还可在自定义数据集上进行训练。
  • 用户友好型:简单而强大的CLI 和Python 界面,提供直接的培训体验。
  • 超参数灵活性:可定制的超参数范围广泛,可对模型性能进行微调。

列车模式的主要功能

以下是 YOLO11 的列车模式的一些显著特点:

  • 自动下载数据集:首次使用时会自动下载 COCO、VOC 和 ImageNet 等标准数据集。
  • 支持多个GPU :在多个 GPU 上无缝扩展您的培训工作,以加快进程。
  • 超参数配置:通过 YAML 配置文件或CLI 参数修改超参数的选项。
  • 可视化和监控:实时跟踪培训指标和可视化学习过程,以获得更好的洞察力。

提示

  • YOLO11 数据集(如 COCO、VOC、ImageNet 和许多其他数据集)在首次使用时会自动下载,即 yolo train data=coco.yaml

使用示例

在 COCO8 数据集上对 YOLO11n 进行 100 次训练 纪元 图像大小为 640。可以使用 device 参数。如果没有传递参数GPU device=0 将被使用,否则 device='cpu' 将被使用。有关训练参数的完整列表,请参阅下面的 "参数 "部分。

单一GPU 和CPU 培训示例

设备自动确定。如果GPU 可用,则将使用它,否则培训将从CPU 开始。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.yaml")  # build a new model from YAML
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo11n.yaml").load("yolo11n.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolo11n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolo11n.yaml pretrained=yolo11n.pt epochs=100 imgsz=640

多种GPU 培训

通过在多个 GPU 上分配训练负载,多GPU 训练可以更有效地利用可用硬件资源。该功能可通过Python API 和命令行界面使用。要启用多GPU 训练,请指定要使用的GPU 设备 ID。

多个GPU 培训示例

要使用 2 个 GPU(CUDA 设备 0 和 1)进行训练,请使用以下命令。根据需要扩展到其他 GPU。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=0,1

苹果硅MPS 培训

Ultralytics YOLO 模型中集成了对苹果硅芯片的支持,现在可以在使用强大的金属性能着色器 (MPS) 框架的设备上训练模型。MPS 提供了在苹果定制芯片上执行计算和图像处理任务的高性能方法。

要在苹果硅芯片上启用训练,应在启动训练程序时将 "mps"指定为设备。下面是一个示例,说明如何在Python 和通过命令行执行此操作:

MPS 培训实例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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")
# Start training from a pretrained *.pt model using MPS
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=mps

在充分利用苹果硅芯片计算能力的同时,这还能更高效地处理训练任务。有关更详细的指导和高级配置选项,请参阅PyTorch MPS 文档

恢复中断的培训

在使用深度学习模型时,从先前保存的状态恢复训练是一项至关重要的功能。这在各种情况下都能派上用场,比如当训练过程意外中断时,或者当你希望用新数据或更多的历时继续训练模型时。

恢复训练时,Ultralytics YOLO 会加载上次保存模型的权重,并恢复优化器状态、学习率调度器和历时编号。这样,您就可以从上次中断的地方无缝地继续训练过程。

Ultralytics YOLO 您可以通过设置 resume 参数 True 在调用 train 方法的路径,并指定 .pt 文件,其中包含经过部分训练的模型权重。

下面举例说明如何使用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 an interrupted training
yolo train resume model=path/to/last.pt

通过设置 resume=True,"...... train 函数将使用存储在 "path/to/last.pt "文件中的状态,从中断处继续训练。如果 resume 参数被省略或设置为 False,"...... train 功能将开始新的培训课程。

请记住,默认情况下,检查点会在每个纪元结束时保存,或者使用 save_period 参数,因此您必须至少完成一个纪元才能恢复训练运行。

列车设置

YOLO 模型的训练设置包括训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。关键的训练设置包括批量大小、学习率、动量和权重衰减。此外,优化器、损失函数和训练数据集组成的选择也会影响训练过程。对这些设置进行仔细的调整和实验对于优化性能至关重要。

论据默认值说明
modelNone指定用于训练的模型文件。接受指向 .pt 预训练模型或 .yaml 配置文件。对于定义模型结构或初始化权重至关重要。
dataNone数据集配置文件的路径(例如 coco8.yaml).该文件包含特定于数据集的参数,包括训练和 验证数据类名和类数。
epochs100训练历元总数。每个历元代表对整个数据集进行一次完整的训练。调整该值会影响训练时间和模型性能。
timeNone最长训练时间(小时)。如果设置了该值,则会覆盖 epochs 参数,允许训练在指定的持续时间后自动停止。对于时间有限的训练场景非常有用。
patience100在验证指标没有改善的情况下,提前停止训练所需的历元数。当性能趋于平稳时停止训练,有助于防止过度拟合
batch16批量大小有三种模式: 设置为整数(如 batch=16)、自动模式,内存利用率为 60%GPU (batch=-1),或指定利用率的自动模式 (batch=0.70).
imgsz640用于训练的目标图像尺寸。所有图像在输入模型前都会被调整到这一尺寸。影响模型精度和计算复杂度。
saveTrue可保存训练检查点和最终模型权重。这对恢复训练或模型部署非常有用。
save_period-1保存模型检查点的频率,以 epochs 为单位。值为-1 时将禁用此功能。该功能适用于在长时间训练过程中保存临时模型。
cacheFalse在内存中缓存数据集图像 (True/ram)、磁盘 (disk),或禁用它 (False).通过减少磁盘 I/O 提高训练速度,但代价是增加内存使用量。
deviceNone指定用于训练的计算设备:单个GPU (device=0)、多个 GPU (device=0,1)、CPU (device=cpu) 或MPS for Apple silicon (device=mps).
workers8加载数据的工作线程数(每 RANK 如果多GPU 训练)。影响数据预处理和输入模型的速度,尤其适用于多GPU 设置。
projectNone保存训练结果的项目目录名称。允许有组织地存储不同的实验。
nameNone训练运行的名称。用于在项目文件夹内创建一个子目录,存放训练日志和输出结果。
exist_okFalse如果为 True,则允许覆盖现有的项目/名称目录。这对迭代实验非常有用,无需手动清除之前的输出。
pretrainedTrue决定是否从预处理模型开始训练。可以是布尔值,也可以是加载权重的特定模型的字符串路径。提高训练效率和模型性能。
optimizer'auto'为培训选择优化器。选项包括 SGD, Adam, AdamW, NAdam, RAdam, RMSProp 等,或 auto 用于根据模型配置进行自动选择。影响收敛速度和稳定性
seed0为训练设置随机种子,确保在相同配置下运行的结果具有可重复性。
deterministicTrue强制使用确定性算法,确保可重复性,但由于对非确定性算法的限制,可能会影响性能和速度。
single_clsFalse在训练过程中将多类数据集中的所有类别视为单一类别。适用于二元分类任务,或侧重于对象的存在而非分类。
rectFalse可进行矩形训练,优化批次组成以减少填充。这可以提高效率和速度,但可能会影响模型的准确性。
cos_lrFalse利用余弦学习率调度器,根据历时的余弦曲线调整学习率。这有助于管理学习率,实现更好的收敛。
close_mosaic10在训练完成前禁用最后 N 个历元的马赛克数据增强以稳定训练。设置为 0 则禁用此功能。
resumeFalse从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和历时计数,无缝继续训练。
ampTrue启用自动混合精度(AMP) 训练,可减少内存使用量并加快训练速度,同时将对精度的影响降至最低。
fraction1.0指定用于训练的数据集的部分。允许在完整数据集的子集上进行训练,这对实验或资源有限的情况非常有用。
profileFalse在训练过程中,可对ONNX 和TensorRT 速度进行剖析,有助于优化模型部署。
freezeNone冻结模型的前 N 层或按索引指定的层,从而减少可训练参数的数量。这对微调或迁移学习非常有用。
lr00.01初始学习率(即 SGD=1E-2, Adam=1E-3) .调整这个值对优化过程至关重要,会影响模型权重的更新速度。
lrf0.01最终学习率占初始学习率的百分比 = (lr0 * lrf),与调度程序结合使用,随着时间的推移调整学习率。
momentum0.937用于 SGD 的动量因子,或用于Adam 优化器的 beta1,用于将过去的梯度纳入当前更新。
weight_decay0.0005L2正则化项,对大权重进行惩罚,以防止过度拟合。
warmup_epochs3.0学习率预热的历元数,学习率从低值逐渐增加到初始学习率,以在早期稳定训练。
warmup_momentum0.8热身阶段的初始动力,在热身期间逐渐调整到设定动力。
warmup_bias_lr0.1热身阶段的偏置参数学习率,有助于稳定初始历元的模型训练。
box7.5损失函数中边框损失部分的权重,影响对准确预测边框坐标的重视程度。
cls0.5分类损失在总损失函数中的权重,影响正确类别预测相对于其他部分的重要性。
dfl1.5分布焦点损失权重,在某些YOLO 版本中用于精细分类。
pose12.0姿态损失在姿态估计模型中的权重,影响准确预测姿态关键点的重点。
kobj2.0姿态估计模型中关键点对象性损失的权重,在检测可信度和姿态精度之间取得平衡。
label_smoothing0.0应用标签平滑,将硬标签软化为目标标签和标签均匀分布的混合标签,可以提高泛化效果。
nbs64用于损耗正常化的标称批量大小。
overlap_maskTrue决定是将对象遮罩合并为一个遮罩进行训练,还是将每个对象的遮罩分开。在重叠的情况下,较小的掩码会在合并时覆盖在较大的掩码之上。
mask_ratio4分割掩码的下采样率,影响训练时使用的掩码分辨率。
dropout0.0分类任务中正则化的丢弃率,通过在训练过程中随机省略单元来防止过拟合。
valTrue可在训练过程中进行验证,以便在单独的数据集上对模型性能进行定期评估。
plotsFalse生成并保存训练和验证指标图以及预测示例图,以便直观地了解模型性能和学习进度。

关于批量大小设置的说明

"(《世界人权宣言》) batch 参数有三种配置方式:

  • 固定批量大小:设置整数值(例如, batch=16),直接指定每批图像的数量。
  • 自动模式(60%GPU 内存):用 batch=-1 以自动调整批量大小,使CUDA 内存利用率达到约 60%。
  • 带利用率分数的自动模式:设置分数值(例如, batch=0.70) 可根据GPU 内存使用量的指定部分调整批量大小。

增强设置和超参数

增强技术通过在训练数据中引入可变性,帮助模型更好地泛化到未见数据中,对提高YOLO 模型的稳健性和性能至关重要。下表概述了每种增强参数的目的和效果:

论据类型默认值范围说明
hsv_hfloat0.0150.0 - 1.0通过色轮的一部分来调整图像的色调,从而引入色彩的可变性。帮助模型在不同的光照条件下通用。
hsv_sfloat0.70.0 - 1.0改变图像饱和度的一部分,影响色彩的强度。可用于模拟不同的环境条件。
hsv_vfloat0.40.0 - 1.0将图像的数值(亮度)修改一部分,帮助模型在不同的光照条件下表现良好。
degreesfloat0.0-180 - +180在指定的度数范围内随机旋转图像,提高模型识别不同方向物体的能力。
translatefloat0.10.0 - 1.0以图像大小的一小部分水平和垂直平移图像,帮助学习检测部分可见的物体。
scalefloat0.5>=0.0通过增益因子缩放图像,模拟物体与摄像机的不同距离。
shearfloat0.0-180 - +180按指定角度剪切图像,模拟从不同角度观察物体的效果。
perspectivefloat0.00.0 - 0.001对图像进行随机透视变换,增强模型理解三维空间中物体的能力。
flipudfloat0.00.0 - 1.0以指定的概率将图像翻转过来,在不影响物体特征的情况下增加数据的可变性。
fliplrfloat0.50.0 - 1.0以指定的概率将图像从左到右翻转,这对学习对称物体和增加数据集多样性非常有用。
bgrfloat0.00.0 - 1.0以指定的概率将图像通道从 RGB 翻转到 BGR,用于提高对错误通道排序的稳健性。
mosaicfloat1.00.0 - 1.0将四幅训练图像合成一幅,模拟不同的场景构成和物体互动。对复杂场景的理解非常有效。
mixupfloat0.00.0 - 1.0混合两幅图像及其标签,创建合成图像。通过引入标签噪声和视觉变化,增强模型的泛化能力。
copy_pastefloat0.00.0 - 1.0从一幅图像中复制物体并粘贴到另一幅图像上,用于增加物体实例和学习物体遮挡。
copy_paste_modestrflip-在 ( )选项中选择复制-粘贴增强方法。"flip", "mixup").
auto_augmentstrrandaugment-自动应用预定义的增强策略 (randaugment, autoaugment, augmix),通过丰富视觉特征来优化分类任务。
erasingfloat0.40.0 - 0.9在分类训练中随机擦除部分图像,鼓励模型将识别重点放在不明显的特征上。
crop_fractionfloat1.00.1 - 1.0将分类图像裁剪为其大小的一小部分,以突出中心特征并适应对象比例,减少背景干扰。

这些设置可根据数据集和手头任务的具体要求进行调整。试验不同的值有助于找到最佳的增强策略,从而获得最佳的模型性能。

信息

有关增强训练行动的更多信息,请参阅参考资料部分

记录

在训练 YOLO11 模型的过程中,您可能会发现跟踪模型在一段时间内的表现很有价值。这就是日志发挥作用的地方。Ultralytics'YOLO 支持三种类型的日志记录器:Comet 、ClearML 和 TensorBoard。

要使用记录仪,请从上面代码片段的下拉菜单中选择并运行。所选记录仪将被安装和初始化。

Comet

Comet是一个允许数据科学家和开发人员跟踪、比较、解释和优化实验与模型的平台。它提供实时度量、代码差异和超参数跟踪等功能。

要使用Comet :

示例

# pip install comet_ml
import comet_ml

comet_ml.init()

请记住在Comet 网站上登录您的账户并获取 API 密钥。您需要将此添加到环境变量或脚本中,以便记录实验日志。

ClearML

ClearML是一个开源平台,可自动跟踪实验并帮助高效共享资源。它旨在帮助团队更高效地管理、执行和复制他们的 ML 工作。

要使用ClearML :

示例

# pip install clearml
import clearml

clearml.browser_login()

运行该脚本后,您需要在浏览器上登录ClearML 账户并验证您的会话。

张量板

TensorBoard是一款可视化工具包,适用于 TensorFlow.通过它,您可以将TensorFlow 图形可视化,绘制有关图形执行情况的量化指标,并显示通过图形的图像等附加数据。

Google Colab 中使用 TensorBoard:

示例

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

要在本地使用 TensorBoard,请运行以下命令并在http://localhost:6006/ 上查看结果。

示例

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

这将加载 TensorBoard 并将其导向保存训练日志的目录。

设置好记录仪后,您就可以开始模型训练了。所有训练指标都将自动记录在您选择的平台上,您可以访问这些日志来监控模型在一段时间内的表现,比较不同的模型,并找出需要改进的地方。

常见问题

如何使用Ultralytics YOLO11 训练物体检测模型?

要使用Ultralytics YOLO11 训练对象检测模型,可以使用Python API 或CLI 。以下是两者的示例:

单一GPU 和CPU 培训示例

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640

更多详情,请参阅列车设置部分。

Ultralytics YOLO11 的列车模式有哪些主要功能?

Ultralytics YOLO11 列车模式的主要功能包括

  • 自动数据集下载:自动下载 COCO、VOC 和 ImageNet 等标准数据集。
  • 支持多个GPU :在多个 GPU 上进行扩展训练,以加快处理速度。
  • 超参数配置:通过 YAML 文件或CLI 参数自定义超参数。
  • 可视化和监控:实时跟踪培训指标,提高洞察力。

这些功能使培训更高效,并可根据您的需求进行定制。更多详情,请参阅 "训练模式的主要功能"部分。

如何从Ultralytics YOLO11 中中断的课程恢复训练?

要从中断的训练中恢复训练,请设置 resume 参数 True 并指定最后保存的检查点的路径。

简历培训范例

from ultralytics import YOLO

# Load the partially trained model
model = YOLO("path/to/last.pt")

# Resume training
results = model.train(resume=True)
yolo train resume model=path/to/last.pt

更多信息请查看 "恢复中断的培训"部分。

我可以在苹果硅芯片上训练 YOLO11 模型吗?

是,Ultralytics YOLO11 支持在使用金属性能着色器 (MPS) 框架的苹果硅芯片上进行培训。指定 "mps"为训练设备。

MPS 培训实例

from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo11n.pt")

# Train the model on Apple silicon chip (M1/M2/M3/M4)
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=mps

有关详细信息,请参阅Apple SiliconMPS 培训部分。

常见的培训设置有哪些?

Ultralytics YOLO11 允许您通过参数配置各种训练设置,如批量大小、学习率、epochs 等。下面是简要概述:

论据默认值说明
modelNone用于训练的模型文件的路径。
dataNone数据集配置文件的路径(例如 coco8.yaml).
epochs100训练历元总数。
batch16批量大小,可调整为整数或自动模式。
imgsz640用于训练的目标图像大小。
deviceNone用于训练的计算设备,如 cpu, 0, 0,1mps.
saveTrue可保存训练检查点和最终模型权重。

有关训练设置的深入指南,请查看 "训练设置"部分。

📅创建于 1 年前 ✏️已更新 16 天前

评论