一、DCNv1——可以观察到扭曲的图片
1.传统卷积的问题
在普通的卷积操作中,比如 3×3 卷积,采样的位置总是固定的:就是中间一个点,四周八个点,整齐地排成一个小网格。
但现实中的图像并不整齐——比如猫的身体弯着、车被遮挡、手是歪的,固定采样会错过关键特征。
所以:普通卷积就像一把死板的尺子,不管对象怎么变,它都照原样量,当然不准。
2.核心思路
引入可学习的偏移量,使卷积核的采样位置不再固定,而是根据图像内容动态调整。
3.实现方式:
(1)预测偏移:
-
- 用一个小卷积网络,输入图片特征,输出一堆偏移量。
- 如果是 3×3 卷积,要预测 9 个位置的偏移,每个有 (Δx, Δy),所以是 18 个通道。
(2)采样时加上偏移:
-
- 每个卷积点都按照它自己的偏移,去图像的**“新位置”**取值。
- 比如本来取 (5,5),现在加偏移可能是 (5.3, 4.7)。
(3)双线性插值:
-
- 因为偏移后的点不一定是整数坐标,需要用插值方法从周围 4 个整数点“推测”出它的值。
- 插值是可微的,网络能正常训练。
4.优势:
- 看得更灵活:可以适应图像里扭曲、弯曲、遮挡的目标;
- 更准确提特征:比如边缘、纹理位置变化了,它也能跟着调整;
- 可以直接加到现有网络里:像加普通卷积层一样简单。
5.局限:
- 所有采样点“权重”一样:虽然位置能动,但不能判断哪个点更重要;
- 计算量变大了:多了一个偏移预测网络,还得插值;
- 有时学不好:训练初期可能学到一些奇怪的偏移(比如跑出图像外面)。
二、DCNv2——可以学会哪个点更重要(先动再选)
1.核心思路:
通过引入 调制机制(Modulation),为每个采样点增加一个可学习的权重。
在 DCNv1 的基础上引入调制机制(modulation),为每个采样点增加一个可学习的标量权重。
2.实现方式:
(1)偏移预测:
-
- 和 DCNv1 一样,预测每个采样点的偏移量(2N 通道)。
(2)调制系数预测:
-
- 额外预测 N 个标量调制因子(1 个采样点对应 1 个),加起来共输出 3N 通道。
(3)调制机制:
-
- 每个采样点的特征,除了“去哪取值”之外,还要乘以一个 sigmoid 激活的权重系数,表示其贡献程度。
(4)插值与卷积:
-
- 偏移位置采样后,通过双线性插值得到值,再与调制系数相乘,最后进行卷积加权求和。
3.优势:
- 更智能:不仅采样位置能变,还能学会“重要点多看一眼”;
- 提升性能:在目标检测、实例分割等任务中效果更好;
- 兼容性好:仍可作为 Drop-in 模块替代普通卷积。
4.局限:
- 结构变复杂:偏移和调制是两个分支,训练起来更复杂;
- 计算开销增大:预测分支 + 插值过程都增加了时间成本;
- 数值不精确问题:仍依赖双线性插值,可能会有信息损失。
三、DCNv3——一步完成v1(偏移)和v2(调制)
1.核心机制:
引入 统一的注意力机制,把“采样点该往哪看”和“采样点贡献大小”这两件事一次性学完,并去除插值操作,进一步提升计算效率和适配能力。
2.实现方式:
(1)融合式注意力预测:
-
- 用一个注意力模块,直接预测出每个采样点的位置偏移 + 权重(重要性),实现偏移建模 + 权重建模合二为一。
(2)替代插值机制:
-
- 不再使用双线性插值,转而使用更高效的 Grid Sampling + 点间加权融合机制,数值更稳定,速度更快。
(3)多头并行结构:
-
- 与 Transformer 接轨,支持像多头注意力一样的并行建模,适配 Swin Transformer、ConvNeXt 等新架构。
3.优势:
- 更高效:模块设计紧凑,无需单独预测偏移和权重;
- 更强表达能力:空间建模与注意力建模一起做;
- 更强兼容性:适合 Transformer、CNN 等混合结构;
- 更好性能:在多个主流任务中表现领先(检测、分割、关键点定位等)。
4.局限:
- 理论结构更复杂:引入了注意力机制和融合预测,需要更精细的工程优化;
- 学习曲线更陡峭:不如 DCNv1/v2 直观易懂,代码也更复杂。