本文最后更新于:2021年7月11日 下午

目标检测器的构成(YOLOv4):

img

  • Backbone:进行预训练。
  • Neck:从不同的步骤中收集特征图

    • Feature Pyramid Network(FPN),Path Aggregation Network(PAN),BiFPN和NAS-FPN。
    • 一个neck由多个bottom-up路径和多个top-down路径组成
  • Head:预测类别信息和目标物体的边界框。

    • One-stage:
      • YOLO, SSD和RetinaNet
      • Anchor-free:CenterNet, CornerNet, FCOS
    • Two-stage:
      • R-CNN系列(fast R-CNN, faster R-CNN,R-FCN和Libra R-CNN)
      • Anchor-free:RepPoints

检测器通常由两部分组成:backbonehead。前者在ImageNet上进行预训练,后者用来预测类别信息和目标物体的边界框。在GPU平台上运行的检测器,它们的backbone可能是VGG, ResNet, ResNetXt,或者是DenseNet。在CPU平台上运行的检测器,它们的backbone可能是SqueezeNet,MobileNet或者是ShuffleNet。对于head部分,通常分为两类:one-stage和two-stage的目标检测器。Two-stage的目标检测器的代表是R-CNN系列,包括:fast R-CNN, faster R-CNN,R-FCN和Libra R-CNN. 还有基于anchor-free的Two-stage的目标检测器,比如RepPoints。One-stage目标检测器的代表模型是YOLO, SSD和RetinaNet。在最近几年,出现了基于anchor-free的one-stage的算法,比如CenterNet, CornerNet, FCOS等等。在最近几年,目标检测器在backbone和head之间会插入一些网络层,这些网络层通常用来从不同的步骤中收集特征图。我们将其称之为目标检测器的neck。通常,一个neck由多个bottom-up路径和多个top-down路径组成。使用这种机制的网络包括Feature Pyramid Network(FPN),Path Aggregation Network(PAN),BiFPN和NAS-FPN。

一个普通的目标检测器由下面四个部分组成:

image-20201113092812981

1.two-stage:(基于候选窗口)

提取候选区域、CNN训练 两步

R-CNN和Fast R-CNN使用该方法提取候选窗口。

  • 传统目标检测算法使用穷举法或滑动窗口法来产生候选窗口,产生的冗余候选区域较多。
  • Selective Search方法框架:
    • 输入:彩色图片。
    • 输出:物体可能的位置,实际上是很多的矩形坐标。
    • 首先,将图片初始化为很多小区域R。初始化一个相似集合为空集:S
    • 计算所有相邻区域之间的相似度(考虑了颜色、纹理、尺寸和空间交叠4个参数),放入集合 S 中,集合 S 保存的是一个区域对以及它们之间的相似度。
    • 找出 S 中相似度最高的区域对,将它们合并,并从 S 中删除与它们相关的所有相似度和区域对。重新计算这个新区域与周围区域的相似度,放入集合 S 中,并将这个新合并的区域放入集合 R 中。重复这个步骤直到 S 为空。
    • 从 R 中找出所有区域的 bounding box(即包围该区域的最小矩形框),这些 box 就是物体可能的区域。

1.2 R-CNN

img

  • R-CNN系列算法由3个独立的步骤组成:产生候选窗口、特征提取、SVM分类及窗口回归。
  • R-CNN总体思路: 通过Selective Search检测出约2000个Region proposals ——> 使用CNN提取Region特征——>使用SVM对提取到的特征进行分类 ——>执行非极大值抑制得到Bbox及其类别
  • 细节:
    • R-CNN采用Selective Search生成候选区域
    • R-CNN采用AlexNet网络
    • 先在ImageNet上对AlexNet进行预训练,然后利用成熟的权重参数在PASCAL VOC上进行fine-tune.
    • R-CNN在Pascal VOC 2012 的数据集上,能够将目标检测的验证指标 mAP 提升到 53.3%,这相对于之前最好的结果提升了 30%。
  • 缺点:
    • 训练时间长:分阶段多次训练,而且对每个候选区域都要单独计算一次Feature map。
    • 占用空间大:每个候选区域的Feature map都要写入磁盘保存。
    • 步骤繁多:整个模型包括多个模块,且每个模块是相互独立的。
    • 由于全连接层限制,输入图像为固定尺寸。
    • 每个图像块输入CNN单独处理,无特征提取共享。
    • 重复计算:多数候选区域是互相重叠的,重叠部分会被多次提取Feature。

Fast R-CNN提出了一个ROI池化层,其实质上是SPP-Net的一个特殊情况(故在介绍Fast R-CNN之前,先介绍SPP-Net)

1.3 SPP Net

动机:

  • CNN一般都含有卷积层和全连接层,卷积层无需固定尺寸的图像,而全连接层则需要固定大小的输入
  • 在此之前,普通的CNN若想实现输出一个固定维度的向量到全连接层,必须固定输入图像的尺寸。在希望检测各种大小的图片的时候,需要经过crop,或者warp等一系列操作,这都在一定程度上导致图片信息的丢失和变形,限制了识别精确度。而SPP-Net在普通的CNN中加入了SPP层,使得输入图像可以是任意尺寸的,输出为固定维度的向量
  • image-20201116142426267

网络结构:

img

  • 输入:任意尺度的待测图像
  • 输出:固定长度的特征向量。
  • 黑色图片代表卷积后的特征图,将4x4、2x2、1x1的网格放在特征图上,可以得到16+4+1=21个小方格。对每个小方格执行Max-Pooling下采样,提取出1个特征值。将每个小方格提取到的特征值组合在一起,就得到一个长度为21维的特征向量。(特别的,如最后的卷积层Conv5有256个通道,所以输出(16+4+1)*256的特征)

总结:

  • SPP-Net使得任意大小的特征图都能够转换成固定大小的特征向量。
  • 只对原图做一次卷积,复用卷积层的特征图,提高速度。
    • 由于原图与经过卷积层后得到的特征图在空间位置上存在一定的对应关系,所以只需对整张图像进行一次卷积特征提取,然后将候选区域在原图的位置映射到卷积层的特征图上得到该候选区域的特征
    • (R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次卷积,从而节省了大量的计算时间,比R-CNN有一百倍左右的提速。)
    • img
  • SPP-Net解决了R-CNN重复提取候选区域特征的问题,同时允许各种尺寸图像作为输入,解决了图像畸变的问题,但R-CNN的其它问题,如训练步骤繁琐、磁盘空间开销大等依然有待解决。

意义:

​ 当网络输入为任意大小图片时,首先可以进行若干卷积、池化步骤,直至网络最后几层时,在全连接层之前加入SPP层,使得任意大小的特征图转换为固定大小的特征向量,以满足全连接层的输入要求。

1.4 Fast R-CNN

网络结构:

输入:由两部分构成:1.待处理的图像 2.候选区域(Region Proposal)

img

  • 使用ROI池化层代替SPP,原图经过卷积后产生特征相应图,然后从每个ROI池化层提取定长特征向量,每个特征向量输入到全连接层,分支为两个输出层,一个是Softmax分类器用来预测类别,另一个用于回归bbox的位置。
  • ROI池化层实际上是SPP-NET的一个精简版,可以看成是SPP层的一个特殊情况。SPP-Net对每个候选区域使用了不同大小的金字塔映射,而ROI池化层只需要下采样到一个7x7的特征图。
  • ROI池化层与SPP-Net的效果一样,可以将不同大小的输入映射到一个固定尺度的特征向量。
  • 这里写图片描述

img

  • 创新点:
    • 用ROI层代替SPP层,可以使用BP算法更高效的训练更新整个网络。
    • 借助多任务损失函数,将物体识别和位置修正合并到一个网络中,不再进行分步训练。
    • 共享卷积层,不再像R-CNN一样每个候选框都使用CNN提取特征,而是输入一张完整的图片,在第五个卷积层得到每个候选框的特征。
    • 端到端、基于多任务损失函数的一阶段训练过程,节省了存储空间,减少训练,提升检测精度。
    • 对全连接层提出了SVD奇异值分解的优化方法,降低了全连接层需要学习的参数数目,节省计算时间。
  • 缺点:
    • 候选区域提取仍采用区域选择性搜索算法,耗费时间

