目录
引言
使用示例
多GPU训练
苹果M1和M2 MPS训练
恢复中断的训练
参数
记录
Comet
ClearML
TensorBoard
如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接,我这边整理了许多其他任务的说明博文,后续也会持续更新,包括yolov8模型优化、sam等等的相关内容。
以下是YOLOv8训练模式的一些显著特点:
这篇博客实际上基本都是摘自于官方的文档,我这边重新转载一遍也是为了个人可能更深刻的了解 ultralytics 的一些细节。如果大家想在这篇学到其他官网以外知识可能会让大家失望了。
在COCO128数据集上训练YOLOv8n模型100个时期,图像大小为640。可以使用device
参数指定训练设备。如果没有传递参数,并且有可用的GPU,则将使用GPU device=0
,否则将使用device=cpu
。有关完整列表的训练参数,请参见下面的参数部分。
使用python代码进行执行训练:
from ultralytics import YOLO
# 加载一个模型
model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 从YAML建立并转移权重
# 训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
使用命令行执行训练:
# 从YAML构建新模型,从头开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640
# 从预训练*.pt模型开始训练
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640
# 从YAML构建一个新模型,转移预训练权重,然后开始训练
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
这三行代码都是可以执行训练的,就是参数不同,具体区别注释有写,小伙伴们如果不明白的可以告诉我,我这边在写的更详细一些。
多GPU训练通过在多个GPU上分布训练负载,实现对可用硬件资源的更有效利用。无论是通过Python API还是命令行界面,都可以使用此功能。 若要启用多GPU训练,请指定您希望使用的GPU设备ID。代码中的device=[xxx, xxx]则是指定激活训练的GPT编号ID。
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载预训练模型(推荐用于训练)
# 使用2个GPU训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device=[0, 1])
通过Ultralytics YOLO模型集成对Apple M1和M2芯片的支持,现在可以在使用强大的Metal性能着色器(MPS)框架的设备上训练模型。MPS为在Apple的定制硅上执行计算和图像处理任务提供了一种高性能的方法。
要在Apple M1和M2芯片上启用训练,您应该在启动训练过程时将设备指定为'mps'。以下是Python和命令行中如何做到这点的示例:
from ultralytics import YOLO
# 加载模型
model = YOLO('yolov8n.pt') # 加载预训练模型(推荐用于训练)
# 使用2个GPU训练模型
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device='mps')
在处理深度学习模型时,从之前保存的状态恢复训练是一个关键特性。在各种情况下,这可能很方便,比如当训练过程意外中断,或者当您希望用新数据或更多时期继续训练模型时。恢复训练时,Ultralytics YOLO将加载最后保存的模型的权重,并恢复优化器状态、学习率调度器和时期编号。这允许您无缝地从离开的地方继续训练过程。在Ultralytics YOLO中,您可以通过在调用train
方法时将resume
参数设置为True
并指定包含部分训练模型权重的.pt
文件路径来轻松恢复训练。
下面是使用Python和命令行恢复中断训练的示例:
from ultralytics import YOLO
# 加载模型
model = YOLO('path/to/last.pt') # 加载部分训练的模型
# 恢复训练
results = model.train(resume=True)
通过设置resume=True
,train
函数将从'path/to/last.pt'文件中存储的状态继续训练。如果省略resume
参数或将其设置为False
,train
函数将启动新的训练会话。请记住,默认情况下,检查点会在每个时期结束时保存,或者使用save_period
参数以固定间隔保存,因此您必须至少完成1个时期才能恢复训练运行。
YOLO模型的训练设置是指用于对数据集进行模型训练的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。一些常见的YOLO训练设置包括批大小、学习率、动量和权重衰减。其他可能影响训练过程的因素包括优化器的选择、损失函数的选择以及训练数据集的大小和组成。仔细调整和实验这些设置以实现给定任务的最佳性能是非常重要的。
键 | 值 | 描述 |
---|---|---|
model |
None |
模型文件路径,例如 yolov8n.pt, yolov8n.yaml |
data |
None |
数据文件路径,例如 coco128.yaml |
epochs |
100 |
训练的轮次数量 |
patience |
50 |
早停训练的等待轮次 |
batch |
16 |
每批图像数量(-1为自动批大小) |
imgsz |
640 |
输入图像的大小,以整数表示 |
save |
True |
保存训练检查点和预测结果 |
save_period |
-1 |
每x轮次保存检查点(如果<1则禁用) |
cache |
False |
True/ram, disk 或 False。使用缓存加载数据 |
device |
None |
运行设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu |
workers |
8 |
数据加载的工作线程数(如果DDP则为每个RANK) |
project |
None |
项目名称 |
name |
None |
实验名称 |
exist_ok |
False |
是否覆盖现有实验 |
pretrained |
True |
(bool 或 str) 是否使用预训练模型(bool)或从中加载权重的模型(str) |
optimizer |
'auto' |
使用的优化器,选择范围=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto] |
verbose |
False |
是否打印详细输出 |
seed |
0 |
随机种子,用于可重复性 |
deterministic |
True |
是否启用确定性模式 |
single_cls |
False |
将多类数据作为单类训练 |
rect |
False |
矩形训练,每批为最小填充整合 |
cos_lr |
False |
使用余弦学习率调度器 |
close_mosaic |
10 |
(int) 最后轮次禁用马赛克增强(0为禁用) |
resume |
False |
从最后检查点恢复训练 |
amp |
True |
自动混合精度(AMP)训练,选择范围=[True, False] |
fraction |
1.0 |
训练的数据集比例(默认为1.0,即训练集中的所有图像) |
profile |
False |
在训练期间为记录器分析ONNX和TensorRT速度 |
freeze |
None |
(int 或 list, 可选) 在训练期间冻结前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 |
优化器权重衰减5e-4 |
warmup_epochs |
3.0 |
热身轮次(小数ok) |
warmup_momentum |
0.8 |
热身初始动量 |
warmup_bias_lr |
0.1 |
热身初始偏差lr |
box |
7.5 |
框损失增益 |
cls |
0.5 |
cls损失增益(根据像素缩放) |
dfl |
1.5 |
dfl损失增益 |
pose |
12.0 |
姿态损失增益(仅限姿态) |
kobj |
2.0 |
关键点obj损失增益(仅限姿态) |
label_smoothing |
0.0 |
标签平滑(小数) |
nbs |
64 |
标称批大小 |
overlap_mask |
True |
训练期间掩码应重叠(仅限分割训练) |
mask_ratio |
4 |
掩码降采样比率(仅限分割训练) |
dropout |
0.0 |
使用dropout正则化(仅限分类训练) |
val |
True |
训练期间验证/测试 |
在训练YOLOv8模型时,跟踪模型随时间的性能变化可能非常有价值。这就是记录发挥作用的地方。Ultralytics的YOLO提供对三种类型记录器的支持 - Comet、ClearML和TensorBoard。要使用记录器,请在上面的代码片段中的下拉菜单中选择它并运行。所选的记录器将被安装和初始化。
Comet是一个平台,允许数据科学家和开发人员跟踪、比较、解释和优化实验和模型。它提供了实时指标、代码差异和超参数跟踪等功能。
# pip install comet_ml 这个库需要额外安装一下。
import comet_ml
comet_ml.init()
记得在他们的网站上登录您的Comet账户并获取您的API密钥。您需要将此添加到您的环境变量或脚本中,以记录您的实验。
ClearML 是一个开源平台,自动跟踪实验并帮助有效共享资源。它旨在帮助团队更有效地管理、执行和复现他们的ML工作。
# pip install clearml
import clearml
clearml.browser_login()
运行此脚本后,您需要在浏览器中登录您的ClearML账户并认证您的会话。
TensorBoard 是TensorFlow的可视化工具包。它允许您可视化TensorFlow图表,绘制有关图表执行的定量指标,并展示通过它的附加数据,如图像。
load_ext tensorboard
tensorboard --logdir ultralytics/runs # 替换为'runs'目录
在本地使用TensorBoard,运行下面的命令并在 http://localhost:6006/ 查看结果。
tensorboard --logdir ultralytics/runs # 替换为'runs'目录
这将加载TensorBoard并将其定向到保存训练日志的目录。在设置好日志记录器后,您可以继续进行模型训练。所有训练指标将自动记录在您选择的平台中,您可以访问这些日志以监控模型随时间的表现,比较不同模型,并识别改进的领域。
如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。