在移动端部署检测模型时,因为速度原因,通常采用的是轻量级的backbone+one stage detector的方式。我之前在项目里就是采用的
就是这种方案,但精度始终没法和two-stage相比,而two-stage又太慢,之前测过速度之后就没再考虑在移动端采用two-staget方案,
而thundernet重新给了我在移动端采用two-stage的希望。
先来看下网络的整体结构图,主要分成了backbone、RPN、ROI-head,主要针对前两个部分改进,roi-head部分延续了light-head的roi,
下面分别看一下。
一、backbone
基于shufflenetV2(共三个),为了扩大感受野,将所有的3*3 depth conv 替换为5*5 depth conv。对于SNet146和535,移除conv5,
对于SNet49,conv输出一个比较薄的feature map。
二、RPN
对于PRN部分,主要增加了一个CEM模块和SAM模块。
(1)CEM
如图,其实就是一个特征融合模块,跟FPN没啥关系。
注意:这里比lighe-head用了更少的特征图:7*7*5
(2)将融合后的特征fcem经过5*5 dwconv + 1*1conv(替换原来的3*3conv),生成frpn,这一部分用于生成rois。
(3)RPN是做背景-目标的二分类模型,作者认为这个特征可以用来做attention:更加专注于目标,而非背景。
frpn 经过1*1conv+BN,再经过sigmoid,产生0~1之间的值,然后与fcem做点乘(?),输出fsam,这个
特征用于后续的psRoIAlign。
(4)最后就是roi head, 延续light-head rcnn,使用1024维的全连接层,然后分类、回归位置。
想法
总体感觉就是shufflenetV2 + light-head ,使用大的分离卷积核扩大感受野,特征融合+attention获得更好的
特征,同时进一步的削减rpn特征图的厚度,来减小计算量。代码目前没有公布预训练模型,手上也没有机器,挺想用
实际数据去测试一下的。