3d卷积过程举例
输入:一个长度为7帧的RGB视频,单帧通道数为3,视频的宽高为60×40,1个视频故bs=1 -->> (1, 3, 7, 60, 40)
3d卷积:nn.Conv3d(3, 5, (4, 7, 7), stride=1, padding=0)
3代表输入特征图通道数,5代表输出特征图通道数,4和7分别代表3d卷积的通道数和宽高。(此外stride和padding也可以设定为 (a,b,b) 的形式,但为了简化说明仅设定空间维度的卷积步长为1,时间维度卷积步长默认为1)
输出:(1, 5, 4, 54, 34),帧数维度增加为4,通道数增加为5,宽高为54和34
3d卷积过程对应下图
3d卷积中参数量为:7×7×4×3×5 = 2940(下面2945为5个偏置)
3d卷积中原算量(乘法次数)为:7×7×4×3×34×54×4×5 = 21,591,360
卷积参数量计算:
import torch
import torch.nn as nn
from torch import autograd
from torchsummary import summary
class NET(nn.Module):
def __init__(self):
super(NET, self).__init__()
self.conv3d_1 = nn.Conv3d(3, 5, (4, 7, 7), stride=1, padding=0)
def forward(self, x):
out = self.conv3d_1(x)
return out
model = NET()
input = autograd.Variable(torch.randn(1, 3, 7, 60, 40))
output = model(input)
print(output.size())
summary(model, (3, 7, 60, 40), batch_size=1, device="cpu")
最终输出:
torch.Size([1, 5, 4, 54, 34])
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Conv3d-1 [1, 5, 4, 54, 34] 2,945
================================================================
Total params: 2,945
Trainable params: 2,945
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.19
Forward/backward pass size (MB): 0.28
Params size (MB): 0.01
Estimated Total Size (MB): 0.48
----------------------------------------------------------------
我的理解和我想说的:
conv2d对应的卷积核其实是三维的,因为卷积核自身尺寸的宽高即两个维度,待卷积特征图的深度方向也是一个维度,所以相当于有c_out个k×k×c_in的“三维”卷积在特征图输入特征图中滑动。但是滑动仅限于平面两个方向。
conv3d的卷积核按理来说应该是四维,但我理解不了那么高的维度空间,重点是卷积核可移动的维度多了一个时间维度。文章来源:https://www.toymoban.com/news/detail-503038.html
以上仅是个人理解可能和论坛中其他资料有出入,欢迎大家批评指正。文章来源地址https://www.toymoban.com/news/detail-503038.html
到了这里,关于【nn.Conv3d】三维卷积参数量与运算量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!