1.5 Faster R-CNN

  • 摒弃区域选择性搜索算法,使用Region Proposal Network(RPN)产生候选框,即将搜索候选框的工作也交由神经网络,大大减少了计算量,提高了检测速度。
  • 引入anchor box以应对目标形状变化问题。(Anchor box就是位置和大小固定的box,可理解为实现设定好的固定的proposal)
  • Faster R-CNN将RPN放在最后一个卷积层后面,RPN直接训练得到候选区域。Faster RCNN抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
  • 所有窗口经过ROI池化后都会送入后续子网络进行分类和窗口回归。

img

RPN

  • 图中RPN网络分为两条线,上面的分支通过Softmax分类anchors获得前景和背景。下面的分支用于计算对于anchors的边界框回归的偏移量,以获得较精确的目标候选区。(注:这里的较精确是相对于后面全连接层的再一次box regression而言)。
  • RPN网络将每个样本映射为一个概率值和四个坐标值,概率值反应这个anchor box有物体的概率,四个坐标值用于回归定义物体的位置。

img

  • img

(1) RPN网络的作用就是将候选区域的提取也整合到了神经网络中,而且RPN网络和Fast R-CNN共用卷积网络,几乎没有增加计算量。

(2) RPN提取候选框的方法是对conv feature map上的每个点为中心取9种不同比例大小的anchors(3种尺度,3种比例),再按照比例映射到原图中即为提取的region proposals。具体的实现方法如上图,先用一个256维的3x3卷积核以步长为1进行特征提取,这样就可以得到一个256x1的特征向量,将这个256长度的特征向量分别输入两个分支,其中一个输出长度为2x9=18表示9个anchors是物体和不是物体的概率,另一个输出长度为4x9=36表示每个proposals的四个坐标。

(3) 在得到了概率和bbox的坐标之后映射到原图中得到region proposals,再进行一次非极大值抑制(NMS)得到最终输入ROI池化层的proposals。

  • 优点:
    • 设计了RPN网络,利用CNN卷积后的特征图生成候选区域,取代了SS和EB等方法,极大地提升了生成候选区域的速度。
    • 将候选区域的提取也整合到了神经网络中。引入anchor box以应对目标形状变化问题。
    • 训练RPN与Fast R-CNN共享部分卷积层,极大地提升了检测速度。
    • 第一个基于深度学习的端到端目标检测算法,具有一定实时性。
  • 缺点:
    • RPN网络的训练较为耗时。
    • RPN不善于处理一些极端尺度及形状的目标物体检测。

1.6 R-FCN

  • 使用位置敏感的ROI池化层,使池化结果不需再经过子网络,直接进行分类和窗口回归。

1.7 FPN

1.8 Mask R-CNN

2.one-stage:(基于全局回归分类)

2.1 SSD

本文提出了第一个基于深层网络的目标检测器,它不会对假设边框中的像素或特征进行重新取样,有效避免了Faster-R-CNN中的重复采样。

YOLO只做了一次边框回归和打分,速度较快,能达到实时效果。但由于只做了一次边框回归和打分,导致对小目标训练不充分,对目标尺度敏感,对尺度变化较大的物体泛化能力较差。

R-CNN系列算法是基于“Proposal+Classification”的Two Stage目标检测算法,这一类算法先预先回归一次边框,然后进行骨干网络训练,精度较高但速度较慢。

针对YOLO和Faster R-CNN各自的优缺点,SSD算法采用了One Stage的理念,提高检测速度。同时融入Faster R-CNN中的Anchors思想,进行特征分层提取并依次计算边框回归和分类操作,可适应多种尺度的目标训练和检测任务,同时精度高,实时性好。

