thundernet

在移动端部署检测模型时,因为速度原因,通常采用的是轻量级的backbone+one stage detector的方式。我之前在项目里就是采用的

就是这种方案,但精度始终没法和two-stage相比,而two-stage又太慢,之前测过速度之后就没再考虑在移动端采用two-staget方案,

而thundernet重新给了我在移动端采用two-stage的希望。

先来看下网络的整体结构图,主要分成了backbone、RPN、ROI-head,主要针对前两个部分改进,roi-head部分延续了light-head的roi,

下面分别看一下。

thundernet

 

 

一、backbone 

 

         基于shufflenetV2(共三个),为了扩大感受野,将所有的3*3 depth conv 替换为5*5 depth conv。对于SNet146和535,移除conv5,

对于SNet49,conv输出一个比较薄的feature map。

 

thundernet

 

 

二、RPN

 

  对于PRN部分,主要增加了一个CEM模块和SAM模块。

 

  (1)CEM

    如图,其实就是一个特征融合模块,跟FPN没啥关系。

    注意:这里比lighe-head用了更少的特征图:7*7*5

 

  thundernet

 

 

     (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维的全连接层,然后分类、回归位置。

                

                thundernet

 

 

 想法

总体感觉就是shufflenetV2 + light-head ,使用大的分离卷积核扩大感受野,特征融合+attention获得更好的

特征,同时进一步的削减rpn特征图的厚度,来减小计算量。代码目前没有公布预训练模型,手上也没有机器,挺想用

实际数据去测试一下的。

 

上一篇:《Spark性能优化之shuffle调优篇》


下一篇:JavaFX桌面应用开发-HelloWorld