多通道和单通道3D卷积过程详解

  • 前言
    • 3D卷积作用
    • Pytorch中对应函数参数详解
    • 单通道3D卷积详解
    • 多通道3D卷积

前言

大家对1D卷积的介绍以及2D卷积中单通道和多通道的介绍已经十分完备了,我在这就不对这两方面做过多的介绍了,不了解的可以自行查看以下文章:形象理解深度学习中八大类型卷积
本人直接对网上介绍资料较少的3D卷积特别是多通道的3D卷积进行较为详细的介绍。

3D卷积作用

对于2DCNN,我们知道可以很好的处理单张图片中的信息,但是其对于视频这种由多帧图像组成的图片流,以及CT等一些医学上的3维图像就会显得束手无策。因为2D卷积没有考虑到图像之间时间维度上的物体运动信息的变化(3维CT图像也可以近似看为是二维图像在时间上的变化)。因此,为了能够对视频(包括3维医学图像)信息进行特征提取,以便用来分类及分割任务,提出了3D卷积,在卷积核中加入时间维度。

Pytorch中对应函数参数详解

class torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
说明
bigotimes: 表示二维的相关系数计算 stride: 控制相关系数的计算步长
dilation: 用于控制内核点之间的距离,详细描述在这里
groups: 控制输入和输出之间的连接: group=1,输出是所有的输入的卷积;group=2,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。
参数kernel_size,stride,padding,dilation可以是一个int的数据 - 卷积height和width值相同,也可以是一个有三个int数据的tuple数组,tuple的第一维度表示depth的数值,tuple的第二维度表示height的数值,tuple的第三维度表示width的数值
Parameters:
in_channels(int) – 输入信号的通道
out_channels(int) – 卷积产生的通道
kernel_size(int or tuple) - 卷积核的尺寸
stride(int or tuple, optional) - 卷积步长
padding(int or tuple, optional) - 输入的每一条边补充0的层数
dilation(int or tuple, optional) – 卷积核元素之间的间距
groups(int, optional) – 从输入通道到输出通道的阻塞连接数
bias(bool, optional) - 如果bias=True,添加偏置
Example:

>>> # With square kernels and equal stride
>>> m = nn.Conv3d(16, 33, 3, stride=2)
>>> # non-square kernels and unequal stride and with padding
>>> m = nn.Conv3d(16, 33, (3, 5, 2), stride=(2, 1, 1), padding=(4, 2, 0))
>>> input = autograd.Variable(torch.randn(20, 16, 10, 50, 100))
>>> output = m(input)

单通道3D卷积详解

针对单通道,与2D卷积不同之处在于,输入的图像多了一个 depth 维度,即输入为(1, depth, height, width),卷积核也多了一个k_d维度,因此卷积核在输入3D图像的空间维度(height和width维)和depth维度上均进行滑窗操作,每次滑窗与 (k_d, k_h, k_w) 窗口内的values进行相关操作,得到输出3D图像中的一个value。
针对多通道,输入大小为(3, depth, height, width),则与2D卷积的操作一样,每次滑窗与3个channels上的 (k_d, k_h, k_w) 窗口内的所有values进行相关操作,得到输出3D图像中的一个value。


这就是3D卷积的详细过程,从图中可以看出每次卷积需要考虑多个帧数的图片信息,最终卷积后的结果也是一个三维图像。其实单通道的3D卷积和多通道的2D卷积过程相差不多。下图详细表述两者的区别

这是多通道的2D卷积过程,可以看出特征图具有多个通道,将多通道的2维特征图放到一起和单通道的3维特征图一样。卷积核的大小中通道数与特征图的通道数必须保持一致,如上图所示进行一次卷积操作时得到一个值,当卷积核在长和宽方向上移动完毕时就得到了一个2维特征图。由于卷积核和输入特征图在通道方向上大小一致因此在通道方向上卷积核无法移动,这就是为何一个卷积核产生的结果是2维的。

以上是单通道的3D卷积过程,由图可见,其与多通道2D卷积的区别在于在第三个维度(可以是时间维度)卷积核的维度大小不是必须和输入图像的维度相等。因此在这个方向上卷积核也是可以移动的,最终一个3D卷积核卷积操作之后的特征图也是3维的。这就是多通道2D卷积与单通道3D卷积的区别与联系。

多通道3D卷积

对于单通道卷积的介绍网上资料很多,借助常见的多通道2D卷积也是很好理解的。但是在实际使用中在模型的中间层部分,就不再是单通道的3D卷积了,3维特征图将变成多通道的特征图。如何进行多通道的3D卷积网上资料所谈甚少,最终通过查看相关资料以及自己理解发现下图可以很形象的表述多通道3D卷积的过程。