SSD网络的设计思想是:分层特征提取,依次进行边框回归和分类。因为不同层次的特征图代表不同层次的语义信息:低层次的特征图代表低层语义信息(含有更多细节),适合小尺度目标学习,能提高语义分割质量;高层次的特征图代表高层语义信息,适合对大尺度目标进行深入学习,能平滑分割结果。

SSD网络的结构被分为6个stage,每个stage学到一幅特征图,然后进行边框回归和分类,每个Stage包含多个卷积层操作。SSD采用VGG16的前五层卷积网络作为第一个stage,将VGG16中fc6和fc7两个全连接层转换为两个卷积层conv6和conv7作为第2个stage。接着增加了Conv8、Conv9、Conv10、Conv11四层网络,用来提取高层次语义信息。

SSD算法的基本步骤是:输入图片经过卷积神经网络提取特征,生成特征图;抽取其中六层特征图,并在其每个点上生成default box;将生成的所有default box执行非极大值抑制,输出筛选后的结果。

img

这里用到的default box和Faster RCNN中的anchor很像,在Faster RCNN中anchor只用在最后一个卷积层,但是在本文中,default box是应用在多个不同层的feature map上。

img

总的框数:38x38x4、19x19x6、10x10x6、5x5x6、3x3x4、1x1x4,也就是 5773、2166、600、150、36、4,加起来一共有 8732 个box,然后我们将这些box送入NMS模块中,获得最终的检测结果。default box在不同的feature层有不同的scale,在同一个feature层又有不同的aspect ratio,因此基本上可以覆盖输入图像中的各种形状和大小的object

对于具有p个通道(num_output)的大小为m×n的特征层,使用3×3×p卷积核卷积操作,其中Padding和stride都为1,保证卷积后的特征图大小不变。但通道数增加,增加为(4*Classes+4)。

在conv4_3层,有一层Classifier层,使用一层(3,3,(4*(Classes+4)))卷积进行卷积(Classes是识别的物体的种类数,代表的是每一个物体的得分,4为x,y,w,h坐标,乘号前边的4为default box的数量),这一层的卷积则是提取出feature map,

Hard negative mining(硬负挖掘) :在匹配步骤之后,大多数默认框都是负样本,特别是当可能的默认框数量很大时。这导致了训练期间正负样本的严重不平衡(正负样本的不均衡会导致发散或者精度经常保持为1)。我们不是使用所有负样本,而是使用每个默认框的最高置信度来使负样本排序,然后挑选较高置信度的负样本,以便负样本和正样本之间的比率至多为3:1。我们发现,这导致更快的优化和更稳定的训练。

SSD算法总结:

创新点:

  • 采用不同尺度的特征图进行检测,大尺度的特征图可用来检测小物体,小尺度的特征图检测大物体。
  • 采用不同尺度和长宽比的先验框。
  • 实现高精度的端到端训练,即使输入相对低分辨率的图像依然可以在速度和精度上得到权衡。

优点:运行速度快,可与YOLO媲美;检测精度高,可与Faster R-CNN媲美。

缺点:需人工设置prior box的基础参数,prior box的基础大小和形状不能直接通过学习获得。

算法的结果:对于300*300的输入,SSD可以在VOC2007 test上有74.3%的mAP,速度是59 FPS(Nvidia Titan X),对于512*512的输入, SSD可以有76.9%的mAP。相比之下Faster RCNN是73.2%的mAP和7FPS,YOLO是63.4%的mAP和45FPS。即便对于分辨率较低的输入也能取得较高的准确率

预备知识:

在继续学习RetinaNet之前,首先要搞清楚何为Hard/Easy Positive/Negative Example。从字面意思上理解,Hard为困难样本、较难分类的样本,Easy为容易分类的样本、Positive为正样本,Negative为负样本。正负样本比较好区分:bbox与ground-truth的IoU大于某一阈值(一般为0.5)即为正样本,IoU小于该阈值即为负样本。

