模型培训Ultralytics YOLO
导言
训练深度学习模型包括向其输入数据并调整其参数,使其能够做出准确的预测。Ultralytics YOLOv8 中的 "训练 "模式充分利用现代硬件能力,专为高效训练物体检测模型而设计。本指南旨在介绍使用YOLOv8 的强大功能集开始训练自己的模型所需的所有细节。
观看: 如何在Google Colab 中的自定义数据集上训练YOLOv8 模型。
为什么选择Ultralytics YOLO 进行培训?
以下是选择YOLOv8"火车模式 "的一些令人信服的理由:
- 效率:充分利用硬件,无论您是使用单个GPU 设置还是在多个 GPU 之间扩展。
- 多功能性:除 COCO、VOC 和 ImageNet 等现成数据集外,还可在自定义数据集上进行训练。
- 用户友好型:简单而强大的CLI 和Python 界面,提供直接的培训体验。
- 超参数灵活性:可定制的超参数范围广泛,可对模型性能进行微调。
列车模式的主要功能
以下是YOLOv8"火车 "模式的一些显著特点:
- 自动下载数据集:首次使用时会自动下载 COCO、VOC 和 ImageNet 等标准数据集。
- 支持多个GPU :在多个 GPU 上无缝扩展您的培训工作,以加快进程。
- 超参数配置:通过 YAML 配置文件或CLI 参数修改超参数的选项。
- 可视化和监控:实时跟踪培训指标和可视化学习过程,以获得更好的洞察力。
提示
- YOLOv8 数据集,如 COCO、VOC、ImageNet 和许多其他数据集,会在首次使用时自动下载,即
yolo train data=coco.yaml
使用示例
在图像大小为 640 的 COCO8 数据集上对YOLOv8n 进行 100 次训练。可以使用 device
参数。如果没有传递参数GPU device=0
将被使用,否则 device='cpu'
将被使用。有关训练参数的完整列表,请参阅下面的 "参数 "部分。
单一GPU 和CPU 培训示例
设备自动确定。如果GPU 可用,则将使用它,否则培训将从CPU 开始。
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.yaml") # build a new model from YAML
model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolov8n.yaml").load("yolov8n.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=yolov8n.yaml epochs=100 imgsz=640
# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.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=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
多种GPU 培训
通过在多个 GPU 上分配训练负载,多GPU 训练可以更有效地利用可用硬件资源。该功能可通过Python API 和命令行界面使用。要启用多GPU 训练,请指定要使用的GPU 设备 ID。
多个GPU 培训示例
要使用 2 个 GPU(CUDA 设备 0 和 1)进行训练,请使用以下命令。根据需要扩展到其他 GPU。
苹果 M1 和 M2MPS 培训
Ultralytics YOLO 机型中集成了对苹果 M1 和 M2 芯片的支持,现在可以在使用强大的 Metal Performance Shaders (MPS) 框架的设备上训练模型。MPS 提供了在苹果定制芯片上执行计算和图像处理任务的高性能方法。
要在 Apple M1 和 M2 芯片上启用训练,应在启动训练程序时指定 "mps"为设备。下面是一个示例,说明如何在Python 和通过命令行执行此操作:
MPS 培训实例
在充分利用 M1/M2 芯片计算能力的同时,还能更高效地处理训练任务。有关更详细的指导和高级配置选项,请参阅PyTorch MPS 文档。
恢复中断的培训
在使用深度学习模型时,从先前保存的状态恢复训练是一项至关重要的功能。这在各种情况下都能派上用场,比如当训练过程意外中断时,或者当你希望用新数据或更多的历时继续训练模型时。
恢复训练时,Ultralytics YOLO 会加载上次保存模型的权重,并恢复优化器状态、学习率调度器和历时编号。这样,您就可以从上次中断的地方无缝地继续训练过程。
Ultralytics YOLO 您可以通过设置 resume
参数 True
在调用 train
方法的路径,并指定 .pt
文件,其中包含经过部分训练的模型权重。
下面举例说明如何使用Python 和通过命令行恢复中断的训练:
简历培训范例
通过设置 resume=True
,"...... train
函数将使用存储在 "path/to/last.pt "文件中的状态,从中断处继续训练。如果 resume
参数被省略或设置为 False
,"...... train
功能将开始新的培训课程。
请记住,默认情况下,检查点会在每个纪元结束时保存,或者使用 save_period
参数,因此您必须至少完成一个纪元才能恢复训练运行。
列车设置
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 |
保存模型检查点的频率,以 epochs 为单位。值为-1 时将禁用此功能。该功能适用于在长时间训练过程中保存临时模型。 |
cache |
False |
在内存中缓存数据集图像 (True /ram )、磁盘 (disk ),或禁用它 (False ).通过减少磁盘 I/O 提高训练速度,但代价是增加内存使用量。 |
device |
None |
指定用于训练的计算设备:单个GPU (device=0 )、多个 GPU (device=0,1 )、CPU (device=cpu ) 或MPS for Apple silicon (device=mps ). |
workers |
8 |
加载数据的工作线程数(每 RANK 如果多GPU 训练)。影响数据预处理和输入模型的速度,尤其适用于多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 |
利用余弦学习率调度器,根据历时的余弦曲线调整学习率。这有助于管理学习率,实现更好的收敛。 |
close_mosaic |
10 |
在训练完成前禁用最后 N 个历元的马赛克数据增强以稳定训练。设置为 0 则禁用此功能。 |
resume |
False |
从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和历时计数,无缝继续训练。 |
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
以自动调整批量大小,使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 |
-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 |
从一幅图像中复制物体并粘贴到另一幅图像上,用于增加物体实例和学习物体遮挡。 |
auto_augment |
str |
randaugment |
- | 自动应用预定义的增强策略 (randaugment , autoaugment , augmix ),通过丰富视觉特征来优化分类任务。 |
erasing |
float |
0.4 |
0.0 - 0.9 |
在分类训练过程中随机擦除部分图像,鼓励模型将识别重点放在不明显的特征上。 |
crop_fraction |
float |
1.0 |
0.1 - 1.0 |
将分类图像裁剪为其大小的一小部分,以突出中心特征并适应对象比例,减少背景干扰。 |
这些设置可根据数据集和手头任务的具体要求进行调整。试验不同的值有助于找到最佳的增强策略,从而获得最佳的模型性能。
信息
有关增强训练行动的更多信息,请参阅参考资料部分。
记录
在训练YOLOv8 模型的过程中,您可能会发现跟踪模型在一段时间内的表现很有价值。这就是日志发挥作用的地方。Ultralytics'YOLO 支持三种类型的日志记录器:Comet 、ClearML 和 TensorBoard。
要使用记录仪,请从上面代码片段的下拉菜单中选择并运行。所选记录仪将被安装和初始化。
Comet
Comet是一个允许数据科学家和开发人员跟踪、比较、解释和优化实验与模型的平台。它提供实时度量、代码差异和超参数跟踪等功能。
要使用Comet :
请记住在Comet 网站上登录您的账户并获取 API 密钥。您需要将此添加到环境变量或脚本中,以便记录实验日志。
ClearML
ClearML是一个开源平台,可自动跟踪实验并帮助高效共享资源。它旨在帮助团队更高效地管理、执行和复制他们的 ML 工作。
要使用ClearML :
运行该脚本后,您需要在浏览器上登录ClearML 账户并验证您的会话。
张量板
TensorBoard是TensorFlow 的可视化工具包。通过它,您可以将TensorFlow 图形可视化,绘制有关图形执行情况的量化指标,并显示通过图形的图像等附加数据。
在Google Colab 中使用 TensorBoard:
要在本地使用 TensorBoard,请运行以下命令并在 http://localhost:6006/ 上查看结果。
这将加载 TensorBoard 并将其导向保存训练日志的目录。
设置好记录仪后,您就可以开始模型训练了。所有训练指标都将自动记录在您选择的平台上,您可以访问这些日志来监控模型在一段时间内的表现,比较不同的模型,并找出需要改进的地方。
常见问题
如何使用Ultralytics YOLOv8 训练物体检测模型?
要使用Ultralytics YOLOv8 训练对象检测模型,可以使用Python API 或CLI 。以下是两者的示例:
单一GPU 和CPU 培训示例
更多详情,请参阅列车设置部分。
Ultralytics YOLOv8 "火车模式 "的主要特点是什么?
Ultralytics YOLOv8 "列车 "模式的主要功能包括
- 自动数据集下载:自动下载 COCO、VOC 和 ImageNet 等标准数据集。
- 支持多个GPU :在多个 GPU 上进行扩展训练,以加快处理速度。
- 超参数配置:通过 YAML 文件或CLI 参数自定义超参数。
- 可视化和监控:实时跟踪培训指标,提高洞察力。
这些功能使培训更高效,并可根据您的需求进行定制。更多详情,请参阅 "训练模式的主要功能"部分。
如何从Ultralytics YOLOv8 中中断的课程恢复培训?
要从中断的训练中恢复训练,请设置 resume
参数 True
并指定最后保存的检查点的路径。
简历培训范例
更多信息请查看 "恢复中断的培训"部分。
能否在苹果 M1 和 M2 芯片上训练YOLOv8 模型?
是,Ultralytics YOLOv8 支持在使用 Metal Performance Shaders (MPS) 框架的 Apple M1 和 M2 芯片上进行培训。指定 "mps"为训练设备。
MPS 培训实例
有关详细信息,请参阅Apple M1 和 M2MPS 培训部分。
常见的培训设置有哪些?
Ultralytics YOLOv8 允许你通过参数配置各种训练设置,如批量大小、学习率、epochs 等。下面是简要概述:
论据 | 默认值 | 说明 |
---|---|---|
model |
None |
用于训练的模型文件的路径。 |
data |
None |
数据集配置文件的路径(例如 coco8.yaml ). |
epochs |
100 |
训练历元总数。 |
batch |
16 |
批量大小,可调整为整数或自动模式。 |
imgsz |
640 |
用于训练的目标图像大小。 |
device |
None |
用于训练的计算设备,如 cpu , 0 , 0,1 或 mps . |
save |
True |
可保存训练检查点和最终模型权重。 |
有关训练设置的深入指南,请查看 "训练设置"部分。