YOLO系列论文解读


最近在看YOLO系列的论文,为了更好地理解YOLO算法的思想,我整理总结形成了这篇博客,文中部分内容为个人理解,部分内容来源于网上资源,如有错误的地方,希望各位能够及时指正,共同进步!


前言

物体检测主流的算法框架大致分为one-stage(单阶段)与two-stage(两阶段)。

  • 双阶段又称为基于候选区域的目标识别算法,其实现识别的过程主要有两个步骤,首先网络结构模仿人类视觉注意力机制,从全局的角度扫描整张图像,再将注意力放在可能有待测物体的区域,然后利用卷积神经网络对待测区域进行分类、定位。简单理解就是先选取一些预选框,再在预选框中确定目标所在位置。经典的代表算法如物体检测的开山之作Faster-RCNN,及其后续升级版本Master-RCNN。
    在这里插入图片描述
  • 基于单阶段目标识别算法主要是通过使用CNN卷积进行目标的特征提取,直接回归得到目标的类别和坐标(x,y,h,w),与双阶段算法相比更快,可以达到实时检测的效果。现阶段主流的单阶段目标识别算法有YOLO系列、SSD系列等。
    在这里插入图片描述


指标分析

在深度学习的各种领域中,都有一套与之相匹配的评价指标体系。在目标识别领域,常常用来评估模型效果的指标有mAP、精度、召回率,FPS等。其中精度表示检测的目标与实际框的吻合程度,召回率表示漏检的概率,召回率越高漏检的概率就越小,FPS定义为每秒传输帧数,即每秒处理的图片数。在深度学习中,精度和召回率一般不能同时“兼得”,采取一些改进方法提高精度的同时往往会导致召回率下降,反之亦然。所以单看精度或者召回率无法全面的评价识别效果,因此通常使用mAP综合衡量检测效果。
在说mAP值之前不得不提到另一个非常重要的概念,IOU(交并比),顾名思义是交集和并集的比值,这里的交集和并集是针对真实值和预测值来说的。
在这里插入图片描述
为了计算precision和recall,与所有机器学习问题一样,我们必须鉴别出True Positives(真正例)、False Positives(假正例)、True Negatives(真负例)和 False Negatives(假负例)。具体定义如下:

正类负类
被检测到True Positive(TP,正确地识别出目标)False Positive(FP,将其它目标错误地识别成检测目标)
未被检测到False Negative(FN,目标未被检测出来)True Negative(TN,正确识别出检测目标外的其他目标)

在这里插入图片描述
mAP定义为PR曲线与坐标轴所围成的面积(取最大值,即图中A1+A2+A3+A4)
在这里插入图片描述


YOLOv1

1、基本思想

将特征图分为s×s个格子(grid cell),每个格子设置B个预测框,特征图中待检测物体由其中心点所在格子负责预测,再根据boundingbox 和ground truth的IOU的大小,选择IOU较大的预测框进行微调。每个预测框要对位置、尺寸、置信度,即x, y, w, h, confidence进行预测,其中(x, y)为预测框中心,相对于整张图像边界的位置坐标,(w, h)为预测框的边长相对于原图像的边长的缩放值。

  • (x, y): 是指bounding box的预测框的中心坐标相较于该bounding box归属的grid cell左上角的偏移量,在0-1之间。
  • (w, h): 是指该bounding box的宽和高,但也归一化到了0-1之间,表示相较于原始图像的宽和高。
    在这里插入图片描述
    每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (B*5+C)的一个向量

2、网络架构

(1)YOLO主要是建立一个CNN网络生成预测7×7×1024 的张量 。
(2)然后使用两个全连接层执行线性回归,以进行7×7×2 边界框预测。将具有高置信度得分(大于0.25)的结果作为最终预测。
(3)在3×3的卷积后通常会接一个通道数更低1×1的卷积,这种方式既降低了计算量,同时也提升了模型的非线性能力。
(4)除了最后一层使用了线性激活函数外,其余层的激活函数为 Leaky ReLU 。
(5)在训练中使用了 Dropout 与数据增强的方法来防止过拟合。
(6)对于最后一个卷积层,它输出一个形状为 (7, 7, 1024) 的张量。 然后张量展开。使用2个全连接层作为一种线性回归的形式,它输出1470个参数,然后reshape为 (7, 7, 30) 。
在这里插入图片描述
输入图像的尺寸为448×448,经过24个卷积层,2个全连接的层(FC),最后在reshape操作,输出的特征图大小为7×7×30。

  • 7x7表示最终输出的特征图划分为7x7个网格
  • 5+5表示选取了两种先验框,每个框预测5个值(x,y,w,h,c)
  • 20表示可以针对当前数据集做20分类
  • 符合前面所提到的计算方式 S x S x (B*5 + C)

