Skip to content

配置

YOLO的设置和超参数在模型的性能、速度和准确性中起着关键作用。这些设置和超参数会影响模型在开发过程中的各个阶段的行为,包括训练、验证和预测。



观看: 掌握Ultralytics YOLO: 配置

Ultralytics命令使用以下语法:

Example

yolo TASK MODE ARGS
from ultralytics import YOLO

# 从预训练权重文件加载YOLO11模型
model = YOLO("yolo11n.pt")

# 使用自定义参数ARGS运行MODE模式(猜测TASK)
model.MODE(ARGS)

其中:

默认的ARG值在此页面上从cfg/defaults.yaml文件定义。

任务

YOLO模型可用于各种任务,包括检测、分割、分类和姿态。这些任务在它们产生的输出类型和它们设计解决的具体问题方面有所不同。

  • 检测:用于识别和定位图像或视频中的对象或感兴趣区域。
  • 分割:用于将图像或视频划分为对应于不同对象或类别的区域或像素。
  • 分类:用于预测输入图像的类别标签。
  • 姿态:用于识别对象并估计其在图像或视频中的关键点。
  • OBB:适用于卫星或医学图像的有方向(即旋转)的边界框。
参数 默认值 描述
task 'detect' 指定要执行的YOLO任务。选项包括detect用于对象检测segment用于分割,classify用于分类,pose用于姿态估计,obb用于有方向的边界框。每个任务都针对图像和视频分析中的特定类型的输出和问题进行了定制。

任务指南

模式

YOLO模型可以根据您尝试解决的具体问题以不同的模式使用。这些模式包括:

  • 训练:用于在自定义数据集上训练YOLO11模型。
  • 验证:用于在训练后验证YOLO11模型。
  • 预测:用于使用训练好的YOLO11模型对新图像或视频进行预测。
  • 导出:用于将YOLO11模型导出为可用于部署的格式。
  • 跟踪:用于使用YOLO11模型实时跟踪对象。
  • 基准测试:用于基准测试YOLO11导出(ONNX、TensorRT等)的速度和准确性。 | 参数 | 默认值 | 描述 | | -------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | mode | 'train' | 指定 YOLO 模型运行的模式。选项包括 train 用于模型训练,val 用于验证,predict 用于在新数据上进行推理,export 用于将模型转换为部署格式,track 用于目标跟踪,以及 benchmark 用于性能评估。每种模式都设计用于模型生命周期的不同阶段,从开发到部署。 |

模式指南

训练设置

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' 训练时选择的优化器。选项包括 SGDAdamAdamWNAdamRAdamRMSProp 等,或 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-2Adam=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 模型的预测设置包括一系列超参数和配置,这些参数和配置影响模型在新数据上进行推理时的性能、速度和准确性。仔细调整和实验这些设置对于特定任务实现最佳性能至关重要。关键设置包括置信度阈值、非最大抑制(NMS)阈值和考虑的类别数量。影响预测过程的其他因素包括输入数据的大小和格式、是否存在掩码或每个框的多个标签等辅助特征,以及模型所执行的特定任务。

推理参数:

