YOLO介绍—datawhale

  1. 速度快:YOLO的设计目标是实现快速的对象检测,它在保持相对高准确度的同时,能够实现高帧率的实时检测。

  2. 易于实现:YOLO的架构相对简单,易于理解和实现,这使得它在学术和工业界都得到了广泛的应用。

  3. 版本迭代:YOLO自2016年首次发布以来,已经经历了多个版本的迭代(如YOLOv5、YOLOv6、YOLOv7等),每个版本都在性能和效率上有所提升。

  4. 社区支持:YOLO拥有一个活跃的开发者社区,提供了大量的教程、工具和预训练模型,这使得小白也可以快速上手并应用YOLO。

  5. 灵活性:YOLO的架构允许用户根据特定需求调整网络结构,例如改变输入图像的尺寸或调整网络的深度。

YOLO 数据集格式

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../dataset/  # dataset root dir
train: images/train/  # train images (relative to 'path') 128 images
val: images/val/  # train images (relative to 'path') 128 images

# Classes
nc: 2  # number of classes表示类别的数量,这里设置为2,意味着数据集中有两类物体需要被识别。
names: ["0", '1']  # class names包含了每个类别的名称。这里有两个类别,名称分别是"0"和"1"。这些名称在训练和测试过程中用于引用特定的类别。

数据集配置

path:数据集的根目录,设置为/数据集/。
train和val:分别包含训练和验证图像的目录。这些路径是相对于路径目录的。在这种情况下,训练图像位于images/strain/中,验证图像位于images/val/中。
类配置

nc:数据集中的类数,设置为2。这意味着模型将被训练以识别两类不同的对象。
names:类名列表,用于在培训和测试期间引用特定的类。在这种情况下,这两个类分别命名为“0”和“1”。

具体查看:物体检测数据集概述 -Ultralytics YOLO 文档

YOLO 训练日志

在使用YOLO进行训练时,生成的exp/detect/train类型的文件夹是训练过程中的一个关键组成部分。

  • 模型权重 (.pt.pth 文件): 训练过程中保存的模型权重,可以用于后续的测试或继续训练。

  • 日志文件 (.log 文件): 包含训练过程中的所有输出信息,如损失值、精度、速度等。

  • 配置文件 (.yaml.cfg 文件): 训练时使用的配置文件副本,记录了数据路径、类别名、模型架构等设置。

  • 图表和可视化: 有时YOLO会生成训练过程中的性能图表,如损失曲线、精度曲线等。

  • 测试结果: 如果训练过程中包括了测试阶段,可能会有测试结果的保存,如检测结果的图片或统计数据。

  1. F1_curve.png, PR_curve.png, P_curve.png, R_curve.png: 包含模型性能的不同评估指标曲线图,如F1分数(F1_curve.png)、精确率-召回率曲线(PR_curve.png)、精确率(P_curve.png)和召回率(R_curve.png)。

  2. results.csv: 一个CSV文件,包含模型训练或测试的结果数据。

  3. results.png: 包含训练结果的汇总图表或图像。

  4. train_batch*.jpg: 包含训练过程中不同批次的图像和它们的标注。

  5. val_batch0_labels.jpg, val_batch0_pred.jpg: 验证集批次的图像,可能包含真实标签(labels)和模型预测(pred)的可视化。

  6. weights/: 一个目录,通常包含模型训练过程中保存的权重文件,如.pt.pth文件。

        在训练过程中和训练完成后,都可以查看训练日志。可以优先查看results.png,图像的内容类似如下。从验证集上的损失 (val/box_loss, val/cls_loss, val/dfl_loss) 和性能指标可以评估模型在未见数据上的泛化能力。在下面的训练日志中,我们发现模型在验证集发生了过拟合。

缩写作用描述
epoch表示模型在整个训练数据集上进行了一次前向和后向传播的完整周期。
train/box_loss衡量模型预测的边界框与真实边界框之间差异的损失值。
train/cls_loss衡量模型预测的类别与真实类别之间差异的损失值。
train/dfl_loss衡量模型对难分类样本的关注程度,减少易分类样本的影响。
metrics/precision(B)在训练过程中,预测为正类别中实际为正类别的比例
metrics/recall(B)在训练过程中,所有实际正类别中被模型正确预测为正类别的比例。
metrics/mAP50(B)在50%的IoU阈值下计算,衡量模型的整体性能。
metrics/mAP50-95(B)在0.5到0.95的IoU阈值范围内计算,提供更全面的模型性能评估。
val/box_loss模型在未见过的验证集上的边界框损失,用于监控模型的泛化能力。
val/cls_loss模型在验证集上的分类损失,用于监控模型的泛化能力。
val/dfl_loss模型在验证集上的难易样本平衡损失。

训练指标(第一行):

  1. train/box_loss:训练期间的边界框回归损失随着时间的推移而减少,表明模型在预测边界框坐标方面正在改进。
  2. train/cls_loss:分类损失也呈下降趋势,表明模型正在学习更准确地对对象进行分类。
  3. train/dfl_loss:这可能是指 “Distribution Focal Loss”,其下降趋势反映了模型定位能力的改进。
  4. metrics/precision(B):精度会波动,但最终会提高,但存在一些不稳定性,这可能表示过度拟合或噪声。
  5. metrics/recall(B):召回率持平在 1.0 时,这意味着训练集上的完美召回率,可能表明模型检测到所有相关对象,没有遗漏任何对象。

验证指标(第二行):

  1. val/box_loss:验证边界框损失减少,但与训练损失相比显示出更多的不稳定性,这表明模型在验证集上的一致性可能较低。
  2. val/cls_loss:与训练类似,分类损失减少,但模式表明存在一些波动。
  3. val/dfl_loss:分布焦点损失减少,跟随其他验证损失的趋势。
  4. metrics/mAP50(B):50% IoU 的平均精度均值随着时间的推移而提高,表明检测对象的整体性能更好。
  5. metrics/mAP50-95(B):该指标跟踪一系列 IoU 阈值 (50-95%) 的性能,其逐渐增加表明模型的检测质量在更广泛的难度级别范围内正在提高。

一般观察:

  • 训练与验证:与验证损失相比,训练损失通常更平滑、更一致,验证损失显示更多的波动,这是一些噪声或潜在过度拟合的典型迹象。
  • 性能指标:mAP50 和 mAP50-95 都在增加,这表明该模型在各种场景中的目标检测性能都在提高

        如果模型效果很好,通常这些图的走势应该表现出较为平稳的下降趋势或稳定的性能提升。以下是各个图的预期走势:

训练损失(Train Loss)相关图:

  1. train/box_loss(边界框损失):

    • 期望走势: 边界框损失应逐渐减小,呈下降趋势,且下降的幅度较为平滑,说明模型在边界框回归任务上逐渐学会了精确定位目标。
    • 不理想的情况: 如果有较大的波动或者在某个阶段不再下降,可能意味着学习率设置不佳或模型未能充分学习。
  2. train/cls_loss(分类损失):

    • 期望走势: 分类损失应呈下降趋势,表明模型在目标分类任务上的表现逐渐提升。
    • 不理想的情况: 如果损失出现反弹或者收敛得过早,可能意味着模型过拟合、欠拟合或学习率问题。
  3. train/dfl_loss(分布焦点损失):

    • 期望走势: 这类损失应像其他损失一样,逐渐减小并趋于稳定。
    • 不理想的情况: 如果有明显波动下降缓慢,可能表明模型在回归边界框的质量上有难度。

验证损失(Validation Loss)相关图:

  1. val/box_lossval/cls_loss:

    • 期望走势: 验证集上的损失应该和训练集上的趋势相似,逐步下降并趋于平稳。如果验证集的损失持续降低,说明模型在未见过的数据上也表现出良好的泛化能力。
    • 不理想的情况: 如果验证集损失在早期就稳定不变或开始增大,说明可能发生了过拟合,即模型在训练集上表现很好,但在验证集上效果不佳。
  2. val/dfl_loss:

    • 期望走势: 验证集上的分布焦点损失也应像训练集一样,逐步下降,表明模型在更广泛的数据上表现良好。
    • 不理想的情况:如果在训练过程中不降反升或保持高值,可能意味着模型在学习目标边界框的分布时存在问题。这可能是由于数据集标注不准确或模型设计不当导致的。