3、损失函数

损失函数包含:
localization loss -> 位置误差
confidence loss -> 置信度误差
classification loss -> 分类误差
在这里插入图片描述
(1)位置误差
负责检测物体的框中心点(x, y)定位误差和框的高宽(w,h)定位误差。(根号的作用是为了修正对大小框一视同仁的缺点,削弱大框的误差)
(2)置信度误差
负责检测到前景和背景的框的置信度误差(实际图像中背景会多于前景,因此在检测到背景的误差计算中加入权重参数,以减小背景对损失函数的影响)。
(3)分类误差
负责检测物体的预测分类的误差。

4、NMS(非极大值抑制)

NMS算法主要解决的是一个目标被多次检测的问题,意义主要在于在一个区域里交叠的很多框选一个最优的。即在测试时检测到多个重叠的框,将IOU大于阈值的框进行排序,取置信度最大的框作为最终的预测框。
注意: NMS只发生在预测阶段,训练阶段是不能用NMS的,因为在训练阶段不管这个框是否用于预测物体的,他都和损失函数相关,不能随便重置成0。

5、总结

YOLOv1的主要优点在于快速、简单。但也有一定的局限性:

  • 每个cell只能预测两个框,并且只能有一个类。对相互靠的很近的物体和很小的群体检测效果不好。
  • 长宽比单一,能够预测的物体具有局限性,对于非常规物体难以检测。泛化能力偏弱。


YOLOv2

1、Batch Normalization

  • 舍弃Dropout,卷积后全部加入Batch Normalization
  • 网络的每一层输入都做了归一化,收敛相对更容易
  • 经过Batch Normalization处理后的网络提升2%左右的mAP

2、更大的分辨率

  • v1中预训练使用的是分类数据集,大小是224×224 ,然后迁移学习,微调时使用YOLO模型做目标检测的时候才将输入变成448 × 448。
  • v2直接在预训练中输入的就是448×448的尺寸,微调的时候也是448 × 448。
  • 使用高分辨率分类器后,使mAP提升了近4%

3、网络结构(DarkNet-19)

  • 没有全连接层,实际输入为416x416
  • 5次降采样(Maxpool),输出变为原始输入的1/(2^5),即13x13
  • 卷积核采用3x3和1x1,降低了参数量
    在这里插入图片描述

3、基于聚类提取先验框

引入先验框,使预测的box数量更多,在YOLO网络架构中,候选框的相对坐标是直接由全连接层生成的,而V2算法借鉴Faster R-CNN使用先验框的方法,通过计算偏移量来修正得到候选框,改进后的网络虽然mAP下降了0.3%但recall却提高了7%
Faster R-CNN的先验框都是人为设定的,不一定完全适合数据集。V2版本尝试统计出更符合样本中对象尺寸的先验框,减少偏移难度,在计算聚类距离时,因为欧式距离算法会使得尺寸大的先验框产生的误差大,因此采取新的计算方法来计算聚类距离:
在这里插入图片描述
通过聚类提取先验框和对边框的直接位置预测提高了5%mAP
如下图,选取不同的k值(聚类的个数)运行K-means算法,并画出平均IOU和K值的曲线图。当k = 5时,可以很好的权衡模型复杂性和高召回率,因此v2选取的k为5。
在这里插入图片描述

4、直接位置预测(Directed Location Prediction)

AnchorBox的方法会使模型不稳定,RPN在随机初始化的情况下,需要很长时间才能稳定到预测合理偏移量 。所以YOLOv2沿用YOLOv1,预测相对于网格单元位置的位置坐标。具体方法为:预测边界框中心点相对于对应cell左上角位置的相对偏移值。将网格归一化为1×1,坐标控制在每个网格内,同时配合sigmod函数将预测值转换到0~1之间的办法,做到每一个Anchor只负责检测周围正负一个单位以内的目标box。比起使用锚框的版本,mAP提高了近5%
在这里插入图片描述

5、细粒度的特征(Fine-Grained Features)

