RefineDet 论文解析
论文目标:
通过实现对ssd default box的二次精修提高检测效果。
1.核心思想:
one stage的网络结构,位置框和物体的类是在同一个特征提取层来做回归和分类预测的,这种的网络运算速度虽然快但是准确度不够高,准确度不够高的一个重要原因是因为框的正负样本数目比例失衡严重,two stage 的网络由于引入了Region Proposal Networks使得框的回归任务精度变高,该网络筛出了大量的负样本框(正负样本比例控制在1:3)解决了正负样本不平衡的问题。Refinedet是基于ssd的改进算法,该算法主要是bottom up(网络结构图上半部分)的网络结构来回归粗略位置参数来调整anchor的位置以及框的二分类(是否是物体的位置)任务,用top down(网络结构图下半部分)的网络结构相对于调整的anchor的参数来回归精细物体位置和框内物体的分类任务。可以看出bottom up的运算就是来解决正负样本框数目不平衡问题的。
网络结构:
2.网络结构设计
2.1 总体结构
网络总体来说就是把ssd这个one stage模型,通过加入top down的方法变成two stage模型。
bottom up阶段(论文称之为ARM,anchor refinement module)为常规ssd多尺度预测阶段,做预测所提取的特征图分别为:conv4_3,conv5_3,fc7,conv6_2。每一个特征图都会有两个子网络分支,为别为预测anchor位置的子网络mbox_loc(3组w, h, x, y,子网络卷积层的channel为12)和预测是否为anchor类别的子网络mbox_conf(3组0,1,子网络卷积层的channel为6),筛选出的负例样本置信度高于0.99的就不会传入到top down阶段(论文称之为obm,object detection module)以此来控制正负样本的比例不均衡问题。
将ARM阶段预测出来的结果调整anchor参数(conf:0/1,w,h,x,y图中标记为refined anchors),将特征图conv4_3,conv5_3,fc7,conv6_2输入给TCB单元(transfer connection block)得到P3, P4, P5, P6传入给obm阶段。TCB单元实质上就是top down结构,作用就是使得多尺度特征图的信道融合以此来丰富特征。最后生成的特征图为:P3, P4, P5, P6(其中P3, P4, P5, P6的生成分别对应ARM中的conv4_3,conv5_3,fc7,conv6_2相对应。有一个细节就是当conv4_3,conv5_3层在做anchor 的预测亦或者是做top down的TCB操作的时候为了防止反向传播的剃度过大导致loss输出nan,这两层会经过一个L2normlization操作然后分别扩大常量倍数,scale的值分别为10和3 ,以网络结构如下:
在top down阶段做框精细调整的回归和物体分类任务。每一个特征图都会有两个子网络分支,为别为精细调整anchor位置的子网络mbox_loc(3组w, h, x, y,子网络卷积层的channel为12)和预测是否为物体类别的子网络mbox_conf(3组81类样本,因为是分类coco数据集,子网络卷积层的channel为243)。
2.2 loss函数的设计。
网络训练过程是端到端的训练方法,loss函数也是常规的分类softmax和目标检测的框回归smoothL1。损失函数公式如下所示:
其中
的含义为在框回归的时候只计算正样本的loss。
2.3 训练方式和推理过程
在coco的数据集上,选用vgg16的网络结构,全部的图片resize到512x512的条件下,batch size设置为32,使用4张显卡来训练,0.9动量,0.0005的权重衰减率,前280k次的迭代使用的学习率为10e-3,后80k和40k次的迭代使用的学习率分别为10e-4、10e-5。
在推理阶段ARM将置信度高于0.99的负样本过滤掉,ODM只会输出置信度前400个物体预测样本,然后使用非极大值抑制(阈值为0.45),只会留下置信度为前200个预测样本作为最终的输出结果。
2.3 在算法复现时关于ODM的初始框的疑问。
我们根据论文描述复现了refinedet 的mxnet的版本。在复现的过程中产生了一个疑问。即:ODM的prior box的初始值为ARM的输出,然后对ARM每个框的输出坐标结果计算前景和背景,之后进行进一步的精修。那么在网络训练的初始阶段,网络还没有收敛时,会不会存在一定几率ARM阶段本来在背景区域的default box回归后随机到了正样本框的区域,同时在ODM阶段框IoU排序的时候排在了前面成为了正样本框(虽然这个概率极小)?因为我们在训练模型的时候发现ODM阶段的正样本个数经常会多于ARM阶段的正样本个数,且增多的数量难以找到规律,也许是这个原因造成的这个问题。
算法效果: