【深度学习项目】目标检测之YOLO系列详解(一)

介绍

YOLO(You Only Look Once)是一种实时目标检测算法,由Joseph Redmon等人提出。与传统的基于滑动窗口和区域提案的目标检测方法不同,YOLO将目标检测问题框架化为一个单一的回归问题,直接从图像像素预测边界框和类别概率。

以下是YOLO的一些关键特点:

  • 统一的检测过程:YOLO在单个网络中同时预测多个类别的边界框和对象概率。这使得它能够以非常高的速度运行,适用于实时应用。
  • 全局理解图像:由于YOLO是在整个图像上进行预测,因此它隐式地编码了关于类别的上下文信息。这意味着它可以在一定程度上理解图像中的对象是如何相互关联的。
  • 简单性:YOLO模型结构相对简单,训练和推理都很容易实现,并且不需要复杂的管道或额外的步骤来生成区域建议。
  • 速度与精度的平衡:虽然YOLO强调速度,但它也试图保持较高的检测精度。不同的YOLO版本在速度和准确性之间进行了优化。
  • 泛化能力:YOLO通常能够很好地泛化到新的、未见过的数据集,因为它在训练过程中学习到了广泛的特征。

YOLO有多个版本,如YOLOv2, YOLOv3, YOLOv4, YOLOv5到YOLO11,每个新版本都在尝试改进其前代产品的性能,提高检测精度和速度,同时减少错误类型,比如背景假阳性。YOLOv3引入了多尺度预测,增强了小物体的检测能力;而YOLOv4则进一步提高了检测的速度和精度,采用了更先进的激活函数和正则化技术。YOLOv5以后是由Ultralytics公司开发的,不是原始作者发布的,但是它在社区中广泛使用并且具有更好的优化和支持。

YOLOv1

YOLOv1,即原始的YOLO(You Only Look Once)模型,是2016年由Joseph Redmon等人在论文《You Only Look Once: Unified, Real-Time Object Detection》中首次提出的。YOLOv1引入了一种全新的目标检测方法,它将目标检测视为一个回归问题来解决,而不是像传统的两阶段方法(如R-CNN系列)那样依赖于区域提案。

以下是YOLOv1的主要特点和工作原理:

网络结构

YOLOv1使用了一个类似于GoogLeNet的卷积神经网络结构,但是简化了某些部分,并且没有采用Inception模块。这个网络包含了24个卷积层,用于特征提取,以及2个全连接层,用于预测输出。

输出表示

YOLOv1将输入图像划分为S×S个网格(grid cell)。如果一个对象的中心落到了某个网格内,那么该网格就负责预测这个对象。每个网格预测B个边界框(bounding box)和这些框的置信度分数(confidence score),以及C类条件概率(conditional class probabilities)。因此,对于每个网格单元,输出张量的形状为S×S×(B*5+C)。

  • 边界框:每个边界框包含5个预测值:x, y, w, h和置信度。其中,x和y是相对于网格单元边界的坐标,w和h是相对于整张图片的比例。
  • 置信度:置信度反映了模型对边界框内含有对象的信心程度,同时也编码了预测框与真实框之间的IoU(Intersection over Union)。
  • 类别概率:每个网格只预测一组类别概率,不论该网格预测多少个边界框。

损失函数

YOLOv1定义了一个多部分的损失函数,用来同时优化分类精度、定位误差以及边界框的置信度。损失函数由以下几个部分组成:

  • 坐标预测的平方和误差
  • 网格单元内有对象时的置信度误差
  • 网格单元内无对象时的置信度误差(权重较小)
  • 类别预测的平方和误差

优点

  • 速度:YOLOv1可以在普通GPU上实现实时检测(约45帧每秒)。
  • 全局上下文信息:因为YOLOv1是在整个图像上做预测,所以它可以利用图像的全局信息来进行检测。

缺点

  • 召回率较低:由于每个网格只能预测两个边界框,所以当多个小物体位于同一个网格中时,YOLOv1可能会错过一些检测。
  • 定位误差较大:相比于其他方法,YOLOv1的定位准确性略差,特别是在预测边界框的位置时。
  • 泛化能力有限:当遇到训练集中未见过的物体排列或比例时,YOLOv1的表现可能不如预期。

尽管YOLOv1存在上述缺点,但它开创了单阶段目标检测算法的先河,并且启发了后续版本的发展,比如YOLOv2, YOLOv3等,这些版本在保持YOLO速度优势的同时,不断改进其准确性和鲁棒性。

论文思想

  1. 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
  2. 每个网格要预测B个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测C个类别的分数。

YOLOv2

YOLOv2,也被称为YOLO9000,是YOLO系列目标检测算法的第二个重要版本。它由Joseph Redmon和Ali Farhadi在2017年的论文《YOLO9000: Better, Faster, Stronger》中提出。相较于YOLOv1,YOLOv2进行了多项改进,提升了检测速度、精度以及模型的泛化能力。以下是YOLOv2的主要特点和改进:

改进点



  1. 更好的准确性
  • Batch Normalization:为所有卷积层添加了批量归一化(Batch Normalization),这不仅加快了训练过程,还减少了对其他正则化方法的需求,并且提高了模型的稳定性。
  • 高分辨率分类器:YOLOv2首先在ImageNet数据集上以448x448的分辨率预训练了一个分类网络10个epoch,然后再微调到检测任务上。这样可以更好地适应高分辨率输入。
  1. 更快的速度
  • Anchor Boxes:引入了类似于Faster R-CNN的先验框(Anchor Boxes)的概念,替换了YOLOv1中的手工设计的边界框预测方式。Anchor Boxes允许每个网格单元预测多个边界框,从而提高了召回率。
  • Dimension Clusters:通过K-means聚类在训练数据集上找到最适合的Anchor Boxes尺寸,而不是随机选择,这有助于提高定位的准确性。
  • Direct location prediction:为了保持模型的稳健性,YOLOv2直接预测边界框的位置偏移量,而不是使用log-space预测。
  1. 更强的泛化能力
  • Fine-grained features:为了更好地捕捉小物体,YOLOv2从早期的卷积层中提取细粒度特征,并与最终的特征图相结合。
  • Multi-scale training:YOLOv2采用了多尺度训练策略,在不同的迭代中随机改变网络的输入图像大小,使得模型能够处理各种不同分辨率的输入图像。
  1. 更多类别支持
  • Joint classification and detection:YOLOv2通过结合WordTree结构将COCO数据集的目标检测和ImageNet数据集的分类结合起来,使得模型可以同时识别超过9000种不同类型的对象。

网络架构

YOLOv2采用了一种新的基础网络叫做Darknet-19,它由19个卷积层和5个最大池化层组成。这个网络比原来的YOLOv1更加轻量化但性能更强大。Darknet-19的设计灵感来自于VGG16,但是通过一系列优化如减少滤波器数量和增加批标准化等手段来提升效率。


Darknet-19

Darknet-19(224x224) only requires 5.58 billion operations to process an image yet achieves 72.9% top-1 accuracy and 91.2%top-5 accuracy on ImageNet .

YOLOv3

YOLOv3(You Only Look Once v3)是YOLO系列目标检测算法的第三个主要版本,由Joseph Redmon和Ali Farhadi在2018年的论文《YOLOv3: An Incremental Improvement》中提出。相较于之前的版本,YOLOv3引入了多项改进以提高模型的准确性和鲁棒性,同时保持了实时检测的速度优势。以下是YOLOv3的主要特点和改进:

主要改进

  1. 多尺度预测
    YOLOv3采用了多尺度预测的方式,在三个不同的特征层上进行边界框预测:高分辨率、中等分辨率和低分辨率。这种设计使得模型能够更好地检测不同大小的目标,特别是小物体的检测能力得到了显著提升。
  2. 特征提取网络
    使用了Darknet-53作为特征提取网络,这是一个更深的卷积神经网络,包含了53个卷积层。Darknet-53借鉴了ResNet的设计理念,通过残差块(residual blocks)来构建,这有助于缓解深层网络中的梯度消失问题,并且提高了特征提取的效果。
  3. Anchor Boxes优化
    在YOLOv3中,Anchor Boxes是基于训练数据集上的边界框尺寸使用K-means聚类算法计算得出的。与YOLOv2相比,它为每个尺度设置了9个Anchor Boxes(3个尺度,每个尺度3个),从而更加精确地适应不同尺寸的对象。
  4. 分类机制
    YOLOv3不再采用softmax函数来做类别预测,而是对于每一个边界框都独立地预测一组对象存在与否的概率以及该对象属于各个类别的概率。这种方式允许模型处理单个边界框内包含多个类别的情况,并且避免了类别不平衡的问题。
  5. 损失函数调整
    YOLOv3对损失函数进行了微调,采用了二值交叉熵损失(binary cross-entropy loss)来替代之前版本中的均方误差(mean squared error)。此外,它还分别针对分类、置信度和边界框坐标定义了不同的损失部分。
  6. 数据预处理
    YOLOv3采用了随机缩放和平移的数据增强方法,确保输入图像的尺寸变化,增强了模型的泛化能力。

网络架构

  • Darknet-53:YOLOv3的基础网络,利用残差连接(skip connections)来促进信息流动,防止梯度消失,同时也增加了网络深度。
  • 路径聚合网络(PANet):虽然不是原版YOLOv3的一部分,但在许多实现中被采纳,用于加强特征融合,从高层语义信息到低层空间信息的传递。

Darknet-53


性能提升

YOLOv3在COCO数据集上的性能表现优异,达到了更高的平均精度(mAP),并且仍然保持了实时检测的速度。它在小物体检测方面尤其有了显著进步,这是由于其多尺度预测的能力和更强大的特征提取网络所致。

损失函数调整


置信度损失

类别损失


定位损失

相关推荐
睡觉狂魔er1 小时前
自动驾驶控制与规划——Project 2: 车辆横向控制
人工智能·机器学习·自动驾驶
♢.*1 小时前
自动驾驶2022-2024年论文汇总与解析
论文阅读·人工智能·计算机视觉·nlp·自动驾驶
程序猿000001号1 小时前
YOLOv11:目标检测的新高度
深度学习·yolo·目标检测
亿佛3 小时前
pure跟踪模拟 不算自动驾驶仿真
人工智能·机器学习
果冻人工智能3 小时前
人工智能大语言模型起源篇,低秩微调(LoRA)
人工智能·深度学习·语言模型
JiYH3 小时前
YOLO系列,从V1~V10,持续更新(Pytorch实现)
人工智能·pytorch·yolo
Milk夜雨3 小时前
机器学习一点基础
人工智能·机器学习
德林恩宝3 小时前
焦距与视差的关系及其对深度估计的影响
人工智能·数码相机·计算机视觉
一念之坤4 小时前
OpenCV的简单练习
人工智能·opencv·计算机视觉
sirius123451235 小时前
opencv-python的简单练习
python·opencv·计算机视觉