RetinaNet

作者:小松qxs
链接:https://www.jianshu.com/p/596e4171f7ad
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


动机

one-stage方法,速度快但不如two-stage精度高。分析原因:正负样本不均衡。

内容

提出Focal Loss:
改进标准交叉熵损失,hard examples对损失的贡献变大。
RetinaNet

RetinaNet: based on a ResNet-101-FPN backbone, achieves a COCO test-dev AP of 39.1 while running at 5 fps。
class imbalance:
(1) negative example过多造成它的loss太大,positive的loss淹没,不利于收敛.
(2) easy negative训练时loss很小,反向计算时梯度小,对参数的收敛作用有限。
Focal Loss Definition
(1) 平衡正负样本:
RetinaNet

(2) easy/hard examples平衡(γ = 2):
RetinaNet

(2) 最终公式(α=0.25,γ=2效果最好):
RetinaNet

计算p时使用sigmoid可以有更好的数值稳定性。
Class Imbalance and Model Initialization
二分类模型默认y = −1 或 1有相同的概率。Class Imbalance初始化会导致训练初始阶段不稳定。提出prior概念,用π表示,用它去寻找模型中少见的类别。这个改变在类别不均衡时对于模型训练的稳定性有提升,不管是使用交叉熵还是focal loss损失函数。
Class Imbalance and Two-stage Detectors:(1)two-stage cascade(2)biased minibatch sampling

RetinaNet Detector
RetinaNet

Feature Pyramid Network Backbone
FPN 作为 Backbone。它在ResNet网络上增加了top-down(自顶向下)通路和lateral(侧向连接)通路,从图片的单一分辨率构建丰富的、多尺度的特征金字塔。金字塔的每一层特征用来检测不同尺寸的目标。
本文FPN由P3-P7构成(Pl 层的分辨率缩小到输入图像的2l),P3-P5是由ResNet的C3-C5计算,P6是由C5使用stride=2的3X3卷积得到,P7是由P6经过stride=2的3x3卷积得到,特征金字塔所有层的Channel=256。与原始的FPN不同之处在于:(1)FPN没有使用P2层;(2)P6是由stride=2的卷积得到不是降采样;(3)引入P7层提升对大尺寸目标的检测效果。
需要强调的是使用FPN作为主干网的原因是,实验发现只使用ResNet层,最终AP值较低。

Anchors
类似RPN具有平移不变性的anchor boxes。从P3到P7层的anchors的面积从3232依次增加到512512。每层anchors长宽比{1:2, 1:1, 2:1}。每层增加尺寸;这样每层有9个anchors,通过不同层覆盖了输入图像 32~813 像素区间。
每个Anchor会有长度为K(class)的one-hot分类目标和4-vector的box回归目标。与RPN比修改如下:
(1) anchor内部包含目标的判断仍然是与GT的IOU,IOU的阈值设置为0.5(RPN是0.7)IOU大于0.5,anchors和GT关联;IOU在[0, 0.4)作为背景。
(2) 每个anchor最多关联一个GT;K(class)的one-hot中关联的类别为1,其它为0。
(3) 边框回归就是计算anchor到关联的GT之间的偏移。

Classification Subnet
连接在FPN每层的FCN,参数共享。Feature Map,使用4个3×3的卷积层,每个卷积层接一个ReLU层,然后是channel=KA(K是类别数,A是anchor数)的3×3卷积层,最后使用sigmoid**函数。
与RPN相比,网络更深,只使用了3×3卷积;不和边框回归子网络共享参数。

Box Regression Subnet
结构同上,最后一层channel=4A。

Inference and Training
Inference:为了提高速度,只对FPN每层部分predictions处理。FPN的每个特征层,首先使用0.05的阈值筛选出是前景的object,最多选取前1k个predictions进行后续处理。融合各层的predictions,再使用NMS(阈值0.5)去掉重叠box。

