【CVPR2021】Decoupled dynamic filter networks

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

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

可以看出,动态卷积的参数量从普通静态卷积的 (\(c \times c \times k \times k\)) 提升为 (\(c \times c \times k \times k \times h \times w\) ),参数量显著增加,计算复杂。为了降低计算量,作者提出了解耦的思路,把 (\(c \times h \times w\)) 分解成 (\(h \times w + c\)),即先计算空间位置的动态卷积,再计算通道上的动态卷积。
在这里插入图片描述
如图所示,包含两个步骤:

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

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

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

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

posted @ 2022-01-18 21:55  高峰OUC  阅读(124)  评论(0编辑  收藏  举报