这篇论文真是让我又爱又恨,能够说是我看过的最认真也是最屡次的几篇paper之一了,首先deformable conv的思想我以为很是好,经过end-to-end的思想来作这件事也是极其的make sense的,可是一直以为哪里有问题,以前说不上来,最近想通了几点,先初步说几句,等把他们的代码跑通而且实验好本身的几个想法后能够再来聊一聊。首先我是作semantic segmentation的,因此只想说说关于这方面的问题。函数
直接看这篇paper的话可能会以为ji feng的这篇工做很是棒,但实际上在我看来仍是噱头多一点(我彻底主观的胡说八道),deformable conv是STN和DFF两篇工做的结合,前者提供了bilinear sample的思路和具体的bp,后者提供了warp的思路和方法,不过好像说的也不是很准确。。我暂时的理解是这样的:deformable conv就是把deep feature flow中的flow换成了可学习的offset。接下来分为亮点和槽点来讲一说。学习
1、亮点spa
亮点说实话仍是不少的,首先解决了STN(spatial transform network)的实用性问题,由于STN是对整个feature map作transform的动做,例如学习出一个linear transform的 matrix,这个在作minist的时候固然是极其合理的,可是在真实世界中,这个动做不只不合理并且意义不大的,由于复杂场景下的信息不少,背景也不少,那么它是怎么作的呢?orm
首先我想先说一个很重要的误区,不少人觉得deformable conv学习的是个deformabe 的kernel,比方说原本是一个3*3相互链接的kernel,最后变成了一个没个位置都有一个offset的kernel。实际状况并非这样的,做者并无对kernel学习offset,而是对feature的每一个位置学习一个offset,一步一步的解释就是:首先有一个原始的feature map F,在上面作channel为18的3*3的卷积,获得channel=18的feature map F_offset,而后再对F作deformable conv而且传入offset 的值F_offset,在新获得的结果上,每一个值对应原来的feature map F上是从一个3*3的kernel上计算获得的,每一个值对应的F上的3*3的区域上的每一个值都有x、y方向上的两个offset,这3*3*2=18的值就由刚才传入的F_offset决定。。。。貌似说的有点绕,其实理清楚关键的一点就是:学习出来的offset是channel=18而且和原 feature map同样大小的,对应的是main branch上作deformable conv时候每位置上的kernel的每一个位置的offset。blog
知乎上有我的说了一句我特别赞同的话:用bilinear的方法代替weight的方法,即用采样代替权重的方法。这个思惟是能够发散开来作更多的工做的,这也是我以为这篇paper最棒的地方。it
2、槽点io
这个其实我今天写篇blog的重点。。。我对offset可否学习到极其的的不看好,虽然最后还要看实验的效果和实际的结果,当我想说两点。form
一、从feature的需求来看,senmantic segmentation对于feature的需求是跟detection不一样的,这个问题其实jifeng Dai和kaiming的R-FCN中都提到过,而后semantic segmentation须要的feature不会过于关注什么旋转平移不变性,也就是物体的旋转平移对结果是有影响的,他们对position是care的,这个问题有时间我想再看看R-FCN讨论一发,所以这里直接用feature 经过一层卷积就能够学习到offset,我是怀疑的。transform
2.上面的怀疑其实有点没道理,此次有个稍微有那么一丢丢的怀疑,bilinear sample实际上是一个分段线性函数,因此逻辑上在bp的时候,你要想你的目的是让loss降低的话,就不能让你的step太大以致于超过来当前的线性区间,也就是你在当前四个点中算出来梯度,若是你更新后跳到另外四个点上来,理论上此次的gradient的更新就是错误的,loss是不必定降低的,可是话说回来,若是不跳到另外四个点,这个offset永远限制在当前四个点里面的话,也是毫无心义的。话再说回来,由于整个feature map仍是smooth的,这也跟图像的性质有关,因此咱们仍是比较相信只要你的lr不是很大,loss仍是会降低的。 network
3、总结
总的来讲这是一篇颇有意义的工做,在我看来,任何能启发以后的工做和引发人思考的工做都是颇有意义的,不管它work不work,在benchmark跑的怎么样。
还有些东西我想等实验跑完再来讲说,因此待续~