传统的CNN中,convolution 和 pooling 的操作已被定死。只能在方正死板的区域内按部就班地映射操作:
这种设计显然对于现实场景中遇到ratio(比例)和rotation(旋转角度)多变的的非刚体object,是不够general的。那么怎么办呢?
传统的回避途径有以下两个:
但是依然无法一劳永逸,原因有二:
与其回避,不如直面。对于传统的一套fixed的module(普通convolution、普通RoI Pooling),MSRA的Dai Jifeng大佬对应提出了deformable的一套module:Deformable Convolution & Deformable RoI Pooling。
本质的解决思路就是,让传统的Convolution和RoI Pooling操作能够 “ 自动形变 ” :
通过“deformable”的逐层叠加,使得CNN能 更精准地 (不受ratio、rotation的影响) 读取object的语义:
普通的Convolution计算公式如下:
其中RRR定义为:
Deformable Convolution在其后面简单地加上了一个 “ 2-D offset ” :
于是,新的Deformable Convolution计算公式如下:
普通的RoI Pooling计算公式如下:
同样的,Deformable RoI Pooling也是简单地在其后面加上了一个 “ 2-D offset ” :
得到新的Deformable RoI Pooling计算公式如下:
作者还顺带对自己在R-FCN中提出的PS RoI Pooling进行了一下“deformable”改进:
通过实验,发现如果“Deformable conv3×3”逐层叠加三次,感受野可以比普通Convolution的叠加更加契合object的实际范围。这也意味着,可能会获得更精准的语义信息来帮助识别:
Detection领域和Segmentation领域的几大扛把子算法也出来为“Deformable套件”代言:“自从用了MSRA的Deformable,mAP越来越高。” (= ̄ω ̄=)
Note:
最后,连COCO数据集都站出来,用满表全胜的数据为“Deformable套件”打call:“Deformable就是好,稳定涨点,谁用谁知道。。。” ( ̄▽ ̄)~*
简单地说,deformable module就是在传统module的输出后面加上了一个 “2-D offset”。
在我看来,DCN的好处主要有四:
当大家趋之若鹜压榨Feature/Image Pyramid、Head、Proposal、Speed/accuracy trade-off剩余价值的时候,DCN却另辟蹊径,洞察本质,对最基石的Conv/RoI Pooling计算方式开刀。不得不说,insight很棒,简直拨云见雾,天马行空。