【可视化3D卷积计算过程】

目录

  • 1. 可视化过程
  • 2. 代码验证

前言:开始处理视频数据,遇到了陌生又熟悉的3D卷积,但对其计算过程有点疑惑,网上也没找到什么可视化动画,所以研究明白并做个记录,方便日后复习。有点简化,但认真琢磨一下图片和代码肯定能看明白:)

1. 可视化过程

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_channelframeHW
3744

kernel shape为:[5, 3, 2, 2, 2]

output_channelinput_channelkernel_Dkernel_Hkernel_W
53222

在这里插入图片描述

计算过程可视化如下:

在这里插入图片描述
在这里插入图片描述
output shape为:[5, 6, 3, 3],其中:

output_channeloutput_Doutput_Houtput_W
5633

2. 代码验证

import torch
import torch.nn as nnN, 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) * 3output = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于FCN网络实现的多类别图像分割任务

1、前言 FCN 作为图像分割的开山之作&#xff0c;将分割任务作为逐个像素点的分类任务 之前完成了基于unet、resnetunet、deeplab等等网络的分割任务&#xff0c;具体的可以参考本专栏&#xff1a; 图像分割_听风吹等浪起的博客-CSDN博客 因为FCN网络的实现较为复杂&#xf…

杰发科技AC7840——CAN通信简介(7)_波形分析

参考&#xff1a; CAN总线协议_stm32_mustfeng-GitCode 开源社区 0. 简介 隐形和显性波形 整帧数据表示 1. 字节描述 CAN数据帧标准格式域段域段名位宽&#xff1a;bit描述帧起始SOF(Start Of Frame)1数据帧起始标志&#xff0c;固定为1bit显性(b0)仲裁段dentify(ID)11本数…

网安行业拐点!网络安全6大企业2023年报盘点

回顾2023&#xff1a;寒冬中的市场概览 2023年&#xff0c;网络安全行业经历了前所未有的挑战。全球经济波动与行业竞争加剧&#xff0c;加之下游客户预算收紧&#xff0c;招投标流程延长&#xff0c;使得整个行业感受到了冬日的严寒。裁员和不发年终奖金的决定在行业中成为普…

记录些RAG-Fusion、Agent、NL2SQL的问题

RAG-Fusion RAG-Fusion 的实现原理 Query Duplication with a Twist&#xff1a;用 LLM 根据用户的 Query 生成几个相关的但不同的 Queries。Vector Search Unleashed&#xff1a;对原 Query 和生成的 Queries 都进行向量&#xff08;或者其他方式的&#xff09;搜索。Intell…

DiffusionGAN ——最快的小波扩散模型应用研究

介绍 扩散模型最近出现并迅速发展&#xff0c;吸引了许多研究人员的兴趣。这些模型能从随机的噪声输入生成高质量的图像。在图像生成任务中&#xff0c;它们的表现尤其优于最先进的生成模型&#xff08;GANs&#xff09;。扩散模型可以灵活地处理各种条件输入&#xff0c;从而…

meterpreter运行run getgui -e报错

meterpreter运行run getgui -e报错 meterpreter > run getgui -e [!] Meterpreter scripts are deprecated. Try post/windows/manage/enable_rdp. [!] Example: run post/windows/manage/enable_rdp OPTIONvalue [...] [-] The specified meterpreter session script cou…

【C++第三阶段】list容器排序

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 构造函数赋值和交换大小操作插入和删除数据存取反转和排序排序案例 list容器在STL中是双向循环链表。 如图所示&#xff0c;每一个节点三个域&#xff0c;前向指针域&#xff0c;后…

用户中心(上)

文章目录 企业做项目流程需求分析技术选型计划初始化项目数据库设计登录/注册⽤户管理&#xff08;仅管理员可⻅&#xff09; 初始化项目⼀、前端初始化1.下载nodejs2.Ant Design Pro相关问题1.前端项目启动时报错、无法启动&#xff1f;2.如何初始化前端项目&#xff1f;为什么…

vue 模板字符串

