YOLO系列理论

YOLOYou Only Look Once,是一种流行的目标检测算法,用于在图像中实时检测和定位多个对象。YOLO的主要特点是其速度和准确性,它可以在一张图像中同时检测多个不同类别的对象,而不需要多次运行模型,即看一眼就能看出所有目标。
YOLO

🔥YOLOv1

论文: You Only Look Once: Unified, Real-Time Object Detection
网址: http://pjreddie.com/yolo/

思想

  1. 将一幅图分割成S×S个网格(grid cell),若某个标注框(目标)的中心在这个网格中,这个网格就负责预测该object
  2. 每个网格预测B个bounding box,即预测框,每个预测框除了预测位置(x,y,w,h),还要附带一个confidence(置信度,类似IoU,预测与实际框的交并比×预测概率),每个网格还要预测C个类别的分数(是该类目标的概率,各种独立,和不为1)。(x,y)是目标框的中心位置,是相对于负责预测的网格的,不会超过该网格

    举个例子:对于PASCAL VOC数据集(20类,即C=20),取S=7,B=2,那么需要预测的参数个数就是7×7×30,即7×7个网格,每个网格测20个类、2个框(每个框是x,y,w,h,confidence五个值),20+2×5=30

YOLOv1预测参数

网络结构

YOLOv1网络结构

  • 网络结构如上,通过多个卷积层和最大池化层之后,通过展平(flatten)及全连接层(fc)得到4096大小的向量,再通过全连接变成7×7×30的参数
  • 损失函数:Loss = bounding box损失 + confidence损失 + classes损失

缺点

  1. YOLOv1检测聚集的小目标时效果不好
  2. 当目标出现新的尺寸时检测效果差
  3. 主要的错误都来自于定位不准确

🔥YOLOv2

论文: YOLO9000: Better, Faster, Stronger
网址: http://pjreddie.com/yolo9000/

  • 性能更好,可以检测超过9000个目标,mAP最大能到78.6(544×544输入,40FPS),比YOLOv1的63.4高出不少
    YOLOv2网络结构

Better

  1. Batch Normalization:添加BN层(标准化)助于收敛,减少正则化处理,可以不用dropout来防止过拟合,上图网络结构当中,每个convolutional层都由卷积层、BN层、LeakyReLU函数组成

  2. High Resolution Classifier:更高分辨率的分类器,之前是224×224,现在采用448×448

  3. Convolutional With Anchor Boxes:v1定位效果不好,采用基于anchor的预测可以简化边界框预测问题,使网络更快学习收敛,提升了召回率(不漏测的概率)

  4. Dimension Clusters:使用kmeans聚类获取anchor,减少人为操作对经验的要求

    Anchor boxes(锚框)是一组预定义的框,每个框具有固定的尺寸和长宽比。YOLO算法使用这些锚框来预测图像中的目标位置。在每个网格单元(Grid cell)上,YOLO会为每个锚框生成预测,以确定哪个锚框最适合包围图像中的目标。对于每个标注(GT,ground truth)可能会有多个不同尺寸的anchor来计算
    这些anchor boxes允许模型在不同尺寸和长宽比的目标上进行预测,从而提高了模型的泛化能力。通过使用多个锚框,YOLO可以同时检测各种不同大小和形状的目标,而无需多个不同尺度的检测器。

  5. Direct Location Prediction:将预测位置通过sigmoid函数映射到0-1,保证每个anchor只负责预测目标中心有落在区域(grid cell)内的目标。提升稳定性,使得定位不会乱跑。

  6. Fine-Grained Features:观察v2的网络结构,其中有一路分支将高低层的信息通过 PassThrough Layer进行融合,低层的信息往往具有更多细节(未池化),利于识别小目标
    PassThrough层操作过程
    如上,通过将高分辨率的图像拆分成多个更小的矩阵,获得更高通道数的低分辨率(高层)的信息形式,这种采样即Focus操作

  7. Multi-Scale Training:将图片缩放到不同尺度进行训练,提升鲁棒性。每迭代10个batch就随机地缩放图片,缩放因子是32,即尺寸是32整数倍,最小320×320,最大608×608

Faster