Hard和Easy的区分主要看是否在前景和背景的过渡区域上。如果不在前景和背景的过渡区域上,分类较为明确,称为Easy。若在过渡区域上,则较难分类,称为Hard。

img

2.2 RetinaNet

本文提出了一个可与最先进two-stage检测器的精度匹配的One-Stage检测器。为了实现该结果,作者将训练过程中的类不平衡问题看作主要障碍,并提出了一个新的损失函数来消除该障碍。

类不平衡问题是指如SSD中产生了很多很多default box,这些default box中大多数都是负样本,特别是当可能的默认框数量很大时。这导致了训练期间正负样本的严重不平衡,训练步骤容易被已分类的背景样本所主导。这一问题在SSD中使用 Hard negative mining解决。

在一张输入图片中,检测器对每张图片评估104-105个候选位置,但只有少数位置包含物体,故负样本多于正样本,出现类不平衡问题。

类不平衡将引发两个问题:

  1. 训练效率低,大多数位置是easy negative ,没有贡献有用的学习信号。(大多数负样本不在过渡区域,分类明确,称为easy negative。)
  2. 负样本过多造成loss太大,以至于淹没掉正样本的loss,不利于目标收敛,导致模型退化。

上述问题2将导致无法得出一个能对模型训练提供正确指导的loss,训练步骤容易被已分类的背景样本所主导(而Two Stage方法得到proposal后,其候选区域要远远小于One Stage产生的候选区域,因此不会产生严重的类别失衡问题)。常用的解决此问题的方法就是负样本挖掘,或其它更复杂的用于过滤负样本从而使正负样本数维持一定比率的样本取样方法。本文提出了一个新的损失函数Focal Loss,更高效的替代之前处理类不平衡问题的方法。

Focal loss

Focal Loss被用来解决one-stage检测方案中训练时前景和背景极端不平衡的问题。从二分类的交叉熵(CE)损失来介绍Focal Loss,

image-20200924182142381

y=±1指定ground-truth类,p∈[0,1]是模型对于类标签y=1的概率。

image-20200924183857022

CE损失在图1中用蓝线画出,一个值得注意的性质是:即使样本已经被很容易的分类(p>>0.5),CE损失依然很大。当把大量easy样本加和起来,这些小的损失能淹没稀有的类别。

image-20200924184020821

平衡的交叉熵

解决类不平衡的一种常用方法是对类1引入权重因子α。在实际应用中,α可采用逆类频率设置,也可作为交叉验证设置的超参数。

image-20200924185352955

这种损失是CE的简单扩展,我们将其作为我们提出的Focal损失的实验基线。

Focal Loss 定义

训练过程中的类不平衡问题淹没了交叉熵损失。容易被分类的负样本构成了大部分损失,并支配着梯度。尽管α平衡了正负样本的重要性,但他没有区分easy/hard样本。作者重构了loss function来降低easy样本的权重,关注hard negative的训练。

image-20200924192231368

从图中也可看出:当γ逐渐增大时,较容易分类的loss几乎为0,减少了easy样本的损失贡献。而Pt较小的部分(hard example)的loss依然较大,可以保证在累加后让hard examples贡献更多的loss,在训练时给予hard examples更多的优化。

性质1:当一个样本被误分类并且概率很低,调制因子趋近于1,损失不受影响。当概率趋近于1,因子趋近于0,这样就降低了已经被良好分类的样本的损失占比。

性质2:聚焦参数γ平滑的调整easy样本的权重降低率。当γ=0时 FL=CE,随着γ的增加调制因子的影响也最值增加。(我们发现γ=2在实验中效果最佳)。

直观的说,调制因子减少了easy样本的损失贡献,并且扩展了损失较低样本的范围。例如当γ=2,一个样本被分类的概率为0.9,FL损失比CE损失低100倍,当概率增加到0.968,损失低了1000倍。这反过来增加了校正误分类样本的重要性。(它的损失降低了4倍,当概率<0.5,γ=2)

RetinaNet

img

