Skip to content

使用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参数修改超参数的选项。
  • 可视化和监控: 实时跟踪训练指标和学习过程的可视化,以获得更好的洞察。

Tip

  • YOLO11数据集如COCO、VOC、ImageNet等在首次使用时自动下载,即yolo train data=coco.yaml

使用示例

在COCO8数据集上训练YOLO11n模型100个epoch,图像大小为640。训练设备可以通过device参数指定。如果没有传递参数,将使用可用的GPU device=0,否则将使用device='cpu'。请参阅下面的参数部分,了解完整的训练参数列表。

单GPU和CPU训练示例

设备是自动确定的。如果有GPU可用,则将使用它,否则训练将在CPU上开始。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo11n.yaml")  # 从YAML构建新模型
model = YOLO("yolo11n.pt")  # 加载预训练模型(推荐用于训练)
model = YOLO("yolo11n.yaml").load("yolo11n.pt")  # 从YAML构建并转移权重

# 训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# 从YAML构建新模型并开始从头训练
yolo detect train data=coco8.yaml model=yolo11n.yaml epochs=100 imgsz=640

# 从预训练的*.pt模型开始训练
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640

# 从YAML构建新模型,转移预训练权重并开始训练
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。

```python from ultralytics import YOLO

加载模型

```python model = YOLO("yolo11n.pt") # 加载预训练模型(推荐用于训练)

使用2个GPU训练模型

results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1]) ```

```bash

从预训练的*.pt模型开始训练,使用GPU 0和1

yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=0,1 ```

Apple M1和M2 MPS训练

随着Ultralytics YOLO模型对Apple M1和M2芯片的支持,现在可以在使用Metal Performance Shaders(MPS)框架的设备上训练您的模型。MPS提供了一种高性能的方式,在Apple的自定义硅芯片上执行计算和图像处理任务。

要在Apple M1和M2芯片上启用训练,您应在启动训练过程时将'mps'指定为设备。以下是如何在Python和命令行中执行此操作的示例:

MPS训练示例

```python from ultralytics import YOLO

加载模型

model = YOLO("yolo11n.pt") # 加载预训练模型(推荐用于训练)

使用MPS训练模型

results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps") ```

```bash

从预训练的*.pt模型开始训练,使用MPS

yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=mps ```

在利用M1/M2芯片的计算能力的同时,这使得训练任务的处理更加高效。有关更详细的指导和高级配置选项,请参阅PyTorch MPS文档

恢复中断的训练

从先前保存的状态恢复训练是处理深度学习模型时的一个关键功能。这在各种情况下非常有用,例如当训练过程意外中断时,或者当您希望使用新数据或更多时期继续训练模型时。

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

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

以下是如何使用Python和命令行恢复中断训练的示例:

恢复训练示例

```python from ultralytics import YOLO

加载模型

model = YOLO("path/to/last.pt") # 加载部分训练的模型

恢复训练

results = model.train(resume=True) ```

```bash

恢复中断的训练

yolo train resume model=path/to/last.pt ```

通过设置resume=Truetrain函数将从上次中断的地方继续训练,使用存储在'path/to/last.pt'文件中的状态。如果省略resume参数或设置为Falsetrain函数将开始一个新的训练会话。

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

训练设置

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