评价指标(Metrics)相关图:

  1. metrics/precision(B)(精度):

    • 期望走势: 精度应逐步提升,且最终稳定在较高水平。精度的提升意味着模型减少了错误的正例预测。
    • 不理想的情况: 如果精度波动较大或迟迟不提升,可能意味着模型在学习过程中表现不稳定。
  2. metrics/recall(B)(召回率):

    • 期望走势: 召回率应逐渐提升并保持稳定在较高水平(例如 0.8-1.0),表明模型能够找到几乎所有的目标。
    • 不理想的情况: 召回率长期不变,或者在训练过程中大幅波动,可能表示模型在找到所有目标上存在困难。
  3. metrics/mAP50(B)(平均精度,IoU=50%):

    • 期望走势: mAP50 应呈持续上升趋势,达到某个稳定值。较高的 mAP50 表明模型在较为宽松的 IoU 阈值下表现良好。
    • 不理想的情况: 如果 mAP50 迟迟不提升,可能意味着模型对目标的定位和分类效果都不理想。
  4. metrics/mAP50-95(B)(平均精度,IoU=50-95%):

    • 期望走势: mAP50-95 也应逐步上升,但一般比 mAP50 要慢一些,因为这反映了模型在更严格的 IoU 阈值下的性能。较高的 mAP50-95 表示模型能在多种精度要求下正确预测目标。
    • 不理想的情况: 如果 mAP50-95 很低,说明模型在较高精度要求下(即 IoU 较大时)表现不佳。

总结

  • 良好表现的模型:训练和验证损失应该逐渐降低,最终趋于稳定。评价指标(如精度、召回率、mAP 等)应呈现逐步上升,并在高值区域趋于平稳。
  • 需要注意的情况:如果验证损失和训练损失出现较大差距,验证集上的损失不再下降,或评价指标不提升甚至下降,通常表明模型在验证集上的泛化能力较差,即可能过拟合。

具体查看: 

​​​​​​YOLO 性能指标 -Ultralytics YOLO 文档

Yolov8目标识别——模型训练结果可视化图分析与评估训练结果_yolov8结果解析-CSDN博客

 

上分建议

上分点一:数据集增强

        数据增强是机器学习和深度学习中常用的技术,用于通过从现有数据集中生成新的训练样本来提高模型的泛化能力。干净一致的数据对于创建性能良好的模型至关重要。常见的增强技术包括翻转、旋转、缩放和颜色调整。多个库,例如 Albumentations、Imgaug 和 TensorFlow的 ImageDataGenerator,可以生成这些增强。

数据增强方法描述
Mosaic Augmentation将四张训练图像组合成一张,增加物体尺度和位置的多样性。
Copy-Paste Augmentation复制一个图像的随机区域并粘贴到另一个图像上,生成新的训练样本。
Random Affine Transformations包括图像的随机旋转、缩放、平移和剪切,增加对几何变换的鲁棒性。
MixUp Augmentation通过线性组合两张图像及其标签创造合成图像,增加特征空间的泛化。
Albumentations一个支持多种增强技术的图像增强库,提供灵活的增强管道定义。
HSV Augmentation对图像的色相、饱和度和亮度进行随机变化,改变颜色属性。
Random Horizontal Flip沿水平轴随机翻转图像,增加对镜像变化的不变性。

参数名类型默认值取值范围描述
hsv_hfloat0.0150.0 - 1.0调整图像色调,引入颜色变异性,提高不同光照下的泛化能力。
hsv_sfloat0.70.0 - 1.0调整图像饱和度,改变颜色强度,模拟不同环境条件。
hsv_vfloat0.40.0 - 1.0调整图像亮度,帮助模型在不同光照下表现良好。
degreesfloat0-180 - +180随机旋转图像,提高识别不同方向物体的能力。
translatefloat0.10.0 - 1.0平移图像,帮助模型学习检测部分可见物体。
scalefloat0.5>=0.0缩放图像,模拟物体与相机之间的不同距离。
shearfloat0-180 - +180剪切图像,模拟从不同角度观察物体的效果。
perspectivefloat00.0 - 0.001应用随机透视变换,增强模型对3D空间物体的理解能力。
flipudfloat00.0 - 1.0上下翻转图像,增加数据变异性,不影响物体特征。
fliplrfloat0.50.0 - 1.0左右翻转图像,有助于学习对称物体和增加数据集多样性。
bgrfloat00.0 - 1.0翻转图像通道从RGB到BGR,提高对通道顺序错误的鲁棒性。
mosaicfloat10.0 - 1.0合成四张图像,模拟不同场景组合和物体交互,增强复杂场景理解。
mixupfloat00.0 - 1.0混合两张图像及标签,创建合成图像,增强泛化能力。
copy_pastefloat00.0 - 1.0复制物体并粘贴到另一图像,增加实例和学习遮挡。
auto_augmentstrrandaugment-自动应用预定义增强策略,优化分类任务。
erasingfloat0.40.0 - 0.9随机擦除图像部分,鼓励模型关注不明显特征。

上分点二:设置 YOLO 模型训练参数