YOLOv2主干网络
使用Darknet-19(19个卷积层)网络,ImageNet数据集,训练达到72.9%的top-1准确度,91.2%的top-5准确度

之前提到,预测目标时会对每个类都计算概率,Top-1指的是概率最大的类别就是该目标所属的类别(即正确的类别),Top-5指的是概率前5中有正确的类别

🔥YOLOv3

论文: YOLOv3: An Incremental Improvement
使用Darknet-53网络,速度比ResNet-152快两倍多,但是top-1准确率相当。

Darknet和Resnet区别,虽然都有残差层,但是前者下采样(降低分辨率)不依靠池化层,而是使用卷积层

YOLOv3预测边界框

  • 和v2的一样,通过Sigmoid函数将bx和by限制在负责该目标检测的网格内,保证预测的目标中心不超过网格。图中虚线框是anchor,蓝色代表预测框

YOLOv3正样本

  • 正样本扩充:如上图,将多个尺寸不同的anchor(AT)和GT进行IoU计算预测,若大于阈值,则确认是正样本,即此时GT中心落在的这个网格所对应的AT为正样本,如果有多个AT都符合则存在多个正样本。没匹配到目标的就是负样本
  • 损失计算:Loss = a×置信度损失 + b×分类损失 + c×定位损失,a、b、c是平衡系数

YOLOv3 SPP

  • YOLOv3 SPP 是 YOLOv3 模型的一个变种,其中的 “SPP” 意为 “Spatial Pyramid Pooling”(空间金字塔池化),它是一种池化层的结构。这个结构的主要目的是改进 YOLOv3 的感受野,使其能够检测不同尺寸的目标。

  • Mosaic图像增强:将多张图拼接起来,增加了数据多样性、目标个数,BN也可以一次性统计多个图像的参数

SPP模块

  • SPP模块如上,通过不同的池化层实现了不同尺度信息的融合

  • IoU Loss:基于IoU计算的损失,当两框完全不相交时无法计算
    GIoU损失

  • GIoU Loss(Generalized):如上,A是指蓝框部分面积(能框住两框的最小矩形),u是指两框并集,这样GIoU可以计算两框完全不相交的时候的损失。但是GIoU和IoU都存在收敛慢的问题。
    DIoU损失

  • DIoU Loss(Distance):通过对两框的欧氏距离的引入可以直接最小化两个boxes的间距,收敛快。
    CIoU损失

  • CIoU Loss(Complete):将重叠面积、中心点距离、长宽比结合的优秀的回归定位损失。

🔥YOLOv4

论文: YOLOv4: Optimal Speed and Accuracy of Object Detection
网址: http://arxiv.org/abs/2004.10934

网络结构

采用了SPP结构,和v3的类似不再赘述
CSP结构
CSP结构能提升网络加快网络的推理速度、减少对显存的使用、提升学习能力,这种跳跃连接的分支结构和ResNet残差结构有异曲同工之处
PAN结构
在图中a部分的特征金字塔FPN(从高层向底层融合)的基础上增加了b部分的从低层向高层融合的部分
YOLOv4网络结构
v4的整体结构如上,对于不同尺度都有对应的输出,即PAN

一个卷积层中k代表卷积核大小,s代表卷积核移动的步长,p代表外补丁padding,c代表通道数(深度)

优化策略

消除grid敏感度(Eliminate grid sensitivity)

  • 以往,当GT(标注)的中心在网格的左上角时,我们希望bx中sigmoid函数(σ)的值为0,但是sigmoid函数只有当x接近负无穷时才能到达0。如上图,v4采用优化策略Eliminate grid sensitivity,将sigmoid的值乘以scale来扩大值域解决这个问题,通常scale取2,bx和by的范围也从(-1,1)扩充到(-0.5,1.5)。
  • 同v3,v4也采用了图像拼接Mosaic来丰富数据集,不再赘述

YOLOv4进一步扩充正样本

  • IoU threshold(match positive samples),v3中的正样本选取中,当一个网格有多个AT正样本时会同时分配,在v4中,由于之前提到的优化策略扩大了sigmoid的值域,使得bx和by的范围也从(-1,1)扩充到(-0.5,1.5),负责预测的范围扩大了。所以如图,一个GT的中心可以处在三个网格的负责预测的范围之内。这就使得只有GT的中心在网格中心时,才会出现仅一个网格负责该GT的情况。

