论文题目:Focal Loss for Dense Object Detection
论文链接:论文链接
RetinaNet的引入
RetinaNet 原始论文为发表于 2017 ICCV 的 Focal Loss for Dense Object Detection。one-stage 网络首次超越 two-stage 网络
,拿下了 best student paper,仅管其在网络结构部分并没有颠覆性贡献。
1.RetinaNet的创新点backbone(与FPN的3个不同)
Retinanet与FPN有三个不同的点:
1.c2没有生成p2(因为p2会占用更多的资源,因为p2更大)
2.在FPN网络中,p6是通过p5最大池化下采样得到的,这里的p6是通过3*3的卷积得到的
3.和FPN中多了一个P7
图一是FPN网络,图二是RetinaNet网络
上图也给出了 P3 到 P7 上使用的 scale 和 ratios。在 FPN 中每个特征层上使用了一个 scale 和三个 ratios。在 RetinaNet 中是三个 scale 和三个 ratios 共计 9 个 anchor。 注意,这里 scale 等于 32 对应的 anchor 的面积是 32 的平方的。所以在 RetinaNet 中最小的 scale 是 32,最大的则是接近 813。
2.预测器
由于 RetinaNet 是一个 one-stage 的网络,所以不用 ROI pooling(下边给出解释),直接使用如下图所示的权重共享的基于卷积操作的预测器。预测器分为两个分支,分别预测每个 anchor 所属的类别,以及目标边界框回归参数。最后的 kA 中 k 是检测目标的类别个数,注意这里的 k 不包含背景类别,对于 PASCAL VOC 数据集的话就是 20。这里的 A 是预测特征层在每一个位置生成的 anchor 的个数,在这里就是 9。(现在基本都是这样的类别不可知 anchor 回归参数预测,也可以理解为每一类共享了同一个 anchor 回归参数预测器)
什么是ROI pooling?
roi是在原图中的感兴趣区域,可以理解为目标检测的候选框也就是region of proposals,我们将原图进行特征提取的时候,就会提取到相应的feature map。那么相应的ROI就会在feature map上有映射,这个映射过程就是roipooling的一部分,一般ROI的步骤会继续进行max pooling,进而得到我们需要的feature map,送入后面继续计算
根据ROIS提供的候选框坐标,映射到FeatureMap,然后进行max-pooling,和普通的max-pooling的不同之处在于池化窗口的内部的各自包含的特征值数量不一样。
3.正负样本匹配
针对每一个 anchor 与事先标注好的 GT box 进行比对,如果 iou 大于 0.5 则是正样本,如果某个 anchor 与所有的 GT box 的 iou 值都小于 0.4,则是负样本。其余的进行舍弃。
4.损失的计算
本文一个核心的贡献点就是 focal loss
。总损失依然分为两部分,一部分是分类损失,一部分是回归损失。Focal loss 比较独特的一个点就是正负样本都会来计算分类损失,然后仅对正样本进行回归损失的计算。回归损失在 SSD 以及 Faster R-CNN 中都有讲解,这里就不细说了。