参数 默认值 描述
model None 指定用于训练的模型文件。接受一个指向 .pt 预训练模型或 .yaml 配置文件的路径。对于定义模型结构或初始化权重是必不可少的。
data None 数据集配置文件的路径(例如,coco8.yaml)。该文件包含数据集特定的参数,包括训练和验证数据的路径、类别名称和类别数量。
epochs 100 训练的总轮数。每个轮次代表对整个数据集的一次完整遍历。调整此值会影响训练时长和模型性能。
time None 最大训练时间,以小时为单位。如果设置,此参数将覆盖 epochs 参数,允许训练在指定时长后自动停止。适用于时间受限的训练场景。
patience 100 在验证指标没有改善的情况下等待的轮次数,之后将提前停止训练。通过在性能停滞时停止训练,有助于防止过拟合
batch 16 批量大小,有三种模式:设置为整数(例如,batch=16),自动模式以60%的GPU内存利用率(batch=-1),或指定利用率分数的自动模式(batch=0.70)。
imgsz 640 训练的目标图像尺寸。所有图像在输入模型前都会被调整为该尺寸。影响模型的准确性和计算复杂度。
save True 启用保存训练检查点和最终模型权重。对于恢复训练或模型部署很有用。
save_period -1 保存模型检查点的频率,以轮次为单位。值为-1时禁用此功能。对于在长时间训练过程中保存中间模型很有用。
cache False 启用数据集图像的缓存,可以选择内存缓存(True/ram)、磁盘缓存(disk)或禁用缓存(False)。通过减少磁盘I/O来提高训练速度,但会增加内存使用量。
device None 指定用于训练的计算设备:单个GPU(device=0)、多个GPU(device=0,1)、CPU(device=cpu)或适用于Apple硅芯片的MPS(device=mps)。
workers 8 数据加载的辅助线程数(如果是多GPU训练,则为每个RANK)。影响数据预处理和输入模型的速度,特别是在多GPU设置中特别有用。
project None 保存训练输出的项目目录名称。便于组织不同实验的存储。
name None 训练运行的名称。用于在项目文件夹内创建子目录,训练日志和输出将存储在该子目录中。
exist_ok False 如果为True,允许覆盖现有的项目/名称目录。对于无需手动清除先前输出的迭代实验很有用。
pretrained True 确定是否从预训练模型开始训练。可以是布尔值或指向特定模型的字符串路径,以加载权重。提高训练效率和模型性能。
optimizer 'auto' 训练时选择的优化器。选项包括 SGDAdamAdamWNAdamRAdamRMSProp 等,或 auto 根据模型配置自动选择。影响收敛速度和稳定性。
verbose False 在训练期间启用详细输出,提供详细的日志和进度更新。有助于调试和密切监控训练过程。
seed 0 设置训练的随机种子,确保在相同配置下运行的结果可重复。
deterministic True 强制使用确定性算法,确保结果可重复,但由于限制了非确定性算法的使用,可能会影响性能和速度。
single_cls False 在训练期间将多类数据集中的所有类视为单个类。适用于二分类任务或当关注对象存在而非分类时。
rect False 启用矩形训练,优化批次组成以最小化填充。可以提高效率和速度,但可能会影响模型准确性。
cos_lr False 使用余弦学习率调度器,在epochs期间根据余弦曲线调整学习率。有助于更好地管理学习率以实现更好的收敛。
close_mosaic 10 在最后N个epochs禁用马赛克数据增强以在完成前稳定训练。设置为0禁用此功能。
resume False 从最后一个保存的检查点恢复训练。自动加载模型权重、优化器状态和epoch计数,无缝继续训练。
amp True 启用自动混合精度(AMP)训练,减少内存使用并可能通过最小化对准确性的影响来加速训练。
fraction 1.0 指定用于训练的数据集的比例。允许在完整数据集的子集上进行训练,适用于实验或资源有限时。
profile False 在训练期间启用ONNX和TensorRT速度的分析,有助于优化模型部署。
freeze None 冻结模型的前N层或通过索引指定的层,减少可训练参数的数量。适用于微调或迁移学习
lr0 0.01 初始学习率(即 SGD=1E-2Adam=1E-3)。调整此值对优化过程至关重要,影响模型权重更新的速度。
lrf 0.01 最终学习率作为初始率的分数 = (lr0 * lrf),与调度器结合使用以随时间调整学习率。
momentum 0.937 SGD的动量因子或Adam优化器的beta1,影响当前更新中过去梯度的整合。
weight_decay 0.0005 L2 正则化项,惩罚大权重以防止过拟合。
warmup_epochs 3.0 学习率预热期数,逐渐将学习率从低值增加到初始学习率,以在训练初期稳定训练。
warmup_momentum 0.8 预热阶段的初始动量,在预热期间逐渐调整到设定的动量。
warmup_bias_lr 0.1 预热阶段偏置参数的学习率,有助于在初始时期稳定模型训练。
box 7.5 损失函数中边界框损失分量的权重,影响对边界框坐标准确预测的重视程度。
cls 0.5 总损失函数中分类损失的权重,影响相对于其他分量的正确类别预测的重要性。
dfl 1.5 分布焦点损失的权重,用于某些YOLO版本的细粒度分类。
pose 12.0 姿态估计模型中姿态损失的权重,影响对准确预测姿态关键点的重视程度。
kobj 2.0 姿态估计模型中关键点目标性损失的权重,平衡检测置信度与姿态准确性。
label_smoothing 0.0 应用标签平滑,将硬标签软化为目标标签与均匀分布标签的混合,可以改善泛化能力。
nbs 64 损失归一化的名义批次大小。
overlap_mask True 确定在训练期间分割掩码是否应重叠,适用于实例分割任务。
mask_ratio 4 分割掩码的下采样比率,影响训练期间使用的掩码分辨率。
dropout 0.0 分类任务中用于正则化的丢弃率,通过在训练期间随机忽略单元来防止过拟合。
val True 在训练期间启用验证,允许在单独的数据集上定期评估模型性能。
plots False 生成并保存训练和验证指标的图表,以及预测示例,提供对模型性能和学习进展的视觉洞察。