1.模板字符串换行问题 white-space: pre-wrap; 2. 鼠标移入 显示提示框 点击手动隐藏 myChart.on("mouseover", function (params) {myChart.dispatchAction({type: "downplay",}); }); tooltip: {show: true, //是否显示提示框组件&#xff0c;包括…

机器人实验室CNRS-AIST JRL, IRL介绍

一、背景 作为搞机器人方向的学生&#xff0c;必须时常关注国际上顶尖实验室的研究成果&#xff0c;以免自己做的方向out&#xff0c;除了大家耳熟能详的Boston Dynamics&#xff0c;还有许多非常厉害的机器人实验室值得我们关注&#xff0c;如日本的CNRS-AIST JRL, IRL实验室…

spring cache(一)介绍

一、介绍 1、背景 项目中使用最多的缓存技术就是Redis,用Redis就可以实现了&#xff0c;为什么需要使用spring cache&#xff1f; 先看下我们使用缓存步骤: &#xff08;1&#xff09;查寻缓存中是否存在数据&#xff0c;如果存在则直接返回结果 &#xff08;2&#xff09…

虚函数表与虚函数表指针

虚函数表与虚函数表是用来实现多态的&#xff0c;每一个类只有一个虚函数表 静态多态&#xff1a;函数重载&#xff08;编译期确定&#xff09; 动态多态&#xff1a;虚函数&#xff08;运行期确定&#xff09; 虚函数表的创建时机&#xff1a; 生成时间&#xff1a; 编译期…

生活服务推出品牌实惠团购,覆盖五一假期“吃喝玩乐”多场景

4月26日&#xff0c;抖音生活服务平台上线“跟着大牌过五一”活动会场&#xff0c;携手22家连锁品牌商家&#xff0c;于“五一”前推出优价团购和时令新品&#xff0c;覆盖“吃喝玩乐”多重购物需求&#xff0c;助力假期消费。同时&#xff0c;伴随各地涌现的文旅热潮&#xff…

SAP-ABAP-创建数据元素-02

事物码&#xff1a;SE11 三种数据对象&#xff0c;此处选择‘数据元素’ 基本类型&#xff1a;可以使用预定义或者域&#xff0c;下面一预定义为例&#xff0c;维护数据类型CHAR和长度10 点击字段标签&#xff0c;维护长度和描述&#xff0c; 激活&#xff0c;那么这个数据元素…

JavaSE-14笔记【反射机制(+2024新)】

文章目录 1.反射机制概述2.获取Class的四种方式3.通过反射机制实例化对象*4.反射机制结合配置文件灵活实例化对象*5.java.lang.reflect.Field5.1反编译类中的所有字段/属性5.2 通过反射机制给属性赋值* 6.java.lang.reflect.Method6.1反编译类中的所有方法6.2 通过反射机制调用…

变革 Perplexica:AI驱动的问答搜索引擎

Perplexica是一个开源的人工智能搜索工具&#xff0c;也可以说是一款人工智能搜索引擎&#xff0c;它深入互联网以找到答案。受Perplexity AI启发&#xff0c;它是一个开源选择&#xff0c;不仅可以搜索网络&#xff0c;还能理解您的问题。它使用先进的机器学习算法&#xff0c…

什么是环比折年率

环比折年率是月度&#xff08;或季度&#xff09;统计中一个十分重要的统计指标&#xff0c;由环比增速推算得到&#xff0c;用于反映经济的发展速度与趋势变化。环比折年率与同比增速相比具有对趋势变化灵敏度高的优点&#xff0c;在统计分析、趋势预测等领域有着广泛应用。 …

Docker-容器的前世今生

文章目录 Docker为什么产生&#xff1f;硬件虚拟化硬件虚拟化解决的问题硬件虚拟化定义硬件虚拟化技术虚拟机的优点虚拟机的缺点 操作系统虚拟化即容器容器化解决的问题容器化定义容器化技术历史 容器和虚拟机对比 Docker的发展历史Docker架构客户端服务端仓库Registry Docker重…

Linux工具篇 之 vim概念 操作 及基础指令讲解

学校不大 创造神话 讲桌两旁 陨落的王 临时抱佛脚 佛踹我一脚 书山有路勤为径 游戏玩的很起劲 想要计算机学的好&#xff0c;我的博客列表是个宝 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀…

这份详细的智慧校园建设方案,赶紧收藏

高等教育信息化是促进高等教育改革创新和提高质量的有效途径&#xff0c;是教育信息化发展的创新前沿。进一步加强基础设施和信息资源建设&#xff0c;重点推进信息技术与高等教育的深度融合&#xff0c;能促进教育内容、教学手段和方法现代化&#xff0c;创新人才培养、科研组…