【可视化3D卷积计算过程】
创作时间:
作者:
@小白创作中心
【可视化3D卷积计算过程】
引用
CSDN
1.
https://blog.csdn.net/qq_44166630/article/details/138320939
3D卷积可以用来处理视频输入,对于图片来讲,shape为:[C_in, H, W]。而视频多了时间这一维度,因此视频的shape为:[C_in, D, H, W],其中D为帧数(frame),比如一条视频有10帧,则D=10。(以上都忽略了batch size N)
假如我们现在的输入的视频shape为:[3, 7, 4, 4]。即:
input_channel frame H W
3 7 4 4
kernel shape为:[5, 3, 2, 2, 2]
output_channel input_channel kernel_D kernel_H kernel_W
5 3 2 2 2
计算过程可视化如下:
output shape为:[5, 6, 3, 3],其中:
output_channel output_D output_H output_W
5 6 3 3
代码验证
import torch
import torch.nn as nn
N, C_in, D, H, W = 1, 3, 7, 4, 4
C_out = 5
m = nn.Conv3d(in_channels=C_in, out_channels=C_out, kernel_size=2, stride=1, bias=False)
inputs = torch.zeros(N, C, D, H, W)
m.weight = nn.Parameter(torch.ones(C_out, C_in, 2, 2, 2))
inputs[:, 0, :, :, :] = torch.ones(D, H, W)
inputs[:, 1, :, :, :] = torch.ones(D, H, W) * 2
inputs[:, 2, :, :, :] = torch.ones(D, H, W) * 3
output = m(inputs)
print(inputs, inputs.shape)
"""
tensor([[[[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]],
[[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]],
[[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]]],
[[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]],
[[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.],
[3., 3., 3., 3.]]]]])
shape:
torch.Size([1, 3, 7, 4, 4])
"""
print(output, output.shape)
"""
tensor([[[[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]]],
[[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]]],
[[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]]],
[[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]]],
[[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]],
[[48., 48., 48.],
[48., 48., 48.],
[48., 48., 48.]]]]], grad_fn=<SlowConv3DBackward0>)
shape:
torch.Size([1, 5, 6, 3, 3])
"""
48怎么来的?
2x2x2x1 + 2x2x2x2 + 2x2x2x3 = 48
热门推荐
如何判断笔记本电脑的性能配置?(深入了解性能参数,为您选择最佳配置)
家庭共有财产怎么分?详解分割原则与纠纷处理步骤
肌酐怎么检测
国际投资者对中国科技资产信心增强 新增长动能实现“跨越式发展”
早睡早起:健康生活的黄金法则
银行理财产品的流动性风险管理措施分析
住房公积金制度详解:缴存范围、使用条件及注意事项
对乙酰氨基酚片和布洛芬的区别
生态板和颗粒板哪个更环保?听完这3点,选择不迷茫
一起学习,做掌管体重的神!
设计美学解码:揭秘7大视觉构图技巧,让产品瞬间吸睛!
广西这些地名“怪”可爱的!原来背后超有梗
揭秘洗碗机:节水节能的厨房魔法?
兔兔常见的八种疾病和预防小贴士
如何提取医保余额?提取医保余额的规定是什么?
成语典故丨不食周粟
除了JLPT,还有哪些日语考试能用来留学?
拘役与拘留的区别,拘役属于行政处罚吗?
把脉怎么看出身体状况的?
起诉公司的证据收集与处理指南
美发行业利润情况分析:从头发到财富的增长密码
铁满载身体?探讨体内铁过高那些事儿
崩坏3世界观背景 崩坏3背景故事介绍
无人机表演的六种类型,你能说出几个呢?
2025年英雄联盟LPL转会期最新阵容
机制影响:探究社会、政治和经济因素对个体行为和心理的影响
天才诗人王勃的巅峰之作《滕王阁序》和他的生平传说
脑血管瘤的评估标准是什么
脑血管瘤1厘米需要手术吗
财色无边:一部点击量破两千万的都市异能小说