作者在读论文的时候,发现卷积操作的种类也是很丰富的,比如逐点卷积、深度卷积、可分离卷积等,碰到这些基础概念时不免还是有些陌生,下面就来一一学习一下。(内容可能不完全准确,还恳批评指正!)
在 3D 医学图像分割领域(如脑肿瘤、肝脏、血管分割),卷积是特征提取的基础。CT、MRI 输出的三维体数据不同于 2D 自然图像,是包含高度、宽度、切片深度三个空间维度的立方体数据,张量一般记为 H*W*D*C_in。先解释维度符号含义:H(Height)代表单张断层切片图像的高度;W(Width)代表断层切片宽度;D(Depth)是深度,对应 CT/MRI 沿着扫描方向的切片数量;C_in(Input Channel)是输入通道,对于多模态 MRI(BraTS 数据集)C_in=4,分别为 T1、T1ce、T2、FLAIR 四种模态;单模态 CT 则一般C_in=1。
标准 3D 卷积(普通卷积 Conv3d)
标准三维卷积是医学分割最基础运算,针对 CT/MRI 体数据 H*W*D*C_in,使用一组尺寸为 k*k*k 的卷积核,在高度、宽度、深度三个空间维度同时滑动。对于输出特征上每一个体素位置,输出值由卷积核与输入对应感受野内所有通道、所有空间位置做加权求和得到。

公式中,W代表卷积核权重,b为偏置;C_in是输入通道数,C_out是输出特征通道数,k*k*k为 3D 卷积核尺寸。标准 3D 卷积参数量公式:Params = C_out * C_in *k*k*k。
可以看到标准卷积参数量同时和输入输出通道、卷积核空间尺寸强相关,3D 场景下参数量膨胀非常快,这也是 3D 医学网络容易显存爆炸的根源。标准卷积同时完成空间维度特征聚合 + 通道维度特征融合两件事,适合提取局部的空间与通道联合特征。
PyTorch 简单代码示例:
python
import torch
import torch.nn as nn
# in_channels输入模态/特征通道,out_channels输出通道,kernel_size卷积核,stride步幅,padding补零
conv3d = nn.Conv3d(in_channels=4, out_channels=16, kernel_size=3, stride=1, padding=1)
# PyTorch张量格式:[Batch, Channel, H, W, D],Batch为批量样本数量
x = torch.randn(2, 4, 64, 64, 64)
out = conv3d(x)
print(out.shape)
深度卷积 Depthwise Conv3D(DW Conv3D,深度卷积)
深度卷积是深度可分离卷积第一部分,每个输入通道单独分配一个卷积核,通道之间完全不做交互。输入通道数等于卷积核组数,一组卷积核只处理一个输入通道。

参数量:Params = C_in *k*k*k。可以看到参数量不再乘以输出通道数,参数量相比标准卷积大幅下降。
深度卷积只做空间维度的局部特征聚合,不做通道融合,输出通道数量等于输入通道。比如在 Slim‑UNETR 的 LRC 模块中,深度卷积用来在 3D 窗口内聚合邻域空间信息,提取边界、纹理这类局部特征。
PyTorch 中设置 groups=in_channels 实现深度卷积:
python
import torch
import torch.nn as nn
# groups等于输入通道,开启深度卷积
dw_conv = nn.Conv3d(in_channels=16, out_channels=16, kernel_size=3, stride=1, padding=1, groups=16)
# [B, C, H, W, D]
x = torch.randn(2,16,64,64,64)
out = dw_conv(x)
print(out.shape)
深度卷积只学习每个通道内部的空间模式;通道之间没有信息交互,因此深度卷积输出之后,一般紧跟逐点卷积完成通道融合。
逐点卷积 Pointwise Conv3D(PW Conv3D,1×1×1 卷积)
逐点卷积本质是卷积核大小为 1*1*1 的标准 3D 卷积,卷积核没有空间感受野,不会在(H、W、D)三个空间维度做邻域运算,仅在通道维度做加权融合。

