理论基础
三维卷积是二维卷积的自然扩展,它在处理三维数据时具有独特优势。与二维卷积在图像平面上滑动不同,三维卷积核在三个维度上同时进行卷积运算。
三维卷积的本质是在三维空间中进行滑动窗口操作。其详细的数学表达可以展开为:
其中:
分别表示卷积核在三个维度上的大小
是输入体积数据
是三维卷积核
表示输出特征图中的位置
特征映射计算
对于具有多个输入通道的情况,完整的三维卷积计算可以表示为:
其中:
是输入通道数
表示输出特征图的通道索引
是偏置项
感受野分析
三维卷积的感受野是一个三维立方体区域:
其中是卷积核尺寸,
是膨胀率(dilation rate)。
有效感受野(ERF)
实际上,卷积层的有效感受野呈现高斯分布特性,中心区域的影响最大,向外逐渐减弱。
填充策略(Padding)
三维卷积中的填充可以在三个维度上独立设置:
- 零填充(Zero Padding): 输出尺寸计算:
,
其中
是输入尺寸,
是填充大小,
是核尺寸,
是步长。
反射填充(Reflection Padding): 适用于需要保持边界连续性的场景。
参数复杂度分析
参数量计算:
实例代码
实例的3维卷积函数
def conv3d(input_img, kernel):
"""
执行3D卷积运算
"""
channels, height, width = input_img.shape
k_depth, k_height, k_width = kernel.shape
# 计算输出尺寸
output_height = height - k_height + 1
output_width = width - k_width + 1
# 初始化输出
output = np.zeros((output_height, output_width))
# 执行卷积
for i in range(output_height):
for j in range(output_width):
# 对所有通道进行卷积并求和
sum = 0
for c in range(channels):
patch = input_img[c, i:i + k_height, j:j + k_width]
sum += np.sum(patch * kernel[c])
output[i, j] = sum
return output
计算每个卷积核的输出
# 计算卷积核的输出
output = conv3d(I, K) + b
需要详细代码,私信作者