借用多通道2D卷积过程可知,3D卷积核的通道数和特征图的通道数是一致的,则在单个3维特征图上的卷积过程可参见单通道3D卷积的过程,多通道3D卷积的每一次卷积操作将多个通道卷积核的结果相加作为卷积结果的一个值。则最终多通道3D卷积过程既可以考虑到多通道信息的融合问题,1个卷积核卷积后的结果也是3维特征图。如果输出需要是多通道的,则需要多个多通道3D卷积核。

多通道和单通道3D卷积及其运算过程详解相关推荐

  1. 浮点数的加减法运算过程详解(面向小白的)

    浮点数的加减法运算过程详解(面向小白的) 一. 浮点数在计算机内的表示 二. 浮点数的加减运算步骤 第一次写博客,难免有疏漏之处,如果有错误请批评指正,感谢! 对于浮点数的加减运算,书上写的名词太多, ...

  2. group convolution (分组卷积)的计算量详解、卷积计算量特征图大小,池化特征图大小、深度通道deep-wise 卷积

    group convolution (分组卷积)的计算量详解.卷积计算量特征图大小,池化特征图大小.深度通道deep-wise 卷积 提示:最近忙着各种提前批的笔试面试,所以没太多空刷题了都,先复盘一 ...

  3. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  4. 卷积神经网络CNN原理详解(一)——基本原理

    卷积神经网络CNN原理详解(一)--基本原理 转载过来为了自己以后学习方便,大家请看原文章 为什么要用神经网络? 特征提取的高效性. 大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做, ...

  5. 图像特征提取(VGG和Resnet特征提取卷积过程详解)

    图像特征提取(VGG和Resnet算法卷积过程详解) 第一章 图像特征提取认知 1.1常见算法原理和性能 众所周知,计算机不认识图像,只认识数字.为了使计算机能够"理解"图像,从而 ...

  6. python布尔类型运算_Python对象类型及其运算方法(详解)

    基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >> ...

  7. 运算符“||”与“|”,“”和“”的区别 (附带各类位运算符号详解(、|、^、~、<<、>>、>>>)

    区别一: 定义不同: || 和 | 都是表示"或",区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断. 区别二: 与操作和或操作的区别 (1)在Jav ...

  8. 原创:Spark中GraphX图运算pregel详解

    原创:Spark中GraphX图运算pregel详解 由于本人文字表达能力不足,还是多多以代码形式表述,首先展示测试代码,然后解释: package com.txq.spark.test import ...

  9. Hyperledger Fabric 通道配置文件和容器环境变量详解

    Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...

最新文章

  1. java十个整数相反顺序_编写程序,对输入的一个整数,按相反顺序输出该数。例如,输入为 3578, 输出为 8753。...
  2. CSS3中弹性盒布局的最新版
  3. 条形图坐标轴_解密咨询报告中常见的双层条形图的制作方法
  4. Android动态布局
  5. web开发方法_确保进入Web开发的最快方法
  6. 机器学习:神经网络的代价函数及反向传播算法
  7. 发布了!2020 年 AI 人才发展报告,最高补助 1000 万!
  8. 「快学springboot」SpringBoot整合freeMark模板引擎
  9. 设计思想之高内聚低耦合
  10. 【割点】【割边】tarjan
  11. 《鸟哥Linux私房菜》 全套视频和PDF资料—— 老段带你学鸟哥Linux视频课程
  12. 【前端知识梳理】HTML篇 笔记整理(一)
  13. n1进入recovery模式_N1盒子系列 篇一:N1简明降级刷机教程
  14. ISO 27001,能给企业带来哪些好处?
  15. 使用region注释,将代码块收(折叠)起来
  16. android 换肤(1)——插件式无缝换肤(解析鸿洋大神的换肤流程)
  17. strchr和strstr的用法
  18. AutoLeaders控制组—51单片机学习笔记
  19. 计算机三级网络技术第八章(第一轮)
  20. 数据结构 第2讲 算法复杂性

热门文章

  1. 【华为机试真题 Python实现】华为机试题整理(已更新211篇)
  2. Java毕设|课设项目-蛋糕店商城管理系统
  3. OPPO R11t_R11st_R11Plust_R11Pluskt_R11sPlust解移动锁
  4. 男士身高180厘米,体重多少合适
  5. Map、list 线程安全问题
  6. Android应用离线中文语音识别PocketSphinx (免费哦~)
  7. 54.查表法按日期生成流水号的案例
  8. GIS算法:3_拓扑空间关系计算模型DE-9IM
  9. 2022年江苏省职业院校技能大赛中职赛项规程
  10. 二叉树 php,PHP数据结构与算法:二叉树