前言
1.本文重点是RFB模块(Receptive Field Block),尽量用较少篇幅表达清楚论文算法,其他一些不影响理解算法的东西不做赘述
2.博客主要是学习记录,为了更好理解和方便以后查看,当然如果能为别人提供帮助就更好了,如果有不对的地方请指正(论文中的链接是我经过大量搜索,个人认为讲解最清楚的参考)
创新点
1.结合人类视觉系统,提出RFB模块
2.将RFB模块用于SSD,提出RFB Net
问题引出
我们都知道一刀流比二刀流快,但是精度不如二刀流;目前一些使用强大主干网络(如ResNet-101)的一刀流精度已经可以媲美二刀流,但是,因为主干网络计算量太大,导致耗时增加,算法又变慢了;所以作者就想引入某些手工机制来增强轻量级网络的特征表示能力,而不是顽固地深化模型;作者结合人类视觉认知(一堆生物学知识,不知道说的啥,反正弄懂本文算法就行),提出Receptive Field Block
RFB模块
1.RFB 工作原理
上图中间虚线框内是RFB,是由不同尺寸卷积核的卷积层构成的多分枝结构,类似Inception结构;区别是Inception中使用的卷积核只是不同尺度的正常卷积核,而本文借鉴人类视觉中不同的感受野应该具备不同的离心率的概念,使用dilated卷积核,就像图中的不同rate对应不同尺寸的空洞,rate越大,空洞尺寸越大,采样点离中心点越远(尽可能地分布地比较散而不是像Inception那样kernel大小变化了仍然聚在一起)感受野(一般的CNN每层的感受野都是固定的,这会损失一些信息,失去对不同视野的分辨能力,比如靠近中心部分的更重要、需要被强化等)就越大,最后将不同尺寸和rate的卷积层输出进行concat,达到融合不同特征的目的
2.RFB 结构
(a)就是RFB结构,借鉴Inception结构,1x1的Conv和Inception一样,主要用于减少计算量和进行跨通道的信息融合,主要不同点在于引入3个dilated卷积层(比如3x3conv, rate=1)。(b)是(a)的改进,3x3卷积层代替5x5卷积层,并且用1x3和3x1卷积层代替3x3卷积层,主要目的应该是为了减少计算量
RFB Net 网络结构
现在虽然有很多轻量级的主干网络(如darknet),但是作者为了方便与SSD进行对比使用了VGG16
网络结构是基于SSD改的,改动有两点:
1.SSD用于特征抽取的倒数第三四层替换为RFB模块
2.原来的conv4_3层和conv7_fc层分别接RFB-s和RFB结构进行处理
其他
其他的和SSD就没啥区别了,文章主要就是提出RFB