🔥YOLOv5

没有出论文
YOLOv5低分辨率
YOLOv5高分辨率

  • 第一张图是针对低分辨率(640)的图像,第二张图带6的是针对高分辨率(1280)的图像。可以看到v5的速度是比较快的

网络结构

YOLOv5网络结构

  • 同样采用了CSP、PAN结构
    SPPF模块
  • v5中将SPP改成SPPF模块,将原本的并行输出改为串行后分别输出,两个k5最大池化和一个k9等效,3个k5和一个k13等效,上下完全等效,但是SPPF效率更高计算量下降(快了2倍以上)

数据增强

  • 图像拼接Mosaic,同v3、v4
    Copy paste
  • Copy paste将图像中的目标分割出来,复制粘贴到其他图像中,需要有对目标分割的标签。
  • Random affine,随机变换,包括旋转、缩放、平移等基本操作
  • MixUp,将两个图片按不同透明度合成
  • Albumentations,滤波、直方图均衡化以及改变图片质量等图像处理操作
  • Augment HSV,调整饱和度、浓度等色彩属性
  • Random horizontal flip,水平翻转

训练策略

  • 多尺度训练(0.5—1.5倍,且32倍数)
  • 自动为尺度变化大的目标重新聚类生成新anchor
  • warmup,热身训练,学习率从很小的值逐渐增长到设定的值;余弦变化降低学习率(余弦退火)
  • EMA,为学习变量增加动量,使得参数变化平滑
  • Mixed precision,混合精度训练,减少对GPU显存占用,加快训练,需要GPU支持
  • Evolve hyper-parameters,超参数

损失计算

分类损失:BCE Loss,只计算正样本的损失
obj损失:BCE Loss,obj是预测目标边界框和GT的CIoU,计算所有样本
定位损失:CIoU Loss,只计算正样本的损失

优化策略

YOLOv5限制w和h

  • v4当中,消除了grid的敏感度,但是w和h的值域不受限制,v5中更改了计算公式解决了这个问题
    匹配正样本
  • v5中使用多个尺度的anchor来匹配正样本,当GT在0.25倍到4倍anchor之间时匹配为正样本

🔥YOLOX

论文:YOLOX: Exceeding YOLO Series in 2021
网址:https://arxiv.org/abs/2107.08430

对标YOLOv5,有一定性能提升。选择X和v5:分辨率高时使用v5(带6的权重模型),分辨率低两者皆可。

网络结构

YOLOX网络结构
解耦检测头

  • 与v5相比,使用不同的head(解耦检测头),这能加速收敛,提升AP。
  • 解耦检测头:将输出分为类别检测(Cls)、预测目标回归(Reg)、预测obj(Obj/IoU)三个分支,网络结构图中三个检测头参数不共享

Anchor-Free

YOLOX借鉴FCOS网络使用了Anchor-Free。
之前的这些YOLO系列网络都是Anchor-Base网络,基于Anchor的网络,存在一些问题:

  1. 首先检测器性能与Anchor大小和高宽比相关性很大;
  2. 一般Anchor的大小和高宽比固定,很难处理形状变化大的目标(书本的横竖放置),迁移到其他任务还需要重新设计;
  3. 为了更高的召回率,需要生成上万个anchor boxes,这使得大部分boxes都会是负样本,正样本分布极度不均;
  4. anchor也使得训练很繁琐,计算量大。

Anchor-Free Regression
head中可以看到,regression部分预测的4个参数,预测点与预测目标四侧的距离与预测点坐标进行运算,得到预测目标左上角和右下角的坐标。
Anchor-Free Centerness
centerness预测的参数反映了预测点和预测目标中心的远近,centerness为0在边界,为1在中心。

优化策略

SimOTA

  • 正负样本匹配SimOTA,将匹配样本的过程视为以最低成本cost将GT分配给对应样本的问题
  • Copyrights © 2023-2025 LegendLeo Chen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信