torch.nn.Conv3D
3D卷积, 输入的shape是 ( N , C i n , D , H , W ) (N, C_{in},D,H,W) (N,Cin,D,H,W),输出shape ( N , C o u t , D o u t , H o u t , W o u t ) (N,C_{out},D_{out},H_{out},W_{out}) (N,Cout,Dout,Hout,Wout)
实际使用建议:
N
N
N 就是batch_size,无话可说;
C
i
n
C_{in}
Cin 则对应着输入图像的通道数,如RGB\BGR图像这一维度就是3;
D
D
D则是深度,如果是对于视频序列使用的3d conv,那么这个
D
D
D实际对应的就是要执行卷积的frame_size,
H
,
W
H,W
H,W对应的就是输入图像的高和宽
另外,使用的时候如果不指定具体size,如:padding=2
,则是每一维度都为size是2的padding,也就是padding=(2,2,2)
;如果指定每一维的padding的话则有就是指定的size,如:padding=(3,2,1)
,则是分别是在三个维度上有3,2,1三种不同的padding,另外kernel
和stride
也是如此
使用样例:
import torch
import torch.nn as nn
# Sample intput | 随机输入
net_input = torch.randn(32, 3, 10, 224, 224)
# With square kernels and equal stride | 所有维度同一个参数配置
conv = nn.Conv3d(3, 64, kernel_size=3, stride=2, padding=1)
net_output = conv(net_input)
print(net_output.shape) # shape=[32, 64, 5, 112, 112] | 相当于每一个维度上的卷积核大小都是3,步长都是2,pad都是1
# non-square kernels and unequal stride and with padding | 每一维度不同参数配置
conv = nn.Conv3d(3, 64, (2, 3, 3), stride=(1, 2, 2), padding=(0, 1, 1))
net_output = conv(net_input)
print(net_output.shape) # shape=[32, 64, 9, 112, 112]
pytorch中3D的卷积使用还可以参考这个C3D的model:
model传送门
pytorch官方文档:
官方文档传送门