YOLOv2中输入416x416经过卷积网络下采样最后输出是13x13,较小的对象可能特征已经不明显甚至被忽略掉。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。YOLOv2引入一种称为passthrough层的方法在特征图中保留一些细节信息,使得mAP略微提高1%
直通层( passthrough layer)

  • 将相邻的特征叠加到不同的通道来,将高分辨率的特征与低分辨率的特征连接起来
  • 将前层26×26×512的特征图转换为4×13×13×512的特征图,并与原最后层特征图进行拼接。
  • 最终的输出为13×13×3072(3072=4×512+1024)
  • 拆分并不是简单的“两刀切4块”,而是在每个2×2的小区域上都选择一块进行重组
    在这里插入图片描述

6、多尺度的训练(Multi-Scale Training)

YOLOv1输入尺寸必须是448x448,YOLOv2希望可以运行于不同尺寸。且YOLOv2只有卷积和池化层,因此可以随意改变尺寸。所以YOLOv2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352……608},最小320x320,最大608x608,网络会自动改变尺寸,并继续训练的过程。这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务。


YOLOv3

1、跨尺度预测(Predictions Across Scales)

YOLOv3借鉴了FPN的方法,采用多尺度的特征图对不同大小的物体进行检测,以提升小物体的预测能力。
在这里插入图片描述
1)YOLOv3采用了3个不同尺度的特征图(三个不同卷积层提取的特征)
YOLOv3通过下采样32倍、16倍和8倍得到3个不同尺度的特征图。
在这里插入图片描述


在这里插入图片描述

2)YOLOv3每个尺度的特征图上使用3个anchor box。
使用dimension clusters得到9个聚类中心(anchor boxes),并将这些anchor boxes划分到3个尺度特征图上,尺度更大的特征图使用更小的先验框。
在这里插入图片描述

2、残差连接

VGG网络中采用了19层,结果发现层数继续增加反而会导致效果下降。YOLOv3中用了resnet思想,堆叠更多的层数来进行特征提取,核心思想就是让网络提取特征的效果至少不比原来差。
在这里插入图片描述

3、核心网络架构

  • 没有池化和全连接层,全部采用卷积
  • 下采样通过sride为2实现
  • 3种scale,9种先验框
    在这里插入图片描述

(1)第一种尺度:
特征图: 对原图下采样32x得到(13 x 13)特征图
预测: 在上述特征图后添加几个卷积层,最后输出一个 N × N × [3 ∗ (4 + 1 + 80)] 的张量表示预测。——图中第3个红色部分
最终输出: [13, 13, 255]
(2)第二种尺度:
特征图: 来源于两种计算
1.对原图下采样16x得到 (26 x 26)特征图
2.对第一种尺度得到的(13 x 13)特征图进行上采样,得到(26 x 26)特征图。
两种计算得到的(26 x 26)特征图通过连接合并在一起。
预测: 在合并后的特征图后添加几个卷积层,最后输出一个 N × N × [3 ∗ (4 + 1 + 80)] 的张量表示预测。这个张量的大小是尺度一输出张量大小的两倍。——图中第2个红色部分
最终输出: [26, 26, 255]
(3)第三种尺度:
特征图: 来源于两种计算
1.对原图下采样8x得到 (52 x 52)特征图
2.对第二种尺度得到的(26 x 26)特征图进行上采样,得到(52 x 52)特征图。
两种方式得到的(52 x 52)的特征图通过连接合并在一起。
预测: 在合并后的特征图后添加几个卷积层,最后输出一个 N × N × [3 ∗ (4 + 1 + 80)] 的张量表示预测。这个张量的大小是尺度二输出的两倍----图中第1个红色部分。
对第三尺度的预测受益于所有的先验计算以及网络早期的细粒度特性。
最终输出: [52, 52, 255]

4、softmax改进

  • 用于分类的softmax层修改为逻辑分类器,将每一个类别都做二分类,可以做多标签分类
  • 使用logistic激活函数,与设定的阈值进行比较,判断每一个类别是/不是
    在这里插入图片描述


YOLOv4

  • 论文:https://arxiv.org/pdf/2004.10934.pdf
  • 代码:mirrors / alexeyab / darknet · GitCode
    如果有阅读过YOLOv4这篇论文的小伙伴,你会发现作者就是把当年所有的常用技术罗列了一遍,然后做了一堆消融实验。结合了大量前人研究技术,加以组合并进行适当创新,达到了速度和精度的完美平衡。下面分别从 Bag of freebies, Bag of specials来讨论小技巧的改进。