RetinaNet由一个基石网络(ResNet+FPN)和两个特定任务的子网络组成。基石网络负责在整个输入图像上计算卷积特征图,并且它不是一个自卷积神经网络。第一个子网络在基石网络的输出上做卷积目标分类,第二个子网络执行卷积边框回归。

输入图像经过Backbone后,可以得到P3-P7特征图金字塔(下标表示特征金字塔的层数,Pl的特征图分辨率比原始图像小2l),每层有C=256个通道。得到特征金字塔后,对特征金字塔的每一层分别使用两个子网络(分类子网络+检测框位置回归子网络)。

总结:

  • 作者将极端类不平衡问题看作阻止one-stage方法超过two-stage方法的主要障碍。
  • 为解决该问题,提出了一个新的损失函数Focal Loss,更高效的替代之前处理类不平衡问题的方法。
  • 提出RetinaNet:ResNet+FPN+2个FCN子网络,精度超过Faster R-CNN。

2.3 CornerNet(Anchor free)

目前被经常使用的anchor box有两个缺点:

  • 需要一个非常大的anchor boxes集合。检测器需要判断每个anchor box是否与ground truth box 足够重叠。通常仅仅一小部分anchors与ground truth重叠,这就造成阳性anchors box和阴性anchors box 之间的巨大不平衡,并且减慢训练。
  • 使用anchor box引入大量超参数和设计选择。包括:框的数量、框的尺寸、框的长宽比。

CornerNet:

一种去掉anchor boxes的one-stage目标检测方法。CornerNet通过一对关键点(边界框左上角和右下角)来检测目标。使用一个卷积网络预测两个热图集合(相同目标类别的所有实例的),来表示不同目标类别的边角点位置,一个是左上角边角点的热图集合,一个是右下角边角点的热图集合。此外,网络为每一个被检测到的边角点预测一个嵌入式向量,这样同一目标的两个边角点的嵌入式向量之间的距离很小,就能基于这个距离将其分为一组。

img

使用沙漏网络作为CornerNet的Back-bone网络。沙漏网络后面跟着两个预测模块,一个模块预测左上角点,另一个预测右下角点。每个模块有他们自己的Corner Pooling模块来池化来自沙漏网络的特征,之后预测热图、嵌入式向量和偏移。

Corner pooling:

一种新的池化层,通过编码明确的先验知识,可帮助卷积神经网络更好地定位边界框的角落。Corner Pooling在两个特征图上执行,从第一个特征图上(在每个像素位置)最大池化所有的特征向量,第二个特征图直接池化所有特征向量,然后将两个池化结果相加。

总结:

创新点:

  • 提出CornerNet:一种新的目标检测方法,使用单个卷积神经网络,将目标边界框当做一组关键点(左上角、右下角)进行检测,消除了Anchor Boxes。
  • 提出Corner Pooling,一种新的池化层,帮助网络更好的定位关键点。

缺点:

  • CornerNet需要学习一个额外的距离向量,进行复杂的后处理来对属于相同实例的边角点分组。

2.4 CenterNet

2.5 FCOS(Anchor free)

当前所有主流检测器(例如Faster R-CNN、SSD、YOLO)都依赖于一个预定义的anchor boxes集合,一直以来人们相信使用anchor box是检测器成功的关键。尽管他们很成功,但了解基于anchor的检测器的缺点也很重要:

(1) 检测性能对anchor boxes的尺寸、长宽比、数量敏感。基于anchor的检测器的超参数需要被仔细调整。

(2) anchor boxes的尺寸和长宽比保持固定,检测器在候选目标形状出现大变化,特别是小目标时会遭遇困难。预定义的anchor boxes也会妨碍检测器的泛化能力,在不同的目标尺寸或长宽比的新检测任务上,anchor需要被重新设计。

(3) 为了实现高召回率,基于anchor的检测器需要在输入图像上密集的放置anchor box。(例如FPN上一张短边为800的图片有超过180K个anchor boxes)。这些anchor box在训练时绝大多数被标注为负样本。过多的负样本加重了训练期间的正负样本不平衡。

