當前針對目標檢測算法有兩種思路(暫時不考慮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效果怎么樣
,還是有些期待的。