ThunderNet:Towards Real-time Generic Object Detection论文笔记
文章目录
Attention:
论文解读的博客原文发布于个人github论文合集 欢迎关注,有想法欢迎一起讨论!私信评论均可。
后面有些语法在****的markdown上不支持,导致显示bug,我就懒得改了,有需求直接访问原博客查看。
创建人 | github论文汇总 | 个人博客 | 知乎论文专栏 |
---|---|---|---|
ming71 | paperdaily | chaser | 专栏 |
1. Motivation
进一步减小计算开销,使得两阶段的检测网络能够在移动嵌入式设备上实现实时运行。CNN可分为backbone和detect head两部分,从两个角度同时改进,提取更好的特征,更有效检测目标的同时轻量化网络。
2. ThunderNet
2.1 Backbone Part
-
Input Resolution
两阶段检测器为了获得较好的效果输入一般尺寸大于800像素,这里为了速度起见输入为320*320。作者还有一个观察:输入分辨率应该match模型的体量,两者不匹配效果都不好。(很好理解也很关键,在设计输入resize时需要注意这一点)
- Backbone Networks
语义差异:分类和回归对于backbone的需求各不相同,前者需要的是高层特征图抽象的语义信息,后者更注重低层特征图精细的定位信息。(对于一般的网络而言,误差更多出现在底层的定位上,经过实验很容易发现回归损失是不容易收敛的,分类损失则比较容易,所以可以采取增强底层信息的表达能力,加深通道的方法)。所以在之前SNet中采取移除C5而在早期阶段加更多的通道提升定位性能;但是这样会导致高层语义信息编码的不足,这里采取保留C5但是压缩其通道为512,然后增加底层通道以权衡两者的性能。
感受野:采用深度分离55卷积替代所有33,实际运行中这样的替换并没有太大加长运行时间,但是获得了更大的感受野,对于定位也是有帮助的。
很多轻量化的网络只专注了底层或高层一个方面,作者这里通过加深底层特征同时保留高层语义,兼顾了两者。
2.2 Detection Part
2.2.1 Compressing RPN and Detection Head
将RPN的256通道33卷积压缩为55深度可分离卷积和1*1卷积,使用了5尺度5比例25个anchor;
与light-head类似,沿用R-FCN的结构,进一步位置敏感特征图通道数压缩到5;
减少了测试阶段的RoI数目。
2.2.2 Context Enhancement Module
设计了CEM模块用于扩大感受野(FPN可以融合上下文做到,但是多分支卷积核预测计算量大;GCN也是计算量大)。
在C5上全局均值池化,然后将特征图1*1通道扩展到245上采样进行融合,融合多尺度的局部和全局特征。
2.2.3 Spatial Attention Module
思想:希望检测的特征图能够更多关注前景忽略背景,而RPN训练了物体的前景背景二分类,融合利用RPN的分类信息可以帮助特征图聚焦前景。
实现方法:对RPN通道变换(这里为了减少计算用的1*1)和CEM输出的245通道一致,然后接BN,再用sigmoid将参数归一化后作为权值乘到CEM特征图上进行加权。实现了对RPN前景背景信息的利用。额外的好处在于由于信息的融合,反向传播时,RCNN子网络也会帮助监督RPN的训练。
个人想法:首先,其实这就是个两个特征图的通道变换然后归一后product,搞得很复杂的样子…主要是这个操作反映一个问题:你说RPN有前景背景信息是没错,可是怎么利用这个信息呢?不知道,那就干脆整个特征图加权乘过去吧~~!这不是胡来吗…~~
3. Ablation Study
3.1 Input Resolution
- 5×5 Depthwise Convolutions:
大尺寸卷积核的有效感受野大,这个大家都知道。不过也没涨多少点。
- Early-stage and Late-stage Features:
最高的conv5去掉了会影响分类和回归的精度,可见高级语义特征还是要保留着;减少底层的通道数会损害检测精度;较好的权衡是高维通道压缩,低维通道加深,兼顾分类和回归需要的语义信息。
3.3 Detection Part
3.4 Balance between Backbone and Detection Head
一般而言backbone和head的大小也要match。作者还对比了一下mismatch的backbone和head:large-backbone-small- head 和 small-backbone-large-head,结论是前者更好,也很容易想,巧妇难为无米之炊,特征都不够怎么进行检测。当然,还是match一点的好,不然要么浪费了计算backbone提取的特征,要么特征不够检测效果不好。
Conclusion:
- 输入分辨率应该match模型的大小,两者不匹配效果都不好
- backbone和head的大小也要match
- 很有意思的思路:利用RPN的二分类信息训练前景监督器,使模型更加集中关注前景(但是怎么更有效地利用是个问题)