关于批量大小设置的说明

batch参数可以通过三种方式配置:

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

增强设置和超参数

增强技术通过在训练数据中引入多样性,对于提升YOLO模型的鲁棒性和性能至关重要,有助于模型更好地泛化到未见过的数据。下表概述了每个增强参数的目的和效果:

参数 类型 默认值 范围 描述
hsv_h float 0.015 0.0 - 1.0 通过色轮的一定比例调整图像的色调,引入颜色变化。有助于模型在不同光照条件下泛化。
hsv_s float 0.7 0.0 - 1.0 通过一定比例改变图像的饱和度,影响颜色的强度。用于模拟不同的环境条件。
hsv_v float 0.4 0.0 - 1.0 通过一定比例修改图像的亮度,帮助模型在各种光照条件下表现良好。
degrees float 0.0 -180 - +180 在指定角度范围内随机旋转图像,提高模型识别不同方向物体的能力。
translate float 0.1 0.0 - 1.0 通过图像尺寸的一定比例水平和垂直平移图像,有助于学习检测部分可见的物体。
scale float 0.5 >=0.0 通过增益因子缩放图像,模拟物体与摄像机的不同距离。
shear float 0.0 -180 - +180 通过指定角度剪切图像,模拟物体从不同角度观看的效果。
perspective float 0.0 0.0 - 0.001 对图像应用随机透视变换,增强模型理解3D空间中物体的能力。
flipud float 0.0 0.0 - 1.0 以指定概率上下翻转图像,增加数据多样性而不影响物体的特征。
fliplr float 0.5 0.0 - 1.0 以指定概率左右翻转图像,有助于学习对称物体并增加数据集的多样性。
bgr float 0.0 0.0 - 1.0 以指定概率将图像通道从RGB翻转为BGR,有助于增加对错误通道顺序的鲁棒性。
mosaic float 1.0 0.0 - 1.0 将四张训练图像组合成一张,模拟不同的场景组合和物体交互。对复杂场景理解非常有效。
mixup float 0.0 0.0 - 1.0 混合两张图像及其标签,创建合成图像。通过引入标签噪声和视觉多样性,增强模型的泛化能力。
copy_paste float 0.0 0.0 - 1.0 从一张图像中复制物体并粘贴到另一张图像上,有助于增加物体实例并学习物体遮挡。
copy_paste_mode str flip - 选择Copy-Paste增强方法,选项包括("flip", "mixup")。
auto_augment str randaugment - 自动应用预定义的增强策略(randaugment, autoaugment, augmix),通过多样化视觉特征优化分类任务。
erasing float 0.4 0.0 - 0.9 在分类训练期间随机擦除图像的一部分,鼓励模型关注不太明显的特征以进行识别。
crop_fraction float 1.0 0.1 - 1.0 将分类图像裁剪到其尺寸的一定比例,以强调中心特征并适应物体尺度,减少背景干扰。

这些设置可以根据当前数据集和任务的具体需求进行调整。通过尝试不同的值,可以帮助找到最优的增强策略,从而达到最佳的模型性能。

Info

有关训练增强操作的更多信息,请参阅参考部分

日志记录

在训练YOLO11模型时,您可能会发现跟踪模型随时间的表现非常有价值。这就是日志记录的作用。Ultralytics的YOLO支持三种类型的日志记录器——Comet、ClearML和TensorBoard。

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

Comet

Comet是一个平台,允许数据科学家和开发者跟踪、比较、解释和优化实验和模型。它提供了实时指标、代码差异和超参数跟踪等功能。

要使用Comet:

Example

```python

pip install comet_ml

import comet_ml

comet_ml.init() ```

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

ClearML

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

要使用ClearML:

Example

```python

pip install clearml

import clearml

clearml.browser_login() ```

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

TensorBoard

TensorBoardTensorFlow的可视化工具包。它允许您可视化TensorFlow图,绘制关于图执行的定量指标,并显示通过它的其他数据,如图像。

要在Google Colab中使用TensorBoard:

Example

bash load_ext tensorboard tensorboard --logdir ultralytics/runs # 替换为'runs'目录

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

Example

bash tensorboard --logdir ultralytics/runs # 替换为'runs'目录

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

设置好日志记录器后,您可以继续进行模型训练。所有训练指标将自动记录在您选择的平台上,您可以访问这些日志以监控模型随时间的表现,比较不同模型,并识别改进的领域。

常见问题

如何使用Ultralytics YOLO11训练一个目标检测模型?

要使用Ultralytics YOLO11训练一个目标检测模型,您可以使用Python API或CLI。以下是两者的示例:

单GPU和CPU训练示例

```python from ultralytics import YOLO

加载模型

model = YOLO("yolo11n.pt") # 加载预训练模型(推荐用于训练)

训练模型

results = model.train(data="coco8.yaml", epochs=100, imgsz=640) ```

bash 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,并指定到最后保存的检查点的路径。

恢复训练示例

```python from ultralytics import YOLO

加载部分训练的模型

model = YOLO("path/to/last.pt")

恢复训练

results = model.train(resume=True) ```

bash yolo train resume model=path/to/last.pt

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

我可以在Apple M1和M2芯片上训练YOLO11模型吗?

是的,Ultralytics YOLO11支持在Apple M1和M2芯片上利用Metal Performance Shaders(MPS)框架进行训练。请将'mps'指定为您的训练设备。

MPS训练示例

```python from ultralytics import YOLO

加载预训练模型

model = YOLO("yolo11n.pt")

在M1/M2芯片上训练模型

results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps") ```

bash yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=mps

更多详情,请参阅Apple M1和M2 MPS训练部分。

常见的训练设置有哪些,我该如何配置它们?

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

参数 默认值 描述
model None 用于训练的模型文件路径。
data None 数据集配置文件路径(例如,coco8.yaml)。
epochs 100 训练的总周期数。
batch 16 批量大小,可调整为整数或自动模式。
imgsz 640 训练的目标图像大小。
device None 用于训练的计算设备,如cpu00,1mps
save True 启用保存训练检查点和最终模型权重。

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


📅 Created 11 months ago ✏️ Updated 13 days ago

Comments