YOLO 模型学习和优化方法(Datawhale X AI夏令营)

231 阅读5分钟

YOLO 模型介绍

‌‌‌‌  物体检测是计算机视觉领域的一个重要任务,它的目标是在图像或视频帧中识别和定位感兴趣的物体。物体检测算法不仅要识别图像中的对象属于哪个类别,还要确定它们在图像中的具体位置,通常以边界框(bounding box)的形式表示。以下是物体检测的一些关键概念和步骤:

  1. 输入:物体检测算法的输入通常是一张图像或视频帧。
  2. 特征提取:算法使用深度学习模型(如卷积神经网络CNN)来提取图像的特征。这些特征捕捉了图像中的视觉信息,为后续的物体识别和定位提供基础。
  3. 候选区域生成:在某些检测算法中,首先需要生成图像中的候选区域,这些区域可能包含感兴趣的物体。
  4. 区域分类和边界框回归:对于每个候选区域,算法需要判断它是否包含特定类别的物体,并预测物体的边界框。这通常涉及到分类任务和回归任务的结合。
  5. 非极大值抑制(NMS):在检测过程中,可能会产生多个重叠的边界框,用于表示同一物体。NMS是一种常用的技术,用于选择最佳的边界框并去除多余的框。

‌‌‌‌  物体检测算法主要分为两类:One-Stage(一阶段)和Two-Stage(两阶段)模型。

  • One-Stage模型,如YOLO(You Only Look Once)和SSD(Single Shot Detection),直接在单次网络评估中预测图像中所有物体的类别和位置信息。适合实时场景,比如对速度有较高要求,如视频流处理或实时监控。
  • Two-Stage模型,如Faster R-CNN,①首先使用区域提议网络(Region Proposal Network, RPN)生成候选区域,②然后对这些区域进行分类和边界框的精细调整。这种方法的优点是精度高,但速度相对较慢 。如果对精度有更高要求,如在需要高精度识别的科研或专业领域。

‌‌‌‌  YOLO的核心思想是将目标检测任务视为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率的映射。这种设计使得YOLO能够以非常快的速度进行目标检测,同时保持较高的精度,特别适合需要实时处理的应用场景。

  1. YOLO算法在单个网络评估中同时预测多个边界框和类别概率,而不是像传统的滑动窗口方法那样多次评估。
  2. YOLO为每个边界框预测一个置信度,这个置信度反映了边界框包含目标的概率以及预测的类别。置信度的计算公式是:Pr(Object) * IOU(pred, truth),其中Pr(Object)表示格子中存在目标的概率,IOU(pred, truth)表示预测框和真实框的交并比。 ‌‌‌‌  YOLO系列已经经历了多次迭代,每一次迭代都在速度、准确性和计算效率方面做出了显著的贡献。不同版本模型的精度和延迟如下图所示。 image.png

YOLO 数据集格式

‌‌‌‌  YOLO算法的标注格式主要使用.txt文件来存储图像中物体的标注信息。每个图像都有一个对应的.txt文件,文件中的每行表示一个物体的标注,包括物体的类别索引和边界框(bounding box)的坐标。

class x_center y _center width height

数据路径配置文件:

# 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
names: ["0", '1']  # class names

YOLO 训练日志

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

  • 模型权重 (.pt.pth 文件): 训练过程中保存的模型权重,可以用于后续的测试或继续训练。
  • 日志文件 (.log 文件): 包含训练过程中的所有输出信息,如损失值、精度、速度等。
  • 配置文件 (.yaml.cfg 文件): 训练时使用的配置文件副本,记录了数据路径、类别名、模型架构等设置。
  • 图表和可视化: 有时YOLO会生成训练过程中的性能图表,如损失曲线、精度曲线等。
  • 测试结果: 如果训练过程中包括了测试阶段,可能会有测试结果的保存,如检测结果的图片或统计数据。

提高模型精度的常用方法

‌‌‌‌  如果想要在原有代码上提高模型思路,主要有如下操作:

  • 增加训练的数据集:增加更多的视频到训练集中进行训练。
  • 更改模型预训练权重:模型越大,需要的硬件性能越高。
  • 数据增强:增加数据集的多样性和数量。 image.png
  • 调整超参数:优化学习率、批次大小等参数。 image.png

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