参数 类型 默认值 描述
source str 'ultralytics/assets' 指定推理的数据源。可以是图像路径、视频文件、目录、URL或实时视频流的设备ID。支持多种格式和数据源,适用于不同类型的输入
conf float 0.25 设置检测的最小置信度阈值。置信度低于此阈值的检测对象将被忽略。调整此值有助于减少误报。
iou float 0.7 交并比 (IoU) 用于非极大值抑制 (NMS) 的阈值。较低的值通过消除重叠框来减少检测数量,有助于减少重复。
imgsz int or tuple 640 定义推理的图像尺寸。可以是单个整数 640 用于方形缩放,或 (高度, 宽度) 元组。适当的尺寸可以提高检测的准确性和处理速度。
half bool False 启用半精度 (FP16) 推理,这可以在支持的GPU上加速模型推理,对准确性影响最小。
device str None 指定推理设备(例如,cpu, cuda:00)。允许用户在CPU、特定GPU或其他计算设备之间选择模型执行。
max_det int 300 每张图像允许的最大检测数量。限制模型在一次推理中可以检测到的对象总数,防止在密集场景中输出过多。
vid_stride int 1 视频输入的帧步长。允许跳过视频中的帧以加快处理速度,代价是时间分辨率降低。值为1处理每一帧,较高的值跳过帧。
stream_buffer bool False 确定是否为视频流队列传入帧。如果为 False,旧帧会被丢弃以容纳新帧(优化用于实时应用)。如果为 True,新帧会被缓冲,确保没有帧被跳过,但如果推理FPS低于流FPS,会导致延迟。
visualize bool False 激活推理过程中模型特征的可视化,提供模型“看到”的内容的洞察。有助于调试和模型解释。
augment bool False 启用预测时的测试时间增强 (TTA),可能会提高检测的鲁棒性,但会牺牲推理速度。
agnostic_nms bool False 启用类不可知的非极大值抑制(NMS),合并不同类别的重叠框。在多类别检测场景中,类别重叠常见时非常有用。
classes list[int] None 过滤预测结果为一组类别ID。只有属于指定类别的检测结果会被返回。在多类别检测任务中,专注于相关对象时非常有用。
retina_masks bool False 如果模型可用,使用高分辨率分割掩码。这可以提高分割任务中的掩码质量,提供更精细的细节。
embed list[int] None 指定从中提取特征向量或嵌入的层。对于聚类或相似性搜索等下游任务非常有用。

可视化参数:

参数 类型 默认值 描述
show bool False 如果为 True,则在窗口中显示带注释的图像或视频。在开发或测试期间,这对于即时视觉反馈非常有用。
save bool FalseTrue 启用将带注释的图像或视频保存到文件。对于文档记录、进一步分析或分享结果非常有用。在 CLI 使用时默认为 True,在 Python 中使用时默认为 False
save_frames bool False 在处理视频时,将单个帧保存为图像。对于提取特定帧或进行详细的逐帧分析非常有用。
save_txt bool False 将检测结果保存为文本文件,格式为 [class] [x_center] [y_center] [width] [height] [confidence]。对于与其他分析工具集成非常有用。
save_conf bool False 在保存的文本文件中包含置信度分数。增强了后处理和分析的详细信息。
save_crop bool False 保存检测到的对象的裁剪图像。对于数据集增强、分析或为特定对象创建聚焦数据集非常有用。
show_labels bool True 在视觉输出中显示每个检测的标签。提供对检测到的对象的即时理解。
show_conf bool True 在标签旁边显示每个检测的置信度分数。提供对模型对每个检测的确定性的洞察。
show_boxes bool True 在检测到的对象周围绘制边界框。对于图像或视频帧中对象的视觉识别和定位至关重要。
line_width Noneint None 指定边界框的线宽。如果为 None,则线宽会根据图像大小自动调整。提供视觉上的清晰度定制。

预测指南

验证设置

YOLO 模型的验证(val)设置涉及用于评估模型在验证数据集上性能的各种超参数和配置。这些设置影响模型的性能、速度和准确性。常见的 YOLO 验证设置包括批量大小、训练期间的验证频率和性能评估指标。影响验证过程的其他因素包括验证数据集的大小和组成,以及模型所执行的特定任务。