Focal Loss: γ = 2效果最好,鲁棒区间是γ ∈ [0.5, 5]。训练RetinaNet,损失函数计算输入图所有~100k个anchors,而RPN或(OHEM,SSD)在每个minibatch只选择很少的anchors(如:256)。
大部分anchors是easy negatives,FL下损失值非常小。α与γ值互相影响,通常α随着γ的增大而轻微减少(γ = 2, α = 0.25效果最好)。

Initialization
(1) 使用ResNet-50-FPN和ResNet-101-FPN backbone。
(2) 基础的ResNet-50和ResNet-101在ImageNet1k数据集上预训练。
(3) 所有新增的卷积层(除了子网络的最后一层)初始化权重为 σ = 0.01的高斯分布,偏置为0。
(4) classification subnet最后一层偏置为− log((1 − π)/π),π为每个anchor在开始训练时应该被标记为前景的置信度,实验中使用π = 0.01。背景远多于前景,所以以0.01的概率是前景。
RetinaNet

Optimization
(1) 8GPU、SGD, 每个minibatch 16张图片
(2) 训练90k个iterations, initial learning rate 0.01,在60k和80k个iterations学习率减小10倍
(3) data augmentation只使用水平翻转
(4) Weight decay 0.0001,momentum 0.9
(5) box regression使用L1损失函数
(6) 模型训练时间在10~35小时之间(Table 1.e)
RetinaNet

实验

Training Dense Detection:
Network Initialization:
Balanced Cross Entropy
:Table 1.a(α = .75 gives a gain of 0.9 points AP)
Focal Loss:Table 1.b
(1) γ = 2 时FL可以提升AP值2.9。
(2) 最佳的α值区间是[0.25,0.75]
(3) 较小的α值与较大的γ搭配
Analysis of the Focal Loss:Figure 4
在大量随机图片中采用约10710^7 个负样本和10510^5个正样本,计算FL值并归一化。对归一化的FL值排序并分别画出正负样本的累积分布函数图。
(1) 20%的 hardest positive samples贡献了约一半的损失值,γ增加,20%的贡献度更加明显,但影响不是很大。
(2) γ对负样本的影响完全不同,γ = 0时CDFs与正样本类似,γ增加,迅速的聚焦于 hard negative examples,γ=2时,大量的easy negatives仅贡献少量损失。
RetinaNet

Online Hard Example Mining (OHEM)
OHEM中所有样本计算损失值,使用NMS过滤,最后在minibatch选择损失值最大的一些样本。OHEM关注误分类样本,不同于FL,OHEM完全忽略的easy examples。如Table 1d所示,最好的OHEM与FL有3.2点AP差距。
Hinge Loss
之前尝试对使用Hinge Loss;对值大于某个阈值的样本,损失函数置为零。但训练过程不稳定,且达不到有价值的效果。

Model Architecture Design:
Anchor Density:

one-stage的anchor密度多少才能覆盖任意图像boxes。Two-stage通过Region Pooling(ROI Pooling)可以对边框的任何位置、尺寸、长宽比归类。相比之下,one-stage 使用一个固定的采样网格,常用的方法是在每个空间位置使用多个anchors来覆盖不同的尺寸和长宽比边框。本文FPN每一层的每个空间位置使用不同个数的尺寸和长宽比anchors。在ResNet-50从使用1个方形anchor到12个anchors(尺寸为2k/42^{k/4} , k ≤ 3,长宽比为 [0.5, 1, 2],见Table 1c)。结论:只使用1个anchor情况下AP就有30.3;当使用3中尺寸和3中长宽比时可以到达34.0。再增加6~9个anchors没有更多的提升。
Speed versus Accuracy
(1) 更大的backbone有更好的准确率,但速度更慢,输入图像的尺寸也是如此。见Table 1e。
(2) Figure 2,RetinaNet和其它方法在速度/精度比较,RetinaNet 使用FL超过所有的方法,打破低精度的限制。ResNet-101-FPN在600像素尺寸时的精确度超过ResNet101-FPN Faster R-CNN,同时检测时间为122ms,Faster R-CNN为172ms。
(3) 追求速度需特殊网络设计如Yolo 9000。

Comparison to State of the Art
RetinaNet
RetinaNet