←上一篇 ↓↑ 下一篇→
1.5 卷积步长 回到目录 1.7 单层卷积网络

三维卷积 (Convolutions Over Volumes)

你已经知道如何对二维图像做卷积了,现在看看如何执行卷积不仅仅在二维图像上,而是三维立体上。

我们从一个例子开始,假如说你不仅想检测灰度图像的特征,也想检测RGB彩色图像的特征。彩色图像如果是6×6×3,这里的3指的是三个颜色通道,你可以把它想象成三个6×6图像的堆叠。为了检测图像的边缘或者其他的特征,不是把它跟原来的3×3的过滤器做卷积,而是跟一个三维的过滤器,它的维度是3×3×3,这样这个过滤器也有三层,对应红绿、蓝三个通道。

给这些起个名字(原图像),这里的第一个6代表图像高度,第二个6代表宽度,这个3代表通道的数目。同样你的过滤器也有一个高,宽和通道数,并且图像的通道数必须和过滤器的通道数匹配,所以这两个数(紫色方框标记的两个数)必须相等。下个幻灯片里,我们就会知道这个卷积操作是如何进行的了,这个的输出会是一个4×4的图像,注意是4×4×1,最后一个数不是3了。


我们研究下这背后的细节,首先先换一张好看的图片。这个是6×6×3的图像,这个是3×3×3的过滤器,最后一个数字通道数必须和过滤器中的通道数相匹配。为了简化这个3×3×3过滤器的图像,我们不把它画成3个矩阵的堆叠,而画成这样,一个三维的立方体。


为了计算这个卷积操作的输出,你要做的就是把这个3×3×3的过滤器先放到最左上角的位置,这个3×3×3的过滤器有27个数,27个参数就是3的立方。依次取这27个数,然后乘以相应的红绿蓝通道中的数字。先取红色通道的前9个数字,然后是绿色通道,然后再是蓝色通道,乘以左边黄色立方体覆盖的对应的27个数,然后把这些数都加起来,就得到了输出的第一个数字。

如果要计算下一个输出,你把这个立方体滑动一个单位,再与这27个数相乘,把它们都加起来,就得到了下一个输出,以此类推。


那么,这个能干什么呢?举个例子,这个过滤器是3×3×3的,如果你想检测图像红色通道的边缘,那么你可以将第一个过滤器设为 [10−110−110−1]\left[\begin{matrix} 1&0&-1 \\ 1&0&-1 \\ 1&0&-1 \end{matrix}\right]⎣⎡​111​000​−1−1−1​⎦⎤​ ,和之前一样,而绿色通道全为0,[000000000]\left[\begin{matrix} 0&0&0 \\ 0&0&0 \\ 0&0&0 \end{matrix}\right]⎣⎡​000​000​000​⎦⎤​,蓝色也全为0。如果你把这三个堆叠在一起形成一个3×3×3的过滤器,那么这就是一个检测垂直边界的过滤器,但只对红色通道有用。


或者如果你不关心垂直边界在哪个颜色通道里,那么你可以用一个这样的过滤器, [10−110−110−1],[10−110−110−1],[10−110−110−1]\left[\begin{matrix} 1&0&-1 \\ 1&0&-1 \\ 1&0&-1 \end{matrix}\right],\left[\begin{matrix} 1&0&-1 \\ 1&0&-1 \\ 1&0&-1 \end{matrix}\right],\left[\begin{matrix} 1&0&-1 \\ 1&0&-1 \\ 1&0&-1 \end{matrix}\right]⎣⎡​111​000​−1−1−1​⎦⎤​,⎣⎡​111​000​−1−1−1​⎦⎤​,⎣⎡​111​000​−1−1−1​⎦⎤​ ,所有三个通道都是这样。所以通过设置第二个过滤器参数,你就有了一个边界检测器,3×3×3的边界检测器,用来检测任意颜色通道里的边界。参数的选择不同,你就可以得到不同的特征检测器,所有的都是3×3×3的过滤器。

按照计算机视觉的惯例,当你的输入有特定的高宽和通道数时,你的过滤器可以有不同的高,不同的宽,但是必须一样的通道数。理论上,我们的过滤器只关注红色通道,或者只关注绿色或者蓝色通道也是可行的。

再注意一下这个卷积立方体,一个6×6×6的输入图像卷积上一个3×3×3的过滤器,得到一个4×4的二维输出。

现在你已经了解了如何对立方体卷积,还有最后一个概念,对建立卷积神经网络至关重要。就是,如果我们不仅仅想要检测垂直边缘怎么办?如果我们同时检测垂直边缘和水平边缘,还有45°倾斜的边缘,还有70°倾斜的边缘怎么做?换句话说,如果你想同时用多个过滤器怎么办?

这是我们上一张幻灯片的图片,我们让这个6×6×3的图像和这个3×3×3的过滤器卷积,得到4×4的输出。(第一个)这可能是一个垂直边界检测器或者是学习检测其他的特征。第二个过滤器可以用橘色来表示,它可以是一个水平边缘检测器。


所以和第一个过滤器卷积,可以得到第一个4×4的输出,然后卷积第二个过滤器,得到一个不同的4×4的输出。我们做完卷积,然后把这两个4×4的输出,取第一个把它放到前面,然后取第二个过滤器输出,我把它画在这,放到后面。所以把这两个输出堆叠在一起,这样你就都得到了一个4×4×2的输出立方体,你可以把这个立方体当成,重新画在这,就是一个这样的盒子,所以这就是一个4×4×2的输出立方体。它用6×6×3的图像,然后卷积上这两个不同的3×3的过滤器,得到两个4×4的输出,它们堆叠在一起,形成一个4×4×2的立方体,这里的2的来源于我们用了两个不同的过滤器。