(4) Anchor box包含复杂的计算,例如计算和ground-truth bbox之间的IoU。

img

全卷积One-stage检测器:

检测器直接回归bbox,并将这些位置看作训练样本(而不是anchors)。如果某个位置(x,y)在任一ground-truth box中,那么将其看为正样本,c为其类别标签,c=0表示其为负样本(背景)。4维的实向量t = {l,t,r,b*}是位置回归目标,里面的元素是从该位置到bbox四条边的距离(如图左所示)。如果某个位置有多个边界框,将其看为模棱两可的样本(如图右所示),FCOS简单的选择最小区域的边界框作为回归目标。FCOS利用尽可能多的前景样本来训练回归器。这与基于anchor的检测器不同,它们仅将与GT的IoU足够高的样本看为正样本。这也是FCOS比基于anchor的检测器出色的原因之一。

用FPN为FCOS进行多等级预测:

img

FCOS采用FPN在不同等级的特征图上检测不同尺寸的目标。P3-P7是用于最终预测的特征等级,P3-P5由backboneCNN的特征图产生。P6/P7分别通过在P5/P6上应用一个步长为2的卷积层产生。

与基于Anchor的检测器不同(它们为不同的特征层级分配不同尺寸的anchor),FCOS直接限制了每个层级上bbox回归的范围。FCOS首先为所有特征层级上每个位置计算l,t,r,b。如果某个位置满足max(l,t,r,b)>mi 或 max(l,t,r,b)<mi-1,就将其设为一个负样本,不再需要回归边界框。这里mi是该特征层级上需要去回归的最大距离。m2,m3,m4,m5,m6,m7分别为0,64,128,256,512,∞。(例如P3的范围是[0,64],P4的范围是[64,128])

Center-ness:

在FCOS上使用多层级的预测之后,FCOS的性能依然与基于Anchor的检测器有很大代沟。作者观察到这是因为许多位置预测的低质量的边界框远离目标的中心点。FCOS引入了“Center-ness”分支来预测某个像素与其对应bbox中心点的偏移。这个评分被被用于降低检测到的低质量的边界框的权重,并且在NMS中合并检测结果。Center-ness使得基于FCN的检测器比基于anchor的检测器效果更好。

作者提出了一个简单高效的策略来压制检测到的低质量边界框,没有引入任何超参数。具体来说,FCOS增加了一个与分类分支并行的单层分支来预测一个位置的”Center-ness”。Center-ness描述了该位置到目标中心点位置的正规化距离。

img

在测试时最终评分(用于排列检测到的边界框)通过将预测到的Center-ness与相对应的类别评分相乘得到。Center-ness可以减少远离目标中心点的边界框的权重分数。因此,在最终的非极大值抑制过程中,这些低质量的边界框有很大概率被过滤掉,从而显著提高检测器的性能。

总结:

优点:

  • FCOS使检测与许多其他FCN可解决的任务(如语义分割)统一起来,使重用这些任务中的思想变得更加容易。
  • 将检测变为Proposal free和Anchor free,显著降低了设计参数的数量,使训练变的简单。
  • 通过消除Anchor boxes,FCOS完全避免了Anchor boxes相关的复杂计算和超参数(例如在训练期间计算Anchor box和Ground truth box的IoU),并且以逐像素预测的方式进行目标检测,得以更快的训练和测试,同时减少训练期间内存用量。
  • FCOS可以作为Two-Stage检测器的区域建议网络(RPNs),并显著优于基于Anchor的RPN。
  • FCOS检测器通过很小的修改就能立即扩展到解决其他视觉任务,包括实例分割和关键点检测。

2.6 YOLO