参数 类型 默认值 描述
data str None 指定数据集配置文件的路径(例如,coco8.yaml)。该文件包含验证数据的路径、类别名称和类别数量。
imgsz int 640 定义输入图像的大小。所有图像在处理前都会被调整为这个尺寸。
batch int 16 设置每批次的图像数量。使用 -1 表示自动批处理(AutoBatch),它会根据 GPU 内存可用性自动调整。
save_json bool False 如果为 True,将结果保存到 JSON 文件中,以便进一步分析或与其他工具集成。
save_hybrid bool False 如果为 True,保存一个混合版本的标签,该标签结合了原始注释和额外的模型预测。
conf float 0.001 设置检测的最小置信度阈值。置信度低于此阈值的检测将被丢弃。
iou float 0.6 设置交并比(IoU)的阈值,用于非极大值抑制(NMS)。有助于减少重复检测。
max_det int 300 限制每张图像的最大检测数量。在密集场景中很有用,以防止过多的检测。
half bool True 启用半精度(FP16)计算,减少内存使用,并可能在不影响准确性的情况下提高速度。
device str None 指定验证设备(cpucuda:0 等)。允许灵活使用 CPU 或 GPU 资源。
dnn bool False 如果为 True,使用 OpenCV DNN 模块进行 ONNX 模型推理,提供与 PyTorch 推理方法的替代方案。
plots bool False 当设置为 True 时,生成并保存预测与真实值的对比图,用于视觉评估模型的性能。
rect bool False 如果为 True,使用矩形推理进行批处理,减少填充并可能提高速度和效率。
split str val 确定用于验证的数据集分割(valtesttrain)。允许灵活选择用于性能评估的数据段。

仔细调整和实验这些设置对于确保在验证数据集上实现最佳性能,并检测和防止过拟合至关重要。

验证指南

导出设置

YOLO 模型的导出设置包括与将模型保存或导出以用于不同环境或平台的配置和选项。这些设置可以影响模型的性能、大小以及与各种系统的兼容性。关键的导出设置包括导出的模型文件格式(例如 ONNX、TensorFlow SavedModel)、目标设备(例如 CPU、GPU)以及掩码或每个框的多个标签等附加功能。导出过程还可能受到模型特定任务以及目标环境或平台的要求或约束的影响。

参数 类型 默认值 描述
format str 'torchscript' 导出模型的目标格式,如 'onnx', 'torchscript', 'tensorflow' 或其他格式,定义了与各种部署环境的兼容性。
imgsz inttuple 640 模型输入所需的图像尺寸。可以是整数表示方形图像,或元组 (height, width) 表示特定尺寸。
keras bool False 启用导出为 Keras 格式,用于 TensorFlow SavedModel,提供与 TensorFlow 服务和 API 的兼容性。
optimize bool False 在导出到 TorchScript 时为移动设备应用优化,可能会减小模型大小并提高性能。
half bool False 启用 FP16(半精度)量化,减小模型大小并在支持的硬件上可能加速推理。
int8 bool False 激活 INT8 量化,进一步压缩模型并在边缘设备上加速推理,精度损失最小。
dynamic bool False 允许 ONNX、TensorRT 和 OpenVINO 导出的动态输入尺寸,增强处理不同图像尺寸的灵活性。
simplify bool True 使用 onnxslim 简化 ONNX 导出的模型图,可能提高性能和兼容性。
opset int None 指定 ONNX 操作集版本,以兼容不同的 ONNX 解析器和运行时。如果未设置,则使用最新支持的版本。
workspace float 4.0 设置 TensorRT 优化中的最大工作区大小(以 GiB 为单位),平衡内存使用和性能。
nms bool False 将非极大值抑制(NMS)添加到 CoreML 导出中,对于准确高效的检测后处理至关重要。
batch int 1 指定导出模型的批量推理大小,或导出模型在 predict 模式下将同时处理的图像最大数量。
合理配置这些设置对于确保导出的模型针对预期用例进行优化并在目标环境中有效运行至关重要。

导出指南

数据增强设置

数据增强技术通过在训练数据中引入多样性,对于提高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 将分类图像裁剪到其尺寸的一定比例,以强调中心特征并适应物体尺度,减少背景干扰。

这些设置可以根据数据集和任务的具体要求进行调整。通过尝试不同的值,可以帮助找到最优的增强策略,从而获得最佳的模型性能。

日志记录、检查点和绘图设置

