【可视化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
热门推荐
中国朝鲜族所使用的朝鲜语更像朝鲜的朝鲜语还是韩国的韩语?
春秋与战国:东周时期两大转折点,一文读懂!
岳飞的事迹对现代社会有何启示?
聚焦2024年气候变化绿皮书:应对气候变化形势分析与展望
谷维素片抗焦虑有用吗
【创伤骨科】股骨颈骨折闭合/切开复位内固定术
Excel表后面00怎么处理
膝盖疼痛解决方法大揭秘!医生建议锻炼还是静养?
Scratch入门指南:从基础到创意项目实战
第一批用AI做旅行攻略的人,已经出发了
【产业教授】高性能有机硅弹性体开发——江西师范大学产业教授廖洪流案例推介
氮气的化学性质是什么 氮气的用途
Ubuntu虚拟机如何开启ssh
“黄色水果伤肾”?杨桃、香蕉到底能不能吃?
缓和医疗等于放弃治疗?目的是缓解患者和家人的痛苦!
冬天买鱼,这5种鱼全是野生海鱼,不能人工养殖,刺少肉嫩营养高
宇宙中的孤独流浪者
冠脉造影是确诊冠心病金标准,为什么不能轻易做?有哪些危害?
想要宝宝头发长得好必须剃胎毛?
经典导读|波德莱尔《现代生活的画家》
回南天来了,这样防潮防霉你准备好了吗?
桥本甲状腺炎发病率解析:性别、年龄、地域与遗传因素的影响
美食类短视频拍摄完全指南:从入门到精通
拥抱的力量:如何改善家庭关系
从宜昌新春灯会看中华优秀传统文化在新时代的青春绽放
流行天王迈克尔·杰克逊的音乐影响力有多大?
网站建设中的响应式设计与移动端优化(掌握网站建设中的响应式设计与移动端优化技巧)
电感线圈的原理作用及磁芯的磁化与磁导率深度解析
冰雪奇缘配音姐妹:从歌声中传递的情感与魔力
户口非转农有好消息!4类人可以将户口重新迁移回农村,你了解吗