多通道和单通道3D卷积及其运算过程详解

多通道和单通道3D卷积过程详解

  • 前言
    • 3D卷积作用
    • Pytorch中对应函数参数详解
    • 单通道3D卷积详解
    • 多通道3D卷积

前言

大家对1D卷积的介绍以及2D卷积中单通道和多通道的介绍已经十分完备了,我在这就不对这两方面做过多的介绍了,不了解的可以自行查看以下文章:形象理解深度学习中八大类型卷积
本人直接对网上介绍资料较少的3D卷积特别是多通道的3D卷积进行较为详细的介绍。

3D卷积作用

对于2DCNN,我们知道可以很好的处理单张图片中的信息,但是其对于视频这种由多帧图像组成的图片流,以及CT等一些医学上的3维图像就会显得束手无策。因为2D卷积没有考虑到图像之间时间维度上的物体运动信息的变化(3维CT图像也可以近似看为是二维图像在时间上的变化)。因此,为了能够对视频(包括3维医学图像)信息进行特征提取,以便用来分类及分割任务,提出了3D卷积,在卷积核中加入时间维度。

Pytorch中对应函数参数详解

class torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
说明
bigotimes: 表示二维的相关系数计算 stride: 控制相关系数的计算步长
dilation: 用于控制内核点之间的距离,详细描述在这里
groups: 控制输入和输出之间的连接: group=1,输出是所有的输入的卷积;group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。
参数kernel_size,stride,padding,dilation可以是一个int的数据 - 卷积height和width值相同,也可以是一个有三个int数据的tuple数组,tuple的第一维度表示depth的数值,tuple的第二维度表示height的数值,tuple的第三维度表示width的数值
Parameters:
in_channels(int) – 输入信号的通道
out_channels(int) – 卷积产生的通道
kernel_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长
padding(int or tuple, optional) - 输入的每一条边补充0的层数
dilation(int or tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
Example:

>>> # With square kernels and equal stride
>>> m = nn.Conv3d(16, 33, 3, stride=2)
>>> # non-square kernels and unequal stride and with padding
>>> m = nn.Conv3d(16, 33, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0))
>>> input = autograd.Variable(torch.randn(20, 16, 10, 50, 100))
>>> output = m(input)

单通道3D卷积详解

针对单通道,与2D卷积不同之处在于,输入的图像多了一个 depth 维度,即输入为(1, depth, height, width),卷积核也多了一个k_d维度,因此卷积核在输入3D图像的空间维度(height和width维)和depth维度上均进行滑窗操作,每次滑窗与 (k_d, k_h, k_w) 窗口内的values进行相关操作,得到输出3D图像中的一个value。
针对多通道,输入大小为(3, depth, height, width),则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_d, k_h, k_w) 窗口内的所有values进行相关操作,得到输出3D图像中的一个value。

多通道和单通道3D卷积及其运算过程详解_第1张图片
这就是3D卷积的详细过程,从图中可以看出每次卷积需要考虑多个帧数的图片信息,最终卷积后的结果也是一个三维图像。其实单通道的3D卷积和多通道的2D卷积过程相差不多。下图详细表述两者的区别
多通道和单通道3D卷积及其运算过程详解_第2张图片
这是多通道的2D卷积过程,可以看出特征图具有多个通道,将多通道的2维特征图放到一起和单通道的3维特征图一样。卷积核的大小中通道数与特征图的通道数必须保持一致,如上图所示进行一次卷积操作时得到一个值,当卷积核在长和宽方向上移动完毕时就得到了一个2维特征图。由于卷积核和输入特征图在通道方向上大小一致因此在通道方向上卷积核无法移动,这就是为何一个卷积核产生的结果是2维的。
多通道和单通道3D卷积及其运算过程详解_第3张图片
以上是单通道的3D卷积过程,由图可见,其与多通道2D卷积的区别在于在第三个维度(可以是时间维度)卷积核的维度大小不是必须和输入图像的维度相等。因此在这个方向上卷积核也是可以移动的,最终一个3D卷积核卷积操作之后的特征图也是3维的。这就是多通道2D卷积与单通道3D卷积的区别与联系。

多通道3D卷积

对于单通道卷积的介绍网上资料很多,借助常见的多通道2D卷积也是很好理解的。但是在实际使用中在模型的中间层部分,就不再是单通道的3D卷积了,3维特征图将变成多通道的特征图。如何进行多通道的3D卷积网上资料所谈甚少,最终通过查看相关资料以及自己理解发现下图可以很形象的表述多通道3D卷积的过程。
多通道和单通道3D卷积及其运算过程详解_第4张图片
借用多通道2D卷积过程可知,3D卷积核的通道数和特征图的通道数是一致的,则在单个3维特征图上的卷积过程可参见单通道3D卷积的过程,多通道3D卷积的每一次卷积操作将多个通道卷积核的结果相加作为卷积结果的一个值。则最终多通道3D卷积过程既可以考虑到多通道信息的融合问题,1个卷积核卷积后的结果也是3维特征图。如果输出需要是多通道的,则需要多个多通道3D卷积核。

你可能感兴趣的:(卷积操作,多通道3D卷积,pytorch,神经网络)