当前针对目标检测算法有两种思路(暂时不考虑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精度下降的更厉害。
另外关于特征对齐,可参考上述知乎链接里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快的原因。)
4、实验
(1)只使用单一尺度,可以看到RoIConv高了5个点,还是挺牛逼的。
(2)在多尺度FPN上增加RoiConv仍然可以提高。(疑问:不加ADM的AlignDet,不就是DPM略有变化的RetinaNet吗?效果为啥差别这么大?)
(3)不同阶段采用不同的iou来挑选样本(类似与cascade rcnn)。在dpm阶段使用较低的iou,在adm阶段使用较高的iou,整体看
效果最好。
(4) RoiConv的设计。越大越好,同时为了速度考虑,在使用7*7RoiConv的同时,p3的RoiConv使用3*3(是为了在paper里速度比RetinaNet好看吗?)
想法
总的来看还是一篇不错的paper,对特征对齐给出了一个不错的解决方法,可惜有些细节还有疑问,目前还没有开源。
one-stage和two-stage现在的界限越来越模糊了,此前我曾移植过mobilenet-refinedet,速度并不理想,不知道轻量级的aligndet效果怎么样
,还是有些期待的。