论文笔记(一) Feature Selective Anchor-Free Module for Single-Shot Object Detection
--------------------------------------------------------分割线----------------------------------------------------
越来越松懈了,以前开的专栏都没有坚持更新下去,不过也确实是没有时间,以后尽量有时间慢慢更吧hiahiahia
言归正传,再开一个坑(这个坑绝对不会鸽滴)。每三周一次小组报告的论文我都会在隔天写一个博客来增加印象,有错误欢迎指正哈
--------------------------------------------------------分割线----------------------------------------------------
回归这篇文章,这是cvpr2019的一篇目标检测的文章,文章的贡献是提出了一个基于无锚点的特征选择模块,解决了以往目标检测网络尺度选择的问题。这个模块被作者应用到了Retinanet网络上,所以我们先来大概的谈谈Retinanet,然后分析其缺陷以及该论文的解决方法。
FSAF论文链接:https://arxiv.org/abs/1903.00621
Retinanet论文链接:https://arxiv.org/abs/1708.02002
报告ppt:https://pan.baidu.com/s/1P-ZMs3AMAroO8SoniTNIJg提取码:9yni
Retinanet
Retinanet是2018被提出的一个目标检测网络,作为一个one-stage detector,相比于yolo及其变种等其他one-stage detector,retinanet能达到更高的精度,主要原因是其损失函数的设计。
retinanet网络结构如下:
该网络结构由一个主干网络和两个分支子网络构成
主干网络
主干网络是一个在目标检测中很经典的一个特征金字塔模型,该模型主要解决了以往目标检测中尺度变化的问题。
大家都知道,在深度的卷积神经网络中,层次越深,其包含的语义信息范围就越大。所以如果都根据最后一层的特征图来进行目标检测的话,许多小目标的语义信息就会被忽略。而在特征金字塔网络中,每一层(这里的每一层是指唯独不同的特征层)的特征图都会被根据目标的大小来选择进行后面的分类和回归。(图中的nxn表示经过一个nxn的卷积,+号表示特征图的融合)
分支子网络
这两个网络都是一个多层卷积网络,不同之处在于两个网络的任务不同,上方的class subnet的任务是对所有的锚点进行分类,(w×h是特征图的维度,A是锚点数量,k是每个类别的概率),而下方的box subnet的任务是预测box边界的偏移量(4是4条边相对于锚框的偏移)
Focal loss
Focal loss是Retinanet的一个创新之处(前面的架构都是以前被提出的)该损失函数的提出缓解了前景和背景样本极度不均衡的问题。
什么叫前景和背景极度不均衡呢?我们知道,在目标检测中,锚框是很密集的,而目标数量是很小的,所以正样本的数量远远小于负样本。而负样本对模型的训练意义是不大的,所以这种极度不均衡使得模型训练效果较差。
再来看我们一般的二分类交叉熵损失函数:
其中y=1表示样本是正样本,p为正样本的概率
再来看Focal loss
可以看到,focal loss在交叉熵的前面加了一项at(1-pt)r log(pt) (懒得敲公式了迁就一下吧。。。)
而在目标检测中p是极小的,所以(1-p)r远大于pr,所以就增大了正样本的影响,缓解了这种不均衡。
FSAF
终于回到正题,本论文基于上述的网络提出了其两个缺陷:
- heuristic guided feature selection 即前面说到的,在选择不同尺度的特征图时,该网络完全是根据经验来选择使用哪一张特征图,这使得选择的特征图并不是最优的。
- overlap-based anchor sampling (这个没太搞懂)
所以基于其缺点,该论文提出了一个无锚点模块来并行的检测分类类别和偏移量,并使得网络可以自主选择哪个尺度的特征图
网络架构图如下:
由图可知,该模型只是在retinanet的分支网络上增加了两个分支,这两个分支不是基于锚点检测的,而是基于ground-truth即标签进行检测。
并且它的标签是这样定义的:
其标签是instance(实例图)分层而得:
其中白色部分为有效框,其反向传播正梯度,占比为0.2,灰色部分为忽略框,其不传回梯度,占比0.5,黑色部分为无效框,传回负梯度。
无锚点分类分支的损失函数为Focal loss,回归分支的损失函数为iou loss。整个无锚分支的损失函数为两个损失之和。
在训练阶段,模型会根据哪个尺度的特征图的损失最小来选择该特征图进行反向传播。
而在推理阶段,置信度最高的特征图自然就会使的该损失值最小。
实验结果:
看上去效果确实好了很多呀
顺便一提,由于在无锚点分支上的训练不是基于固定的锚框的,所以实际效果上,该模型具备了能检测出一些长宽比例较大的物体,比如下图的雪橇、肩包等。
下次更新三周后哟