模型培训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'
将被使用。有关训练参数的完整列表,请参阅下面的 "参数 "部分。
Windows 多进程错误
在 Windows 系统中,您可能会收到一个 RuntimeError
作为脚本启动培训时。添加 if __name__ == "__main__":
块来解决这个问题。
单一GPU 和CPU 培训示例
设备自动确定。如果GPU 可用,则使用GPU (默认CUDA 设备为 0),否则训练将从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])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -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
# Use the two most idle GPUs
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640 device=-1,-1
闲置GPU 培训
闲置GPU 训练可在GPU GPU 系统中自动选择利用率最低的 GPU,无需手动选择GPU 即可优化资源使用。该功能可根据利用率指标和 VRAM 可用性识别可用的 GPU。
闲置GPU 训练示例
要自动选择并使用最空闲的GPU 进行训练,请使用 -1
设备参数。这在共享计算环境或有多个用户的服务器中特别有用。
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.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])
# Start training using the single most idle GPU
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=-1
# Start training using the two most idle GPUs
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=-1,-1
自动选择算法会优先选择具有以下特性的 GPU:
- 当前利用率较低
- 更高的可用内存(空闲 VRAM)
- 降低温度和功耗
这一功能在共享计算环境或跨不同模型运行多个训练任务时尤为重要。它能自动适应不断变化的系统条件,确保最佳资源分配,无需人工干预。
苹果硅MPS 培训
Ultralytics YOLO 模型中集成了对苹果硅芯片的支持,现在可以在使用强大的 Metal Performance Shaders (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
在充分利用 Apple 硅芯片计算能力的同时,还能更高效地处理训练任务。有关更详细的指导和高级配置选项,请参阅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
参数,因此必须至少完成 1 个纪元才能恢复训练运行。
列车设置
YOLO 模型的训练设置包括训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。关键的训练设置包括批量大小、学习率、动量和权重衰减。此外,优化器、损失函数和训练数据集组成的选择也会影响训练过程。对这些设置进行仔细的调整和实验对于优化性能至关重要。
论据 | 类型 | 默认值 | 说明 |
---|---|---|---|
model |
str |
None |
指定用于训练的模型文件。接受指向 .pt 预训练模型或 .yaml 配置文件。对于定义模型结构或初始化权重至关重要。 |
data |
str |
None |
数据集配置文件的路径(例如 coco8.yaml ).该文件包含特定于数据集的参数,包括训练和 验证数据类名和类数。 |
epochs |
int |
100 |
训练历元总数。每个历元代表对整个数据集进行一次完整的训练。调整该值会影响训练时间和模型性能。 |
time |
float |
None |
最长训练时间(小时)。如果设置了该值,则会覆盖 epochs 参数,允许训练在指定的持续时间后自动停止。对于时间有限的训练场景非常有用。 |
patience |
int |
100 |
在验证指标没有改善的情况下,提前停止训练所需的历元数。当性能趋于平稳时停止训练,有助于防止过度拟合。 |
batch |
int |
16 |
批量大小有三种模式: 设置为整数(如 batch=16 )、自动模式,内存利用率为 60%GPU (batch=-1 ),或指定利用率的自动模式 (batch=0.70 ). |
imgsz |
int 或 list |
640 |
用于训练的目标图像尺寸。所有图像在输入模型前都会被调整到这一尺寸。影响模型精度和计算复杂度。 |
save |
bool |
True |
可保存训练检查点和最终模型权重。这对恢复训练或模型部署非常有用。 |
save_period |
int |
-1 |
保存模型检查点的频率,以 epochs 为单位。值为-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 )、MPS for Apple silicon (device=mps ),或自动选择最空闲的GPU (device=-1 )或多个闲置 GPU (device=[-1,-1] ) |
workers |
int |
8 |
加载数据的工作线程数(每 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 , RMSProp 等,或 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 |
利用余弦学习率调度器,根据历时的余弦曲线调整学习率。这有助于管理学习率,实现更好的收敛。 |
close_mosaic |
int |
10 |
在训练完成前禁用最后 N 个历元的马赛克数据增强以稳定训练。设置为 0 则禁用此功能。 |
resume |
bool |
False |
从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和历时计数,无缝继续训练。 |
amp |
bool |
True |
启用自动混合精度(AMP) 训练,可减少内存使用量并加快训练速度,同时将对精度的影响降至最低。 |
fraction |
float |
1.0 |
指定用于训练的数据集的部分。允许在完整数据集的子集上进行训练,这对实验或资源有限的情况非常有用。 |
profile |
bool |
False |
在训练过程中,可对ONNX 和TensorRT 速度进行剖析,有助于优化模型部署。 |
freeze |
int 或 list |
None |
冻结模型的前 N 层或按索引指定的层,从而减少可训练参数的数量。这对微调或迁移学习非常有用。 |
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 |
热身阶段的偏置参数学习率,有助于稳定初始历元的模型训练。 |
box |
float |
7.5 |
损失函数中边框损失部分的权重,影响对准确预测边框坐标的重视程度。 |
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
以自动调整批量大小,使CUDA 内存利用率达到约 60%。 - 利用率自动模式:设置一个分数值(例如、
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 |
0.0 - 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 |
混合两幅图像及其标签,创建合成图像。通过引入标签噪声和视觉变化,增强模型的泛化能力。 |
cutmix |
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 |
仅分类。在训练过程中随机擦除图像区域,以鼓励模型专注于不太明显的特征。 |
这些设置可根据数据集和手头任务的具体要求进行调整。试验不同的值有助于找到最佳的增强策略,从而获得最佳的模型性能。
信息
有关增强训练行动的更多信息,请参阅参考资料部分。
记录
在训练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 等。下面是简要概述:
论据 | 默认值 | 说明 |
---|---|---|
model |
None |
用于训练的模型文件的路径。 |
data |
None |
数据集配置文件的路径(例如 coco8.yaml ). |
epochs |
100 |
训练历元总数。 |
batch |
16 |
批量大小,可调整为整数或自动模式。 |
imgsz |
640 |
用于训练的目标图像大小。 |
device |
None |
用于训练的计算设备,如 cpu , 0 , 0,1 或 mps . |
save |
True |
可保存训练检查点和最终模型权重。 |
有关训练设置的深入指南,请查看 "训练设置"部分。