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'。有关完整的训练参数列表,请参阅下面的参数部分。

Windows多进程错误

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

单GPU和CPU训练示例

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

from ultralytics import YOLO

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

# 使用2个GPU训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# 从预训练的*.pt模型开始训练,使用GPU 0和1
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=0,1

Apple Silicon MPS训练

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

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

MPS训练示例

from ultralytics import YOLO

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

# 使用MPS训练模型
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")
# 从预训练的*.pt模型开始使用MPS进行训练
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=mps

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

恢复中断的训练

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

恢复训练时,Ultralytics YOLO会加载最后保存模型的权重,并恢复优化器状态、学习率调度器和epoch数。这允许您从中断的地方无缝地继续训练过程。

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

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

恢复训练示例

from ultralytics import YOLO

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

# 恢复训练
results = model.train(resume=True)
# 恢复中断的训练
yolo train resume model=path/to/last.pt

通过设置resume=True,train函数将使用存储在'path/to/last.pt'文件中的状态继续训练。如果省略resume参数或将其设置为False,train函数将开始新的训练会话。

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

训练设置

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

参数 类型 默认值 描述
model str None 指定用于训练的模型文件。接受一个路径,可以是.ptI need to translate the phrase "pretrained model or a" into Simplified Chinese while maintaining the original format.

预训练模型或一个.yaml配置文件。对于定义模型结构或初始化权重至关重要。 | data | str | NoneI notice that the content you've provided appears to be incomplete. It seems to be a fragment of a sentence or instruction about a path to a dataset configuration file, but it cuts off after "e.g.,".

Would you like me to translate this fragment into Simplified Chinese, or would you prefer to provide the complete text for translation?coco8.yaml这个文件包含特定于数据集的参数,包括训练路径和validation dataI need to translate the given text fragment to Simplified Chinese while preserving its format and meaning.

,类名和类的数量。 | | epochs | int | 100I'll translate the provided content into Simplified Chinese while maintaining the original format:

