目录
1. 前言:标准卷积的两道"紧箍咒"
2. AKConv 方法详解
2.1 整体流程
2.2 核心创新一:任意尺寸初始采样坐标生成算法
2.3 核心创新二:可学习偏移量自适应目标形变
3. 完整代码(即插即用)
4.1 环境依赖
4.2 完整实现(akconv.py)
4. 即插即用集成指南
4.1 前置说明:即插即用的含义与限制
4.2 在任意 PyTorch 网络中替换标准卷积
5. 总结
5.1 论文做了什么
6.适用场景建议:
1. 前言:标准卷积的两道"紧箍咒"
基于卷积运算的神经网络在深度学习领域取得了显著成果,但标准卷积操作存在两个固有缺陷:
缺陷一:采样形状固定。 卷积运算被限制在一个局部窗口内,无法捕获窗口之外其他位置的信息,并且采样点排布永远是规整的方形网格。而现实世界中,目标的形状和尺寸千变万化——不同数据集之间不同,同一张图里的不同位置也不同。用一张固定的"方格网"去适配所有目标,显然是不合理的。
缺陷二:参数量随核尺寸平方增长。 卷积核尺寸固定为 k×k的正方形,参数量随 k的增大呈平方级增长(1,4,9,16,25,…)。想把感受野做大一点,付出的参数与计算代价就急速膨胀,这对硬件环境非常不友好。以 3×3 卷积为基础的现代 CNN(ResNet、YOLO 系列、MobileNet 等)长期被这两条约束限制。大核卷积(如 RepLKNet 的 31×31)证明了大感受野的价值,但代价是参数量平方级膨胀。
AKConv(Alterable Kernel Convolution)的出发点正是同时解开这两道紧箍咒:
任意参数数量:核大小 N 可以取任意正整数(3、5、7、9、13……),参数量随 N 线性增长(1,2,3,4,5,…1,2,3,4,5,…);
任意采样形状:通过一套新的初始坐标生成算法为任意尺寸的核定义初始采样位置,再通过可学习偏移量(offset)动态调整采样形状,使卷积核能自适应目标形变。
2. AKConv 方法详解
2.1 整体流程
AKConv 的整体计算流程可分为四步(以核大小 N=5为例):
偏移量预测:用一个普通 3×3 卷积 p_conv从输入特征预测偏移量,输出维为 (B,2N,H,W),即每个空间位置 NN 个采样点、每点 2 个坐标方向的偏移;
坐标合成:初始采样坐标 = 规则位置基准 P0 + 初始相对坐标 Pn+ 偏移量 ΔP;
双线性插值重采样:合成后的坐标一般是小数(非整数位置),对每个坐标用双线性插值从输入特征图上取值;
堆叠 + 一维卷积:把重采样得到的特征按规则堆叠成通道-空间排布,再用一个 kernel=(N,1),stride=(N,1) 的普通卷积完成加权求和,输出特征。
2.2 核心创新一:任意尺寸初始采样坐标生成算法
这是论文最重要的贡献(论文 Algorithm 1)。目标:给定任意正整数 N(卷积核参数数量),生成 N个初始采样点的相对坐标 Pn算法逻辑(伪代码对应代码中的
_get_p_n):规则部分:生成 row×base的规则网格坐标(前 row⋅base个点);
余数部分:若 mod>0,在网格下方补一行,取该行前 mod个位置(凑齐N个点)。
2.3 核心创新二:可学习偏移量自适应目标形变
偏移量分支的实现要点:
p_conv 是一个普通
nn.Conv2d(inc, 2N, kernel_size=3, padding=1, stride=stride),输出每个位置 N个采样点在 (x,y)两个方向的偏移;