卷积尺寸计算公式 · 从切西瓜到特征图
卷积尺寸计算公式 本质上是一场关于数据分配的优雅游戏。就像切西瓜、切披萨,切多了边缘碎,切少了中间空。下面我们从直觉到公式,彻底搞懂 卷积核尺寸、步长 Stride、填充 Padding 如何影响输出特征图。
? 卷积核 · 瓢取瓜肉
想象一个高 H、宽 W 的二维矩阵(西瓜)。你拿一把刀(卷积 kernel),沿着特定路径瓢取瓜肉,拼成新形状。刀的大小就是 卷积核尺寸,常见 3×3、5×5。
- 核太小:感受野受限
- 核太大:参数爆炸
? 步长 Stride · 走对角线
步长(Stride) 控制卷积核每次移动的像素数。步长=1 时输出密集;步长=2 时输出尺寸减半,类似下采样。
- 大步长 → 数据量小,适合小模型
- 小步长 → 数据量大,适合大模型
⬜ 填充 Padding · 加白边
在图片四周加白边(零填充),避免边界信息丢失。padding 让卷积核能“切”到边缘,保持输出尺寸可控。
- valid 填充:不补零,输出缩小
- same 填充:补零后输出尺寸 = 输入/步长
? 核心公式拆解 · 加减乘除如算账
基础公式: 输出宽度 = (输入宽度 - 卷积核宽度 + 2 × 填充) / 步长 + 1
当填充为 0 (valid) 时:Output Width = Input Width - Kernel Width + 1 (步长为1时)。
? 这个公式看着冷冰冰,实际上就是个简单的除法,就像算账:你有一排西瓜 (W),用宽度为 K 的刀,每次移动 S 步,能切几次?
输入 5×5,核 3×3,步长 1,无填充
输出 = 5 - 3 + 1 = 3 (奇数 ✅)
输入 6×6,核 2×2,步长 1
输出 = 6 - 2 + 1 = 5 (奇数 ✅)
输入 6×6,核 3×3,步长 1
输出 = 6 - 3 + 1 = 4 (偶数 ⚠️ 数据重叠)
? 步长不同 · 输出形状大不同
步长为 1 · 密集输出
拿一个 3×3 卷积核去卷积 5×5 图像,步长=1,输出全 1 的 5×5 矩阵?实际上输出尺寸为 3×3(valid)。但若 padding='same' 且 stride=1,输出为 5×5。这里强调:步长=1 时输出尺寸接近输入,计算量大,但保留精细空间信息。
- 优点:信息损失少
- 缺点:容易过拟合,参数多
步长为 2 · 下采样效果
步长=2 时,输出尺寸大约减半。例如输入 5×5,核 3×3,步长2,无填充:输出 = (5-3)/2 +1 = 2。输出为 2×2,边缘信息保留但分辨率下降。步长=2 常用于替代池化层。
- 数据量减少,计算更快
- 可能丢失细节
步长 = 核宽 · 极端下采样
当步长等于核宽度(如核5×5,步长5),每次只取一行/一列,输出尺寸直接除以核宽。早期网络如AlexNet局部用,现在较少。因为信息量锐减,训练效果可能变差。
- 输出尺寸 = 输入/核宽 (整除)
- 容易丢失边界响应
? 输出宽度务必是奇数 · 中心对称的直觉
为什么强调输出宽度是奇数?因为卷积核是中心对称的,从中间往左、右各取一段等效。若输出偶数,中间两个位置数据重叠,破坏纯净性。
✅ 奇数输出 (5)
中间位置只计算一次,两边对称,特征图干净。例如 6×6 输入,核2×2,步长1 → 输出5 (奇数),每个位置权重清晰。
⚠️ 偶数输出 (4)
中间两个位置数据重叠,两边各一次,导致数值不均匀。如 6×6 输入,核3×3,步长1 → 输出4 (偶数),中间数据被重复计算。
像素对齐: 人类视觉沿着网格线定义,奇数输出保证中心像素对齐网格中心,避免额外计算。若算出偶数,调整步长、核大小或输入尺寸。
⏳ 卷积尺寸设计演进 · 时间轴
· AlexNet 大步长
使用 11×11 大核,步长4,快速下采样。输出尺寸骤减,但边缘信息丢失较多。当时GPU算力有限,步长=4 降低计算量。
· VGG 小核堆叠
全部采用 3×3 卷积,步长1,padding='same',输出尺寸不变。通过堆叠层数增加感受野,奇数输出 原则自然满足。
· ResNet 与瓶颈设计
引入 1×1 卷积调整通道,步长2下采样。输出尺寸减半时保持奇数,例如 56→28→14→7,均为奇数,利于信息传递。
+ · 高效网络与自动搜索
神经架构搜索自动选择核尺寸与步长,但 输出奇数 仍是硬约束。混合精度下偶数输出可能引起对齐偏差。
? 像素对齐与边缘处理 · 更深层的直觉
人类看图片时沿四条线定义网格。卷积核定义在网格上,若输出宽度为偶数(如4),输出矩阵与网格对齐不一致,增加计算开销。奇数输出 保证中心对齐。
实际编码时,若算出偶数,可调整步长或增加padding。例如输入 7×7,核3×3,步长1 → 输出5 (奇数);若输入 8×8,核3×3,步长1 → 输出6 (偶数),此时可设置padding=1,输出 = (8+2-3)/1+1=8 (偶数) 仍为偶数,需配合步长或核尺寸。
? 快速自查表
- 输入奇数?✅ 优先
- 步长1 + same padding → 输出=输入
- 步长2 → 输出 ≈ 输入/2 (向下取整)
- 避免偶数输出,除非特殊设计
? 卷积尺寸核心三原则
- 第一步: 用核宽度减去步长的倍数,再加上 1 (考虑填充)。
- 第二步: 若算出偶数,调整步长、核尺寸或输入尺寸,确保 输出为奇数。
- 第三步: 步长取多少看策略:大步长数据量小 (适合小模型),小步长数据量大 (适合大模型)。
别死磕奇数,有时候为了效率,哪怕略微碰到偶数,也能先跑起来,等训练稳了再调回来。毕竟 卷积尺寸计算公式 是个关于数据量的分配游戏。