【CVPR2021】Decoupled dynamic filter networks

【CVPR2021】Decoupled dynamic filter networks_第1张图片

论文:https://thefoxofsky.github.io/files/ddf.pdf
代码:https://github.com/thefoxofsky/ddfnet
主页:https://thefoxofsky.github.io/project_pages/ddf

先从论文首页的图说起。第一行为普通静态卷积,对于道路、车辆、建筑使用相同的卷积核,这样会导致一个问题:sub-optimal feature learning。第二行为动态卷积,每一个像素都使用不同的卷积核,道路、车辆、建筑使用的卷积核就不一样了,有助于特征学习。但是会引入一个新的问题:参数量大大增加。

【CVPR2021】Decoupled dynamic filter networks_第2张图片

可以看出,动态卷积的参数量从普通静态卷积的 ( c × c × k × k c \times c \times k \times k c×c×k×k) 提升为 ( c × c × k × k × h × w c \times c \times k \times k \times h \times w c×c×k×k×h×w ),参数量显著增加,计算复杂。为了降低计算量,作者提出了解耦的思路,把 ( c × h × w c \times h \times w c×h×w) 分解成 ( h × w + c h \times w + c h×w+c),即先计算空间位置的动态卷积,再计算通道上的动态卷积。
【CVPR2021】Decoupled dynamic filter networks_第3张图片
如图所示,包含两个步骤:

  • 在 spatial 维度上,首先用 1x1 的卷积将 channel 数变成 k 2 k^2 k2,reshape后,就是每个空间位置上的卷积核,参数量是 k × k × h × w k\times k \times h \times w k×k×h×w
  • 在 channel 维度上,通过 GAP + SE 操作,每个 channel 得到一个 k 2 k^2 k2 向量,即每个 channel 分配一个卷积核,参数量是 k × k × c k\times k \times c k×k×c

好的,终极问题来了? 每个空间位置上有一个卷积核,每个 channel 上有一个卷积核,如何把卷积核作用到 ( c , h , w ) (c, h , w) (c,h,w) 的三维矩阵中的每个像素上?

具体方法是: 每个像素点,找到与它 对应位置的卷积核对应通道的卷积核 ,这两个卷积核进行 逐像素相乘 ,得到新的卷积核再对这个点进行卷积

论文中还有一个点值得注意,为了提升性能,卷积核归一化时,作者设计了一个 Filter-Norm,性能会优于使用 Batch-Norm 和 Sigmoid,具体可以参考作者实验,不再多说。

你可能感兴趣的:(论文推介,深度学习,计算机视觉,cnn)