使用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上开始。
# 从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=True
,train
函数将从上次中断的地方继续训练,使用存储在'path/to/last.pt'文件中的状态。如果省略resume
参数或设置为False
,train
函数将开始一个新的训练会话。
请记住,默认情况下,检查点在每个时期结束时保存,或者使用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' |
训练时选择的优化器。选项包括 SGD 、Adam 、AdamW 、NAdam 、RAdam 、RMSProp 等,或 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-2 ,Adam=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
TensorBoard是TensorFlow的可视化工具包。它允许您可视化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 |
用于训练的计算设备,如cpu 、0 、0,1 或mps 。 |
save |
True |
启用保存训练检查点和最终模型权重。 |
有关训练设置的深入指南,请查看训练设置部分。