在训练YOLO模型时,日志记录、检查点、绘图和文件管理是需要考虑的重要因素。

  • 日志记录:在训练过程中记录各种指标和统计数据通常有助于跟踪模型的进展并诊断可能出现的问题。这可以通过使用TensorBoard等日志库或通过将日志消息写入文件来完成。
  • 检查点:在训练过程中定期保存模型的检查点是一个好习惯。这允许你在训练过程中断或想要尝试不同的训练配置时从之前的某个点恢复训练。
  • 绘图:可视化模型的性能和训练进度有助于理解模型的行为并识别潜在问题。这可以通过使用matplotlib等绘图库或通过生成TensorBoard等日志库的图表来完成。
  • 文件管理:管理训练过程中生成的各种文件,如模型检查点、日志文件和图表,可能具有挑战性。重要的是要有一个清晰有序的文件结构,以便跟踪这些文件并根据需要轻松访问和分析它们。

有效的日志记录、检查点、绘图和文件管理可以帮助你跟踪模型的进展,并使调试和优化训练过程变得更加容易。

参数 默认值 描述
project 'runs' 指定保存训练运行的根目录。每个运行将保存在此目录内的单独子目录中。
name 'exp' 定义实验的名称。如果未指定,YOLO会自动为每次运行递增此名称,例如expexp2等,以避免覆盖之前的实验。
exist_ok False 确定如果存在同名实验目录时是否覆盖现有目录。设置为True允许覆盖,而False则阻止覆盖。
plots False 控制训练和验证图表的生成和保存。设置为True以创建损失曲线、精度-召回曲线和样本预测等图表。有助于直观地跟踪模型性能随时间的变化。
save False 启用训练检查点和最终模型权重的保存。设置为True以定期保存模型状态,允许从这些检查点恢复训练或部署模型。

常见问题

如何在训练过程中提高我的YOLO模型的性能?

提升 YOLO 模型性能涉及调整超参数,如批量大小、学习率、动量和权重衰减。调整数据增强设置、选择合适的优化器,以及采用早停或混合精度等技术也能有所帮助。有关训练设置的详细指导,请参阅训练指南

影响 YOLO 模型精度的关键超参数有哪些?

影响 YOLO 模型精度的关键超参数包括:

  • 批量大小 (batch):较大的批量大小可以稳定训练,但可能需要更多内存。
  • 学习率 (lr0):控制权重更新的步长;较小的学习率提供精细调整但收敛速度慢。
  • 动量 (momentum):有助于在正确方向上加速梯度向量,抑制振荡。
  • 图像尺寸 (imgsz):较大的图像尺寸可以提高精度,但会增加计算负载。

根据您的数据集和硬件能力调整这些值。更多信息请参阅训练设置部分。

如何为 YOLO 模型训练设置学习率?

学习率 (lr0) 对优化至关重要。常见的起点是 SGD 为 0.01,Adam 为 0.001。监控训练指标并在必要时进行调整非常重要。使用余弦学习率调度器 (cos_lr) 或预热技术 (warmup_epochs, warmup_momentum) 在训练过程中动态调整学习率。更多详情请参阅训练指南

YOLO 模型的默认推理设置是什么?

默认推理设置包括:

  • 置信度阈值 (conf=0.25):检测的最小置信度。
  • IoU 阈值 (iou=0.7):用于非最大抑制 (NMS)。
  • 图像尺寸 (imgsz=640):推理前调整输入图像大小。
  • 设备 (device=None):选择 CPU 或 GPU 进行推理。 如需全面概览,请访问预测设置部分和预测指南

为什么我应该在 YOLO 模型中使用混合精度训练?

混合精度训练,通过 amp=True 启用,有助于减少内存使用,并通过利用 FP16 和 FP32 的优势加快训练速度。这对于支持混合精度的现代 GPU 特别有益,允许更多模型适应内存并实现更快的计算,而不会显著损失精度。了解更多信息请参阅训练指南


📅 Created 11 months ago ✏️ Updated 9 days ago

Comments