20210609
例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7。
https://blog.csdn.net/gaoxiaoxue_/article/details/107978094
https://blog.csdn.net/weixin_42769131/article/details/104826953
https://www.jianshu.com/p/6e1ef63615f8
问题1:关于pytorch 3D 卷积函数:Conv3d
torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
3D卷积神经网络多用于高维度图像数据,例如N帧的视频,由于看参数比较抽象,一般人难以理解具体含义,因此,我以一段100帧视频为例,每帧视频为100010003的彩色图像,1000*1000为图像大小,3为图像的RGB 3个通道。
参数说明:
in_channels(int) – 输入信号的通道(解释:每帧图像的通道数,本例为3)
out_channels(int) – 卷积产生的通道(解释:对应于用了多少个卷积核,如果1个卷积核,就是1,如果输出20,那就是20个卷积核)
kernel_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长(每次核移动的步长)stride=1 表示stride=(1,1,1),在三维方向上步长是1,在宽和高上步长也是1。
padding(int or tuple, optional) - 输入的每一条边补充0的层数(主要是对图像周围的数据如何处理)padding=0 表示padding=(0,0,0)表示在三维方向上不padding,在宽和高上也不padding。
dilation(int or tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7
注意:3D卷积的输入是5维的tensor
三维卷积层, 输入数据的尺度是(N, C_in,D,H,W)
举例:(1,3,100,1000,1000)表示输入1个视频,每个视频中图像的通道数是3,每个视频中包含的图像数是100,图像的大小是1000 x 1000。
输出尺度(N,C_out,D_out,H_out,W_out)
1,10,100,1000,1000)表示输出1个视频,每个视频中图像的通道数是10,每个视频中包含的图像数是100,图像的大小是1000 x 1000。
(参考文献:Pytorch学习笔记15----nn.Conv2d与Conv3d参数理解、单通道与多通道卷积理解 - 雨后观山色 - 博客园)
问题2:3D 卷积核大小说明
3D卷积操作如图2所示,同样分为单通道和多通道,且只使用一个filter,输出一个channel。
其中,针对单通道,与2D卷积不同之处在于,输入图像多了一个 depth 维度,故输入大小为(1, depth, height, width),卷积核也多了一个k_d维度,因此卷积核在输入3D图像的空间维度(height和width维)和depth维度上均进行滑窗操作,每次滑窗与 (k_d, k_h, k_w) 窗口内的values进行相关操作,得到输出3D图像中的一个value。
针对多通道,输入大小为(多通道数, depth, height, width),则与2D卷积的操作一样,每次滑窗与多个channels上的 (k_d, k_h, k_w) 窗口内的所有values进行相关操作,得到输出3D图像中的一个value。
https://blog.csdn.net/g11d111/article/details/82665265
PyTorch学习笔记(9)——nn.Conv2d和其中的padding策略
通俗理解tf.nn.conv2d()参数的含义
首先以tensorflow中最常用的卷积神经网络为案例进行说明:
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None)
首先input必须是一个四维的tensor,以28✖️28✖️1的图像为案例进行说明,首先需要转换为4维,需要加入图像样本的个数,假设为100张,变为[100,28,28,1],直观理解为100张 2828的只有一个通道的图片。
我们再来看filter,即卷积神经网络的滤波器,必须与input维度相同,[3,3,1,2],通俗理解为33的卷积核2个,只作用于1个通道,即input的最后一个参数和filter的倒数第二个参数是相同的。
第三个参数是stride,控制卷积核的移动步数,与上述两个参数相同,也是四维的,[1,1,1,1],其中第一个1和最后一个1是固定值,需要改变的是中间的两个数,即在x轴和y轴的移动步长。
第四个参数是padding,只有两个取值,'SAME'和'VALID',第一个是填充边界,第二个是当不足以移动时直接舍弃。
其他参数选择默认即可。