https://docs.ultralytics.com/usage/cfg/#train-settings

        YOLO 模型的训练设置包括多种超参数和配置,这些设置会影响模型的性能、速度和准确性。微调涉及采用预先训练的模型并调整其参数以提高特定任务或数据集的性能。该过程也称为模型再训练,使模型能够更好地理解和预测在实际应用中将遇到的特定数据的结果。您可以根据模型评估重新训练模型,以获得最佳结果。

        通常,在初始训练时期,学习率从低开始,逐渐增加以稳定训练过程。但是,由于您的模型已经从以前的数据集中学习了一些特征,因此立即从更高的学习率开始可能更有益。在 YOLO 中绝大部分参数都可以使用默认值。

  1. imgsz: 训练时的目标图像尺寸,所有图像在此尺寸下缩放。

  2. save_period: 保存模型检查点的频率(周期数),-1 表示禁用。

  3. device: 用于训练的计算设备,可以是单个或多个 GPU,CPU 或苹果硅的 MPS。

  4. optimizer: 训练中使用的优化器,如 SGD、Adam 等,或 'auto' 以根据模型配置自动选择。

  5. momentum: SGD 的动量因子或 Adam 优化器的 beta1。

  6. weight_decay: L2 正则化项。

  7. warmup_epochs: 学习率预热的周期数。

  8. warmup_momentum: 预热阶段的初始动量。

  9. warmup_bias_lr: 预热阶段偏置参数的学习率。

  10. box: 边界框损失在损失函数中的权重。

  11. cls: 分类损失在总损失函数中的权重。

  12. dfl: 分布焦点损失的权重。

在YOLOv5及其后续版本中,imgsz可以被设置为一个整数,用于训练和验证模式,表示将输入图像调整为正方形的尺寸,例如imgsz=640意味着图像将被调整为640x640像素。对于预测和导出模式,imgsz可以被设置为一个列表,包含宽度和高度,例如imgsz=[640, 480],表示图像将被调整为640像素宽和480像素高。较大的图像尺寸可能会提高模型的准确性,但会增加计算量和内存消耗。较小的图像尺寸可能会降低模型的准确性,但会提高计算速度和内存效率。因此,用户应根据实际场景需求及硬件资源限制,设置合适的输入图像尺寸

上分点三:设置 YOLO 模型预测行为和性能

提高速度

        YOLO模型的预测结果通常包括多个组成部分,每个部分提供关于检测到的对象的不同信息。同时 YOLO 能够处理包括单独图像、图像集合、视频文件或实时视频流在内的多种数据源,也能够一次性处理多个图像或视频帧,进一步提高推理速度。

属性描述
cls类别概率,表示当前预测结果属于类别0的概率为0。
conf置信度,模型对其预测结果的置信度,接近92%。
data包含边界框坐标和置信度以及类别概率的原始数据。
id没有分配唯一的对象ID。
is_track预测结果不是来自跟踪的对象。
orig_shape输入图像的原始尺寸,这里是500x500像素。
shape预测结果张量的形状,表示一个边界框的六个值。
xywh归一化的边界框坐标,中心坐标和宽高。
xywhn归一化的边界框坐标(无偏移)。
xyxy原始边界框坐标,左上角和右下角坐标。
xyxyn归一化的原始边界框坐标。
from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

        YOLOv8模型的使用者提供了灵活性,允许根据特定应用场景的需求调整模型的行为和性能。例如,如果需要减少误报,可以提高conf阈值;如果需要提高模型的执行速度,可以在支持的硬件上使用half精度;如果需要处理视频数据并希望加快处理速度,可以调整vid_stride来跳过某些帧。这些参数的适当配置对于优化模型的预测性能至关重要。 

参数名类型默认值描述
conffloat0.25置信度阈值,用于设置检测对象的最小置信度。低于此阈值的检测对象将被忽略。调整此值有助于减少误报。
ioufloat0.7非最大值抑制(NMS)的交并比(IoU)阈值。较低的值通过消除重叠的边界框来减少检测数量,有助于减少重复项。
imgszint 或 tuple640推理时定义图像的大小。可以是单个整数(如640),用于将图像大小调整为正方形,或(height, width)元组。合适的尺寸可以提高检测精度和处理速度。
augmentboolFALSE启用预测时的数据增强(TTA),可能通过牺牲推理速度来提高检测的鲁棒性。

运行面板显示结果解读

 那三个loss越小越好。

YOLOv8 - Ultralytics YOLO Docs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值