1、网络结构

backbone:ResNet50, ResNet101
neck: FPN
P3-P5由ResNet得到,P6由P5经过stride=2的3*3卷积得到,P7由P6经过ReLU和stride=2的3*3卷积得到。P3-P7的stride分别为8,16,32,64,128。
层间融合:高分辨率层上采样,低分辨率1*1卷积,两者维度一致,直接相加后再3*3卷积。


head: classification(KA) + regression(4A),在图(c)和(d)中,不同层的head共享参数(concatenate操作),但是分类和回归分支之间不共享。
loss: Focal loss + smooth L1
alpha平衡正负样本loss,取0.25;gamma平衡难易样本,取2。
分类loss是所有正负例的focal loss求和,然后除以类别为正例的anchors总数(正负例anchor数量平衡)。
回归loss是所有正例的smooth L1 loss求和,然后除以类别为正例的anchors总数。
在loss计算前去除掉所有超出图片边界的Anchor,这部分Anchor不用于loss计算(和faster rcnn一致)。


2、样本不均衡解决方案对比
bootstrapping:
hard example mining:抽样方法,SSD中使用,预先确定的比率(通常前景:背景为1:3)选择loss最大的topK背景框。
Focal loss: 降低大量easy negatives的loss权重,根据置信度动态调整loss,速度更快,效果更好。
2、anchor
2.1 anchor的分布
长宽比: [0.5, 1, 2],scale: [2**0, 2**(1/3), 2**(2/3)],组合得到9组anchor aspects/每个feature点
P3-P7基础size为32, 64, 128, 256, 512,乘以aspects,覆盖输入范围32-813
越高层的anchor size约大,越倾向于检测大目标。
2.2 anchor的物理含义
对于长宽为(原图H/8,原图W/8)的特征图,其特征图上的每个单元格cell对应原图区域上(32,32)大小的对应区域(这里对应的大小并不是实际感受野的大小,而是一种人为的近似设置)。

在大小为base_size的正方形框的基础上,对框进行长宽比例调整和缩放形成9种所anchor,以及一个单元格cell的通道维和anchor对应的关系,如下图所示。

2.3 多层FPN如何分配目标
(1)公式选层

(2)IoU选层
将FPN所有层的全部anchor与ground truth计算IoU,将目标分配给得分高于阈值且最高的anchor(低于阈值情况很少,所以去掉低于阈值的最高分也影响不大)
(3)loss选层
FSAF中选择loss最小的层预测目标
采用目标-anchor iou双阈值区分正样本,负样本和忽略样本。
3、训练过程
backbone采用在ImageNet上预训练的ResNet,新增的卷积层普通初始化(bias=0,sigma=0.01),分类分支最后的卷积层的bias初始化为:

相当于模型初始训练时,每个anchor预测为正例设置一个先验概率值,论文中采用的是0.01,权重参数通常初始化为(0,0.01)高斯分布,意味着分类为正例的概率为0.01,这是合理的。因为真实场景中很多anchor是负例,设置先验值可以大大降低负样本在开始训练时的loss,这样训练更容易,相当于手动warmup。
分类分支输出channel为KA,最后sigmoid激活就可以得到各个anchor预测每个类别的概率,即每个位置相当于KA个二分类,因此某个位置的某个anchor可能会输出几个类别不同但是box一样的预测框。也正是因为采用了sigmoid二分类,才有上面每个anchor所有类别都初始化为bias=0.01
4、推理过程
4.1 保留top1K候选bbox
4.2 用0.05的阈值过滤掉负类
4.3 全部level结果concat,IoU=0.5 NMS过滤重叠框
5、与SSD对比
(1)SSD的多尺度是独立的,RetinaNet的FPN在不同尺度之间进行了层间融合
(2)SSD的采用softmax多分类,RetinaNet以及后续改进的FCOS都是采用K个二分类(Focal loss默认是二分类)
(3)为了与配合focal loss,RetinaNet的分类分支最后的卷积层的bias初始化为0.01,可以加快训练和收敛
(4)RetinaNet的不同层head部分共享参数,检测和分类分支之间参数不共享,各层分类/回归结果concat再求loss
6、与YOLO V3对比
(1)backbone不同,YOLOV3的backbone是基于DarkNet-53,RetinaNet是ResNet50或101。
(2)FPN层数不同,YOLOV3的FPN只有P3-P5,RetinaNet是P3-P7
(3)loss不同,RetinaNet是focal loss
YOLO V3之后的检测模型从数据增强、backbone、neck和head等维度已经趋向统一。