SSD

SSD 是使用 VGG19 网络作为特征提取器(和 Faster R-CNN 中使用的 CNN 一样)的单次检测器。我们在该网络之后添加自定义卷积层(蓝色),并使用卷积核(绿色)执行预测。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

同时对类别和位置执行单次预测。

然而,卷积层降低了空间维度和分辨率。因此上述模型仅可以检测较大的目标。为了解决该问题,我们从多个特征图上执行独立的目标检测


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

使用多尺度特征图用于检测。

以下是特征图图示。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

图源:https://arxiv.org/pdf/1512.02325.pdf

SSD 使用卷积网络中较深的层来检测目标。如果我们按接近真实的比例重绘上图,我们会发现图像的空间分辨率已经被显著降低,且可能已无法定位在低分辨率中难以检测的小目标。如果出现了这样的问题,我们需要增加输入图像的分辨率。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)


YOLO

YOLO 是另一种单次目标检测器。

YOLO 在卷积层之后使用了 DarkNet 来做特征检测。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

然而,它并没有使用多尺度特征图来做独立的检测。相反,它将特征图部分平滑化,并将其和另一个较低分辨率的特征图拼接。例如,YOLO 将一个 28 × 28 × 512 的层重塑为 14 × 14 × 2048,然后将它和 14 × 14 ×1024 的特征图拼接。之后,YOLO 在新的 14 × 14 × 3072 层上应用卷积核进行预测。

YOLO(v2)做出了很多实现上的改进,将 mAP 值从第一次发布时的 63.4 提高到了 78.6。YOLO9000 可以检测 9000 种不同类别的目标。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

图源:https://arxiv.org/pdf/1612.08242.pdf

以下是 YOLO 论文中不同检测器的 mAP 和 FPS 对比。YOLOv2 可以处理不同分辨率的输入图像。低分辨率的图像可以得到更高的 FPS,但 mAP 值更低。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

图源:https://arxiv.org/pdf/1612.08242.pdf

YOLOv3

YOLOv3 使用了更加复杂的骨干网络来提取特征。DarkNet-53 主要由 3 × 3 和 1× 1 的卷积核以及类似 ResNet 中的跳过连接构成。相比 ResNet-152,DarkNet 有更低的 BFLOP(十亿次浮点数运算),但能以 2 倍的速度得到相同的分类准确率。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

图源:https://pjreddie.com/media/files/papers/YOLOv3.pdf

YOLOv3 还添加了特征金字塔,以更好地检测小目标。以下是不同检测器的准确率和速度的权衡。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

图源:https://pjreddie.com/media/files/papers/YOLOv3.pdf

特征金字塔网络(FPN)

检测不同尺度的目标很有挑战性,尤其是小目标的检测。特征金字塔网络(FPN)是一种旨在提高准确率和速度的特征提取器。它取代了检测器(如 Faster R-CNN)中的特征提取器,并生成更高质量的特征图金字塔。

数据流

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

FPN(图源:https://arxiv.org/pdf/1612.03144.pdf)

FPN 由自下而上和自上而下路径组成。其中自下而上的路径是用于特征提取的常用卷积网络。空间分辨率自下而上地下降。当检测到更高层的结构,每层的语义值增加。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

FPN 中的特征提取(编辑自原论文)

SSD 通过多个特征图完成检测。但是,最底层不会被选择执行目标检测。它们的分辨率高但是语义值不够,导致速度显著下降而不能被使用。SSD 只使用较上层执行目标检测,因此对于小的物体的检测性能较差。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

图像修改自论文 https://arxiv.org/pdf/1612.03144.pdf

FPN 提供了一条自上而下的路径,从语义丰富的层构建高分辨率的层。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

自上而下重建空间分辨率(编辑自原论文)

虽然该重建层的语义较强,但在经过所有的上采样和下采样之后,目标的位置不精确。在重建层和相应的特征图之间添加横向连接可以使位置侦测更加准确。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

增加跳过连接(引自原论文)

下图详细说明了自下而上和自上而下的路径。其中 P2、P3、P4 和 P5 是用于目标检测的特征图金字塔。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

FPN 结合 RPN

FPN 不单纯是目标检测器,还是一个目标检测器和协同工作的特征检测器。分别传递到各个特征图(P2 到 P5)来完成目标检测。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

FPN 结合 Fast R-CNN 或 Faster R-CNN

在 FPN 中,我们生成了一个特征图的金字塔。用 RPN(详见上文)来生成 ROI。基于 ROI 的大小,我们选择最合适尺寸的特征图层来提取特征块。


【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

困难案例

对于如 SSD 和 YOLO 的大多数检测算法来说,我们做了比实际的目标数量要多得多的预测。所以错误的预测比正确的预测要更多。这产生了一个对训练不利的类别不平衡。训练更多的是在学习背景,而不是检测目标。但是,我们需要负采样来学习什么是较差的预测。所以,我们计算置信度损失来把训练样本分类。选取最好的那些来确保负样本和正样本的比例最多不超过 3:1。这使训练更加快速和稳定。

推断过程中的非极大值抑制

检测器对于同一个目标会做出重复的检测。我们利用非极大值抑制来移除置信度低的重复检测。将预测按照置信度从高到低排列。如果任何预测和当前预测的类别相同并且两者 IoU 大于 0.5,我们就把它从这个序列中剔除。

Focal Loss(RetinaNet)

类别不平衡会损害性能。SSD 在训练期间重新采样目标类和背景类的比率,这样它就不会被图像背景淹没。Focal loss(FL)采用另一种方法来减少训练良好的类的损失。因此,只要该模型能够很好地检测背景,就可以减少其损失并重新增强对目标类的训练。我们从交叉熵损失 CE 开始,并添加一个权重来降低高可信度类的 CE。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

例如,令 γ = 0.5, 经良好分类的样本的 Focal loss 趋近于 0。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

编辑自原论文

这是基于 FPN、ResNet 以及利用 Focal loss 构建的 RetianNet。

【转载】从RCNN到SSD,这应该是最全的一份目标检测算法盘点(三)

RetinaNet



原文链接:https://medium.com/@jonathan_hui/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7e354377a7c9
https://medium.com/@jonathan_hui/what-do-we-learn-from-single-shot-object-detectors-ssd-yolo-fpn-focal-loss-3888677c5f4d