【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 × 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),即先计算空间位置的动态卷积,再计算通道上的动态卷积。
在这里插入图片描述
如图所示,包含两个步骤:

  • 在 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,具体可以参考作者实验,不再多说。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值