参数量:Params = C_out * C_in *1*1*1 = C_out * C_in 。
逐点卷积不改变特征图(H,W,D)空间尺寸,专门实现通道之间信息交互、升维或者降维。比如在 Slim‑UNETR 的 LRC 模块流程:PW‑>DW‑>PW,先用逐点卷积混合通道,深度卷积提取空间局部特征,再用逐点卷积再次融合通道。
基于Pytorch的简单代码示例:
python
import torch
import torch.nn as nn
# kernel_size=1即为逐点卷积
pw_conv = nn.Conv3d(in_channels=16, out_channels=32, kernel_size=1, stride=1, padding=0)
x = torch.randn(2,16,64,64,64)
out = pw_conv(x)
print(out.shape)
补充:
之所以把空间局部特征提取和通道特征融合拆成深度卷积、逐点卷积 这两步,核心原因是标准 3D 卷积将空间维度的邻域加权和通道维度的信息交互耦合在同一个卷积核内完成,卷积核需要同时学习空间与通道两套映射关系 ,参数量和计算开销会随输入输出通道数急剧膨胀,在 CT/MRI 三维体数据上极易造成显存过载。
将运算解耦拆分后,深度卷积只负责在每个独立通道内部做 3D 空间滑动,完成体素邻域的局部空间特征提取,不做任何跨通道信息交互;后续的逐点卷积利用 1×1×1 卷积核,专门承担跨通道的特征融合、升维降维任务,不再处理空间邻域信息。这种分工让两个算子各自专注单一任务,在保留特征表征能力的前提下大幅削减参数量与 FLOPs,这也是 Slim-UNETR、nnUNet 轻量化变体等三维医学分割模型选择该组合的关键。
从特征学习逻辑来说,先在单通道内捕获 CT/MRI 图像的纹理、边界这类局部空间模式,再在通道维度把不同空间特征组合融合,这种分步学习的方式,也更适配医学图像的特征分布规律。
深度卷积 DW 之后:
✅ 不变:H/W/D 空间尺寸、通道数量
✅ 变化:每个通道内部提取了空间局部纹理 / 边界特征,通道之间依旧互相独立,没有信息交流
逐点卷积 PW 之后:
✅ 不变:H/W/D 空间尺寸
✅ 变化:跨通道特征融合;通道数目增加 / 减少,实现升维降维
深度可分离 3D 卷积(Depthwise‑Separable Conv3D)
深度可分离卷积 = 深度卷积 (DW) + 逐点卷积 (PW) 。它把标准卷积 "空间 + 通道" 耦合在一起的运算拆分为两步:第一步深度卷积只提取空间局部特征,第二步逐点卷积完成通道融合。
总参数量:Params = C_in*k^3 + C_in*C_out。对比标准卷积 C_in* C_out*k^3,三维场景参数量下降非常明显。医学轻量化网络广泛使用该模块,在保证特征提取能力的前提下降低算力开销。
基于Pytorch的简单代码示例:
python
import torch
import torch.nn as nn
class DepthwiseSeparableConv3d(nn.Module):
def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1):
super().__init__()
# 深度卷积:单独提取每个通道的空间特征
self.dw = nn.Conv3d(in_channels, in_channels, kernel_size, stride, padding, groups=in_channels)
# 逐点卷积:跨通道特征融合
self.pw = nn.Conv3d(in_channels, out_channels, kernel_size=1)
def forward(self, x):
x = self.dw(x)
x = self.pw(x)
return x
sep_conv = DepthwiseSeparableConv3d(16,32,kernel_size=3,padding=1)
x = torch.randn(2,16,64,64,64)
out = sep_conv(x)
print(out.shape)
转置 3D 卷积 ConvTranspose3d(反卷积 / 上采样卷积)
转置卷积经常被叫做反卷积,但它不是标准卷积求逆运算,不能完全还原原始输入,它是一种带可学习参数的上采样操作,在 U‑Net 系列解码器中用来恢复三维特征图分辨率,比如 Slim‑UNETR 中 TS Conv,同时是 LRD 局部反向扩散的核心算子。
标准卷积可以通过 stride 缩小特征的(H,W,D)尺寸;转置卷积作用相反:给定步幅r,放大输入的空间分辨率。底层操作逻辑:输入特征的每一个体素点,按照卷积核权重,把数值加权 "辐射、分发" 映射到输出特征图一块邻域窗口内多个位置,多个点权重发生重叠时直接相加 ,这就是论文中提到 "分发、辐射" 的底层实现。
3D 转置卷积输出尺寸计算公式:

