前言
1.本文重点是RefineDet 的网络结构,尽量用较少篇幅表达清楚论文算法,其他一些不影响理解算法的东西不做赘述
2.博客主要是学习记录,为了更好理解和方便以后查看,当然如果能为别人提供帮助就更好了,如果有不对的地方请指正(论文中的链接是我经过大量搜索,个人认为讲解最清楚的参考)
创新点
提出ARM、TCB、ODM三个模块来结合一刀流和二刀流
RefineDet
RefineDet是一刀流和二刀流算法的结合,简单点说就是基于SSD,再引入RPN和FPN的思想(比SSD多了anchor初步调整和TCB模块)
1.网络结构
主要是三部分,ARM、TCB 和 ODM
1.1 ARM(anchor refinement module )
从名字就可以看出ARM目的是把开始定义的anchor进行初步的调整,得到经过初步筛选(过滤掉过多的负样本)的anchor,这就类似Faster R-CNN中RPN,ARM也是有两个输出分支,一个是anchor的初步坐标回归,另一个是二分类,即有目标还是没有目标,只是ARM是在多层特征图上都进行anchor的初步调整(如上图中上面的ARM部分),而RPN只是在一张特征图上进行调整
1.2 ODM(object detection module)
这部分可以看成是SSD,跟SSD一样在不同尺度特征图上做预测,不同的是SSD的多层特征图是经过cnn一步一步得来的,而ODM的多层特征图是ARM部分通过TCB模块转换来的(如上图中下面ODM部分);ODM的目的是做进一步的边框回归和多分类,但是ODM没有使用Fast R-CNN那样耗时的逐区域操作,而是通过TCB转换特征图后进行了类似SSD的直接在特征图上预测
1.3 TCB(transfer connection block)
transfer connection block就是利用卷积层来转换特征图,将ARM的输出特征图转换为ODM的输入特征图,转换的过程中进行了不同尺度特征图的融合,类似FPN,但是FPN中扩大特征图尺寸用的是上采样,TCB用的是反卷积,结构如下图所示
就是ARM部分的四个尺度特征图中大尺度的经过TCB的卷积层,小尺度的经过反卷积,二者变成尺度相同的特征图再做融合;需要注意的一点是ARM中最小尺度的特征图经过TCB变换是没有反卷积操作(因为它已经是最小的了)
2.损失函数
损失函数包括ARM和ODM两部分,ARM的损失是二分类和回归,ODM的损失是多分类和回归(类似Faster R-CNN的损失函数包括RPN和Fast R-CNN两部分),另外,和Faster R-CNN不同,训练是纯粹的端到端,两部分损失一起反传
其他
正负样本界定和使用hard negative mining来设定正负样本的比例和其他算法类似