| 训练的总轮数。每个[epoch](https://www.ultralytics.com/glossary/epoch)表示对整个数据集的一次完整遍历。调整这个值可能会影响训练时间和模型性能。

| time | float | None| 最大训练时间(小时)。如果设置,这将覆盖epochs参数,允许训练在指定的持续时间后自动停止。适用于时间受限的训练场景。 | patience | int | 100| 在验证指标没有改善的情况下等待多少个训练周期后提前停止训练。有助于防止overfitting通过在性能达到平稳状态时停止训练。 | | batch | int | 16 | Batch size, 有三种模式:设置为整数(例如,batch=16I'll translate the text to Simplified Chinese while maintaining the original format:

)、60% GPU 内存利用率的自动模式(batch=-1I'll translate the given text into Simplified Chinese while preserving the original format and meaning:

),或带有指定利用率分数的自动模式(batch=0.70). | | imgsz | int或者list | 640| 训练的目标图像尺寸。所有图像在输入模型前都会被调整为此尺寸。影响模型accuracy和计算复杂性。 | save | bool | True| 支持保存训练检查点和最终模型权重。对于恢复训练或model deployment. | | save_period | int | -1| 保存模型检查点的频率,以周期(epochs)为单位指定。值为-1时禁用此功能。在长时间训练过程中保存中间模型时很有用。 | | cache | bool | False| 启用数据集图像在内存中的缓存 (True/ramI need to translate the text fragment "), on disk (" into Simplified Chinese while maintaining the original format.

Here's the translation:

), 在磁盘上 (diskI notice that the text you've provided appears to be a fragment rather than a complete sentence or paragraph. It seems to be part of a larger text describing options where something either "disables it" or some other action represented by the closing parenthesis at the beginning.

Without more context, I'll translate just this fragment as accurately as possible:

),或禁用它 (False). 通过减少磁盘I/O来提高训练速度,但代价是增加内存使用量。 | device | int或者str或者list | None| 指定用于训练的计算设备:单个GPU (device=0),多个GPU(device=0,1I notice that the text you've provided is very short and appears to be a fragment. It looks like part of a technical description, possibly about hardware components, with "CPU" mentioned in parentheses.

Here's the translation to Simplified Chinese:

), CPU (

The text is identical in Simplified Chinese because it only contains the abbreviation "CPU" and some punctuation marks, which remain the same in both English and Simplified Chinese.device=cpuI'll translate the text to Simplified Chinese while maintaining the original format:

), 或者用于 Apple 芯片的 MPS (device=mps). | | workers | int | 8I need to translate the given text fragment into Simplified Chinese while preserving its original meaning and format.

  | 数据加载的工作线程数量(每`RANK`如果是多GPU训练)。影响数据预处理和输入模型的速度,尤其在多GPU设置中非常有用。

| project | str | None| 保存训练输出的项目目录名称。允许有组织地存储不同的实验。 | | name | str | None| 训练运行的名称。用于在项目文件夹内创建子目录,训练日志和输出将存储在该子目录中。 | | exist_ok | bool | False| 如果为 True,允许覆盖已存在的项目/名称目录。这对于迭代实验很有用,无需手动清除先前的输出。 | | pretrained | bool或者str | True| 确定是否从预训练模型开始训练。可以是布尔值或指向特定模型的字符串路径,用于加载权重。提高训练效率和模型性能。 | | optimizer | str | 'auto'| 训练优化器的选择。选项包括SGD, Adam, AdamW, NAdam, RAdam, RMSPropI notice that the content you've provided for translation is incomplete or fragmented. All I can see is "etc., or" which doesn't form a complete sentence or paragraph to translate properly.

Could you please provide the complete text that you'd like me to translate to Simplified Chinese? Once you share the full content, I'll be happy to translate it while maintaining the original format and meaning.auto基于模型配置的自动选择。影响收敛速度和稳定性。 | seed | int | 0| 设置训练的随机种子,确保在相同配置下的多次运行能够产生可重复的结果。 | | deterministic | bool | True| 强制使用确定性算法,确保可重现性,但由于限制使用非确定性算法,可能会影响性能和速度。 | | single_cls | bool | False| 在训练过程中将多类数据集中的所有类别视为单一类别。适用于二元分类任务或当关注对象存在而非分类时。 | | classes | list[int] | None| 指定要训练的类别ID列表。在训练期间用于过滤掉特定类别并只关注某些类别,非常实用。 | | rect | bool | False| 启用矩形训练,优化批次组合以最小化填充。可以提高效率和速度,但可能会影响模型准确性。 | | multi_scale | bool | False| 通过增加/减少来实现多尺度训练imgsz最多可达到...倍0.5在训练期间。训练模型通过多种方式提高准确性imgsz在推理过程中。 | cos_lr | bool | False| 利用余弦learning rate调度器,根据余弦曲线在训练周期内调整学习率。有助于管理学习率以获得更好的收敛效果。 | close_mosaic | int | 10I'll translate this content into Simplified Chinese while maintaining the original format:

 | 禁用马赛克[data augmentation](https://www.ultralytics.com/glossary/data-augmentation)在最后的N个训练周期中稳定训练以便完成。设置为0将禁用此功能。

| resume | bool | False| 从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和训练轮数,无缝继续训练。 | | amp | bool | True| 启用自动Mixed Precision(AMP)训练,减少内存使用并可能加速训练,同时对准确性的影响最小。 | fraction | float | 1.0| 指定用于训练的数据集比例。允许在完整数据集的子集上进行训练,这在实验或资源有限时很有用。 | | profile | bool | False| 在训练期间启用ONNX和TensorRT速度的分析,有助于优化模型部署。 | | freeze | int或者list | None| 冻结模型的前N层或指定索引的层,减少可训练参数的数量。对于微调或迁移学习非常有用。transfer learning. | | lr0 | float | 0.01| 初始学习率(即SGD=1E-2, Adam=1E-3调整这个值对于优化过程至关重要,它会影响模型权重更新的速度。 | lrf | float | 0.01| 最终学习率作为初始率的分数 = (lr0 * lrf这部分内容是关于与调度器(schedulers)一起使用的内容,用于随时间调整学习率。 | momentum | float | 0.937I'll translate this content into Simplified Chinese while maintaining the original format:

| SGD的动量因子或beta1为Adam optimizers,影响过去梯度在当前更新中的融合。 | weight_decay | float | 0.0005I need to translate "L2" to Simplified Chinese while maintaining the original format. However, "L2" appears to be a very brief code or label without much context. In technical contexts, "L2" often refers to "Layer 2" in networking or other technical domains, and it's typically kept as "L2" in Chinese technical documentation as well.

Given the minimal content and lack of context, I'll provide the most appropriate translation:

| L2regularization项,惩罚较大的权重以防止过拟合。 | warmup_epochs | float | 3.0| 学习率预热的周期数,在训练初期逐渐将学习率从低值增加到初始学习率,以稳定早期训练。 | | warmup_momentum | float | 0.8| 预热阶段的初始动量,在预热期间逐渐调整到设定的动量值。 | | warmup_bias_lr | float | 0.1| 在预热阶段用于偏置参数的学习率,有助于在初始训练周期中稳定模型训练。 | | box | float | 7.5| 盒子损失组件的权重loss functionI'll translate this fragment into Simplified Chinese while maintaining the original format and meaning:

,影响对准确预测的重视程度bounding box坐标。 | | cls | float | 0.5| 分类损失在总损失函数中的权重,影响正确类别预测相对于其他组件的重要性。 | | dfl | float | 1.5| 分布焦点损失的权重,用于某些 YOLO 版本中的细粒度分类。 | | pose | float | 12.0| 在训练用于姿态估计的模型中,姿态损失的权重,影响对准确预测姿态关键点的重视程度。 | | kobj | float | 2.0| 姿态估计模型中关键点目标性损失的权重,平衡检测置信度与姿态准确性。 | | nbs | int | 64| 用于损失归一化的标称批量大小。 | | overlap_mask | bool | True| 确定是否应将对象蒙版合并为单个蒙版用于训练,或为每个对象保持单独的蒙版。在重叠的情况下,较小的蒙版会在合并过程中覆盖在较大蒙版的顶部。 | | mask_ratio | int | 4| 分割掩码的下采样比率,影响训练期间使用的掩码分辨率。 | | dropout | float | 0.0| 用于分类任务的丢弃率正则化,通过在训练过程中随机忽略单元来防止过拟合。 | | val | bool | True| 在训练过程中启用验证,允许定期评估模型在单独数据集上的性能。 | | plots | bool | 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 对图像应用随机透视变换,增强模型理解三维空间中物体的能力。
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'我将把这段内容翻译成简体中文,保持原始格式和含义:
    | -             | 在选项中选择复制粘贴增强方法 (`"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提供对三种类型的记录器的支持 - CometClearMLTensorBoard

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

Comet

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

要使用Comet:

Example

# pip install comet_ml
import comet_ml

comet_ml.init()

记得在他们的网站上登录您的Comet帐户并获取您的API密钥。您需要将其添加到环境变量或脚本中以记录您的实验。

ClearML

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

要使用ClearML:

Example

# pip install clearml
import clearml

clearml.browser_login()

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

TensorBoard

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

Google Colab中使用TensorBoard:

Example

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

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

Example

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

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

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

常见问题

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

要使用Ultralytics YOLO11训练目标检测模型,你可以使用Python API或CLI。以下是两种方式的示例:

单GPU和CPU训练示例

from ultralytics import YOLO

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

# 训练模型
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

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

# 恢复训练
results = model.train(resume=True)
yolo train resume model=path/to/last.pt

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

我可以在Apple silicon芯片上训练YOLO11模型吗?

是的,Ultralytics YOLO11支持在Apple silicon芯片上使用Metal Performance Shaders (MPS)框架进行训练。将'mps'指定为你的训练设备。

MPS训练示例

from ultralytics import YOLO

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

# 在Apple silicon芯片(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 Silicon MPS训练部分。

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

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

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

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

📅 Created 1 year ago ✏️ Updated 0 days ago

Comments