我们总结一下维度,如果你有一个 n∗n∗ncn*n*n_cn∗n∗nc​ (通道数)的输入图像,在这个例子中就是6×6×3,这里的 ncn_cnc​ 就是通道数目,然后卷积上一个 f∗f∗ncf*f*n_cf∗f∗nc​ ,这个例子中是3×3×3,按照惯例,这个(前一个 ncn_cnc​ )和这个(后一个 ncn_cnc​ )必须数值相同。然后你就得到了( n−f+1n-f+1n−f+1 )∗*∗( n−f+1n-f+1n−f+1 )∗nc′* n_{c^{'}}∗nc′​ ,这里 nc′n_{c^{'}}nc′​ 其实就是下一层的通道数,它就是你用的过滤器的个数,在我们的例子中,那就是4×4×2。我写下这个假设时,用的步幅为1,并且没有padding。如果你用了不同的步幅或者padding,那么这个 n−f+1n-f+1n−f+1 数值会变化,正如前面的视频演示的那样。

这个对立方体卷积的概念真的很有用,你现在可以用它的一小部分直接在三个通道的RGB图像上进行操作。更重要的是,你可以检测两个特征,比如垂直和水平边缘或者10个或者128个或者几百个不同的特征,并且输出的通道数会等于你要检测的特征数。

对于这里的符号,我一直用通道数( ncn_cnc​ )来表示最后一个维度,在文献里大家也把它叫做3维立方体的深度。这两个术语,即通道或者深度,经常被用在文献中。但我觉得深度容易让人混淆,因为你通常也会说神经网络的深度。所以,在这些视频里我会用通道这个术语来表示过滤器的第三个维度的大小。

所以你已经知道怎么对立方体做卷积了,你已经准备好了实现卷积神经其中一层了,在下个视频里让我们看看是怎么做的。

课程板书





←上一篇 ↓↑ 下一篇→
1.5 卷积步长 回到目录 1.7 单层卷积网络

1.6 三维卷积-深度学习第四课《卷积神经网络》-Stanford吴恩达教授相关推荐

  1. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  2. 1.1 欢迎-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 无 回到目录 1.2 什么是神经网络 欢迎 第一个视频主要讲了什么是深度学习,深度学习能做些什么事情.以下是吴恩达老师的原话: 深度学习改变了传统互联网业务,例如如网络搜索和 ...

  3. 深度学习教程(6) | 神经网络优化算法(吴恩达·完整版)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/35 本文地址:https://www.showmeai.tech/article-d ...

  4. 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你

    机器学习和深度学习到底怎么学? 在外国版知乎上,有位网友问:新手如何学习机器学习?学习完MOOC的课程后有没有能力阅读研究论文或者真正的做出一点研究成果? 这个困惑很多人的问题吴恩达给出了详细的回答, ...

  5. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

  6. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...

  7. 4.11 一维到三维推广-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.10 风格代价函数 回到目录 4.12 总结 一维到三维推广 (1D and 3D Generalizations of Models) 你已经学习了许多关于卷积神经网络 ...

  8. 1.7 单层卷积网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.6 三维卷积 回到目录 1.8 简单卷积网络示例 单层卷积网络 (One Layer of a Convolutional Network) 今天我们要讲的是如何构建卷积 ...

  9. 0.0 目录-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

最新文章

  1. mysql事务的4大特性
  2. 逃亡的准备(大数据版)
  3. SVN中检出(check out) 和 导出(export) 的区别
  4. 学习笔记Hadoop(六)—— Hadoop集群的安装与部署(3)—— 配置ssh无密码登录
  5. Mysql 5.7 json
  6. matlab guide对话框+滑动条+弹出式菜单+列表框的使用
  7. Android Studio下载、安装、配置及连接真机开发第一个App ——入门选手快进
  8. iPhone 12 mini大幅砍单 苹果可能又要因为屏幕而向三星支付违约金
  9. impala操作hive数据实例
  10. 如何解决chm类型的文件在Windows操作系统中无法打开
  11. 获得学士学位的机器学习工程工作
  12. windows 编写的硬件驱动_黑科技or大势所趋?谈谈手机GPU驱动升级那点事
  13. 通用商品后端管理系统
  14. kmeans算法python实现(iris数据集)
  15. httpUtils 工具类
  16. GHOST XP SP3快速装机版
  17. python与医学统计_python简单数据分析——医药数据分析
  18. [Nginx] 配置Nginx绑定域名、代理端口
  19. 使用Stratasys创建3D打印医学模型的工作流程
  20. 蓝桥杯青少年组C++编程题

热门文章

  1. nginx负载均衡的策略
  2. Mac安装python3的opencv包
  3. gnuradio 使用eclipse 编辑器记录
  4. 如何使用matlab中的胞元数组
  5. 汇编语言-求毕达哥拉斯三角形的边
  6. HDOJ 3709 Balanced Number
  7. [003]Reference in C++---C++引用基础知识篇
  8. 修改.fig文件中图的x轴或y轴的标题及数据图
  9. javascript入门 - 1
  10. 图解Linux命令实例