AlignDet特征对齐:one-stage检测算法的改进

当前针对目标检测算法有两种思路(暂时不考虑anchor free),其中一种是轻量化two-stage检测算法(如thundernet),另外一种就是

提高one-stage算法的精度,如使用更好的特征(特征融合、多尺度特征FPN等),包括基于SSD改进的refinedet,基于FPN的RetinaNet等等。

AlignDet就是在RefinDet的基础上的进一步工作,它指出了one-stage和two-stage的精度差距的本质问题--特征对齐问题(其实这个问题在19年的1月份

RefineDet的作者就在一个讲座里指出了,不知道为啥让图森的人抢先了。另外似乎跟RepPoints里的basemodel一样,

在知乎引发了热议https://www.zhihu.com/question/338959309)。

 

1、多尺度特征和One-stage

在two-stage中,通过roipooling或者roialign可以解决特征的对齐问题。在One-stage中,可以通过FPN来缓解特征的对齐问题--FPN中,不同尺度的

bbox,会对应不同尺度的feature。作者做了一组实验,分别在faster rcnn和retinaNet中,去除FPN,one-stage精度下降的更厉害。

AlignDet特征对齐:one-stage检测算法的改进

 

 

 另外关于特征对齐,可参考上述知乎链接里kwduan的回答。

2、RoIConv

   思路:由anchor回归得到learned  anchor之后,根据stride算出其对应特征图的offsets,

然后dcn用这个offsets,去卷积learned anchor 对应的feature,这样就将特征对齐了。将

对齐后的特征再次进行分类和回归。(疑问:既然已经知道了learned anchor了,为什么

还要算offsets,再去用dcn呢?直接用一个conv不就可以了吗?)

3、AlignDet

如图,个人感觉这已经不是one stage了。其中DPM可以是RPN,SSD等,这部分就是一个One-stage。

经过RoiConv去做特征对齐,再去做分类和回归。

(想法:和two-stage相比,这里采用了全卷积网络,差别就剩没有耗时的roi-pooling了,这也是AlignDet的速度仍然要比two-stage快的原因。)

AlignDet特征对齐:one-stage检测算法的改进

 4、实验

     (1)只使用单一尺度,可以看到RoIConv高了5个点,还是挺牛逼的。

AlignDet特征对齐:one-stage检测算法的改进

 

 

 

  (2)在多尺度FPN上增加RoiConv仍然可以提高。(疑问:不加ADM的AlignDet,不就是DPM略有变化的RetinaNet吗?效果为啥差别这么大?)

AlignDet特征对齐:one-stage检测算法的改进

 

 

 (3)不同阶段采用不同的iou来挑选样本(类似与cascade rcnn)。在dpm阶段使用较低的iou,在adm阶段使用较高的iou,整体看

效果最好。

AlignDet特征对齐:one-stage检测算法的改进

 

(4) RoiConv的设计。越大越好,同时为了速度考虑,在使用7*7RoiConv的同时,p3的RoiConv使用3*3(是为了在paper里速度比RetinaNet好看吗?)

AlignDet特征对齐:one-stage检测算法的改进

 

 

 

 想法

总的来看还是一篇不错的paper,对特征对齐给出了一个不错的解决方法,可惜有些细节还有疑问,目前还没有开源。

one-stage和two-stage现在的界限越来越模糊了,此前我曾移植过mobilenet-refinedet,速度并不理想,不知道轻量级的aligndet效果怎么样

,还是有些期待的。

 

上一篇:spark(17)DAG有向无环图、stage划分、spark任务调度及运行架构


下一篇:年龄识别之ssrnet