1、Bag of freebies(数据层改进)

  • 只增加训练成本,但是能显著提高精度,并不影响推理速度
  • 数据增强方法:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转等
  • 网络正则化方法:Dropout、Dropblock等
  • 边界盒(BBox)回归的目标函数
    1)数据增强
    (1)像素级调整
    ①光度失真: brightness(亮度)、contrast(对比度)、hue(色度)、saturation(饱和度)、noise(噪声)
    ②几何失真: scaling(缩放尺寸)、cropping(裁剪)、flipping(翻转)、rotating(旋转)
    (2)模拟目标遮挡
    ①erase(擦除)、CutOut(剪切): 随机选择图像的矩形区域,并填充随机或互补的零值
    ②hide-and-seek和grid mask: 随机或均匀地选择图像中的多个矩形区域,并将它们替换为全零
    ③将上述方式作用于特征图上: DropOut、DropConnect、DropBlock
    (3)将多张图像组合在一起
    ①MixUp: 使用两个图像以不同的系数比率相乘后叠加,利用叠加比率调整标签
    ②CutMix: 将裁剪的图像覆盖到其他图像的矩形区域,并根据混合区域大小调整标签
    (4)使用style transfer GAN进行数据扩充,有效减少CNN学习到的纹理偏差。
    2)解决数据集中语义分布偏差问题
    ①两阶段对象检测器: 使用硬反例挖掘或在线硬例挖掘来解决。不适用于单级目标检测。
    ②单阶段目标检测器: focal损来处理各个类之间存在的数据不平衡问题。
    3)边界框(BBox)回归的目标函数
    IoU loss: 将预测BBox区域的区域和真实BBox区域考虑在内。IOU=0时,无法计算梯度(梯度消失),另外,相同的IOU无法反映实际情况 。
    在这里插入图片描述
    GIoU loss: 除了覆盖区域外,还包括了物体的形状和方向。他们提出寻找能够同时覆盖预测框和真实框的最小BBox©,并以此BBox作为分母来代替IoU损失中原来使用的分母。
    在这里插入图片描述
    在不重叠情况下能够让预测框尽可能朝着真实框前进,解决了梯度消失问题,但在重叠时依然无法反映实际情况。
    在这里插入图片描述
    DIoU loss: 它额外考虑了物体中心的距离。分式中分子计算预测框与真实框中心点的欧氏距离d,分母是能够同时覆盖预测框和真实框的最小Box的对角线长度c。
    在这里插入图片描述
    在这里插入图片描述
    直接优化距离,速度更快,并且能够解决GIOU存在的问题。
    在这里插入图片描述
    CIoU loss : 同时考虑了重叠区域、中心点之间的距离和纵横比。对于BBox回归问题,CIoU具有更好的收敛速度和精度。
    在这里插入图片描述

2、Bag of specials(网络设计层改进)

  • 只增加少量推理代价,却能显著提高模型精度
    1)增强感受野这一部分我自己也不是特别清楚,所以不做过多分析
    ①改进的SPP模块。
    在这里插入图片描述
    ②ASPP模块
    在这里插入图片描述
    ③RFB模块
    在这里插入图片描述
    2)注意力机制
    ①Spatial Attention Module空间注意模块(SAM)
    在这里插入图片描述
    ②v4中的SAM
    在这里插入图片描述
    3)特征融合
    ①针对FPN进行改进(下图为FPN模块)
    FPN
    ②引入自底向上的路径,使得底层信息更容易传到顶部(下图为PAN模块)
    在这里插入图片描述
    ③v4中使用的不是加法而是拼接
    在这里插入图片描述
    4)激活函数
    ①LReLU和PReLU: 主要目的是解决输出小于0时ReLU的梯度为零的问题。
    ②ReLU6和hard-Swish: 专门为量化网络设计的。
    ③SELU: 针对神经网络的自归一化问题。
    ④Swish和Mish: 都是连续可微的激活函数。
    在这里插入图片描述
    5)后处理方法
    ①NMS: 目标检测中常用的后处理方法是NMS, NMS可以对预测较差的bbox进行过滤,只保留响应较高的候选bbox。NMS试图改进的方法与优化目标函数的方法是一致的。NMS提出的原始方法没有考虑上下文信息,所以在R-CNN中加入了分类的置信分作为参考,按照置信分的顺序,从高到低依次进行贪心NMS。
    ②soft NMS: 考虑了对象的遮挡可能导致带IoU分数的贪婪NMS的信心分数下降的问题。
    ③DIoU NMS: 在soft NMS的基础上,将中心点距离信息添加到BBox筛选过程中。值得一提的是,由于以上的后处理方法都没有直接引用捕获的图像特征,因此在后续的无锚方法开发中不再需要后处理。
    6)YOLOv4网络架构
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值