公式中,I_size 为输入特征在某一空间维度的尺寸,O_size 是输出对应维度尺寸。
例子:在 Slim‑UNETR 的 LRD 局部反向扩散中,GST 使用步幅 r 做下采样得到稀疏 token,LRD 使用相同 r 步幅的转置卷积,将 1 个稀疏中心 token 携带的全局特征,映射回原本对应的整个窗口全部体素位置,实现全局语义向稠密网格分发。
基于PyTorch的简单代码示例:
python
import torch
import torch.nn as nn
# stride=2,H/W/D三个维度全部2倍放大
trans_conv = nn.ConvTranspose3d(in_channels=16, out_channels=16, kernel_size=3, stride=2, padding=1, output_padding=1)
# 低分辨率输入 [B,C,H,W,D]
x = torch.randn(2,16,32,32,32)
out = trans_conv(x)
print(out.shape) # torch.Size([2,16,64,64,64])
空洞 3D 卷积 Dilated Conv3d(膨胀卷积)
空洞卷积在卷积核元素之间插入空洞,在不增加卷积核参数量、不降低特征分辨率的条件下扩大感受野。定义膨胀率 dilation,卷积核元素之间间隔 d-1 个空位。
有效卷积核尺寸:k_effective =k + (k-1)*(dilation-1)。
它广泛用于医学分割,希望扩大感受野捕捉大病灶,同时不做下采样、不损失分辨率。
基于PyTorch的简单代码示例:
python
import torch
import torch.nn as nn
# dilation=2,膨胀率
dilate_conv = nn.Conv3d(16,16,kernel_size=3,stride=1,padding=2,dilation=2)
x = torch.randn(2,16,64,64,64)
out = dilate_conv(x)
print(out.shape)
3D 卷积算子对比表
下表针对 CT/MRI 三维体数据场景,对比各类 3D 卷积算子。
标准卷积将空间、通道运算耦合;
深度可分离卷积把两者拆成 DW+PW 两步,是轻量化模型的核心思路;
转置卷积多用于解码器分辨率恢复;
空洞卷积在不损失分辨率的前提下扩大感受野。
| 卷积类型 | 核心操作 | 计算逻辑 | 参数量 | 优点 | 缺点 | 医学分割场景(例子) |
|---|---|---|---|---|---|---|
| 标准 3D 卷积 Conv3d | 空间邻域加权 + 跨通道融合耦合在一起 | 卷积核在 H/W/D 三维滑动,同时完成空间特征提取、通道信息交互 | C_out* C_in*k^3 | 特征表达能力最强,可以同时学习空间与通道联合特征 | 参数量、FLOPs 高;3D 体数据显存开销巨大 | nnUNet 基础模块,U-Net 编码器主干 |
| 深度 3D 卷积 DW Conv3d | 仅单通道内部做空间卷积,通道之间独立,无跨通道交互 | 一个通道对应一组卷积核,只提取本通道内部的空间局部特征 | C_in* k^3 | 参数量小,专注捕捉空间纹理、边界 | 无法实现通道之间信息融合,单独使用表征能力有限 | Slim-UNETR LRC 模块,和 PW 卷积成对使用 |
| 逐点 3D 卷积 PW Conv3d(1×1×1) | 仅通道维度加权融合,无空间感受野 | 卷积核尺寸 1×1×1,不改变 H/W/D,只做通道间信息混合 | C_in* C_out | 开销极低,灵活完成升维、降维、通道融合 | 没有空间感受野,无法提取空间局部特征 | Slim-UNETR,深度可分离卷积的后半部分 |
| 深度可分离 3D 卷积 | DW 深度卷积 + PW 逐点卷积串联,空间、通道运算解耦 | 第一步 DW 提取单通道空间特征;第二步 PW 融合通道信息 | C_in * k^3 + C_in * C_out | 大幅降低参数量与计算量,兼顾空间提取与通道融合 | 表征能力略弱于同通道标准卷积 | 轻量化医学分割网络,Slim-UNETR、轻量 nnUNet |
| 3D 转置卷积 ConvTranspose3d | 可学习参数的上采样,低分辨率→高分辨率 | 每个输入体素,依靠卷积核权重,辐射分发到输出窗口多个位置,重叠位置累加 | 和标准 Conv3d 公式一致 | 可端到端学习上采样权重,恢复特征空间分辨率 | 容易出现棋盘格伪影,算力开销偏大 | U-Net 解码器,Slim-UNETR LRD 反向扩散模块 |
| 空洞 3D 卷积 Dilated Conv3d | 带空洞的卷积核,扩大感受野,不降低分辨率 | 卷积核采样点之间插入空洞,在保持特征尺寸不变的情况下扩大有效感受野 | C_out* C_in*k^3 | 不下采样即可获得大感受野,捕捉大体积病灶 | 远距离采样容易造成局部信息断裂,网格伪影 | 多尺度上下文提取,大肿瘤 / 大器官分割任务 |