图像经过一个神经网络即可完成目标位置及所属类别的预测,检测速度达到45fps,但检测精度不高。

  • 优点:
    • 速度快。将检测看为回归问题,可以在整幅图像上进行推理,测试时只需在图像上运行神经网络即可预测检测结果。
    • 检测速度快。每秒可以实时处理45帧图像。较小的网络Fast YOLO,其处理能力达到155帧/秒,精度实现了两倍于当时其他实时检测网络的mAP。
    • 背景误检率低。YOLOv1在预测时关注整张图像,联系上下文信息,将背景检测为目标的可能性更小。与Fast-R-CNN相比,YOLOv1产生的背景误检率少于一半。
    • 可以学习物体的泛化表示。在自然图像上训练的模型应用在艺术图像上效果也较好。
  • 缺点:
    • 检测精度较低,虽然可快速识别图像中的物体,但难以精确定位某些物体,尤其是成群的小物体。
    • YOLOv1直接从数据中学习预测bounding box,因此很难在新的或不寻常的宽高比的对象中进行泛化。
    • 定位误差大。yolov1的损失函数没有处理好小的bounding box和大的bounding box之间的区别。因为大的bounding box的小误差通常是良性的,但小的bounding box的小误差对IOU的影响要大得多。

2.7 YOLOv2

  • 加入了Batch Normalization批归一化层,去掉全连接层,进行多尺度训练、使用维度聚类、细粒度特征、多尺度训练等改进方法。
  • 针对检测数据集数据量较少、分类数据集数据量较多的问题,提出一种新的方法,将不同的数据集组合在一起。具体方法是:一方面采用WordTree融合数据集,另一方面联合训练分类数据集和检测数据集。分类信息学习自ImageNet分类数据集,而物体位置检测则学习自 COCO 检测数据集。
  • 对于组合数据集构建了一个视觉概念的分层模型:WordTree
  • 引入Anchor boxes,通过预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。
  • 提出DarkNet-19,有19个卷积层和5个最大池化层

2.8 YOLOv3

  • 使用新的网络架构DarkNet-53,有53个卷积层,使用了连续的3×3和1×1卷积层。
    • 借鉴了ResNet网络中的残差结构,使得网络能够达到很深程度的同时避免了梯度消失问题。去除了池化层,改用步长为2的卷积层进行特征图的降维。
    • 测试发现Darknet-53比ResNet-101更好,且速度提高了1.5倍。Darknet-53具有与ResNet-152相似的性能,并且快2倍。
  • 利用多尺度进行目标检测,大大提升了对小目标的检测效果。
    • YOLOv3在3种不同尺度上预测边界框,并使用类似特征金字塔网络的概念进行多尺度级联。
    • 网络中进行上采样、下采样、特征拼接等操作,输出三张大小分别为13x13、26x26、52x52的特征图,13x13的特征图由于下采样倍数大,单元网格的感受野比较大,适合检测尺寸比较大的目标物;26x26的特征图中单元网格感受野适中,适合检测尺寸中等的目标物;52x52的特征图中单元网格感受野相对较小,适合检测尺寸较小的目标物。
    • YOLOv3延续了YOLOv2使用的k-means聚类方法来确定Anchor box的尺寸。为每张特征图确定3个Anchor box的尺寸,最终聚类得到9种尺寸的Anchor box。分配的方式见下表所示,遵循的原则是特征图的尺寸越小,则分配的anchor box的尺寸越大。preview
  • 改进损失函数,使用逻辑回归代替softmax分类器。
    • YOLOv3不再采用softmax分类器,而采用独立的logistic classifiers。并且在训练过程中,使用二元交叉熵损失来进行类别预测。

2.9 YOLOv4

  • 加入SPP bolck来改善感受野大小,用PANet代替FPN进行多通道特征融合

  • 选用CSP-DarkNet53作为主干网络,使得检测精度与速度进一步提升。

  • YOLOv4的最终架构:Backbone:CSPDarknet53 Neck:SPP,PANet Head:YOLOv3

  • YOLOv4其实并没有特别大的创新点,文章可以概括为三个部分:目标检测算法综述+最新算法的大量实验+最优的算法组合。也就是将当前目标检测的方法进行了对比实验研究,最终找到了一个最优的组合,这个组合所带来的整体增益最高。