【零基础深度学习教程第四课:卷积神经网络 (上)】

  • 一、边缘检测与卷积运算
    • 1.1 案例分析
    • 1.2 卷积运算
      • 1.2.1 概述
      • 1.2.2 具体说明
    • 1.3 原理解读
  • 二、卷积运算参数
    • 2.1 几个边缘检测的例子
      • 2.1.1 由暗到亮的卷积
      • 2.1.2 水平边缘检测过滤器
      • 2.1.3 更复杂的例子
    • 2.2 过滤器参数
    • 2.3 padding(填充)
      • 2.3.1 卷积计算的两个问题
      • 2.3.2 解决方法:padding
      • 2.3.3 填充方式:Valid和Same
    • 2.4 卷积步长
    • 2.5 输出矩阵维度计算
  • 小结

前言:卷积神经网络 (Convolutional Neural Network, CNN) 是一类包含 卷积运算的前馈式神经网络(Feed-forward Neural Networks),CNN一般由 卷积层、ReLu层、批归一化层、池层、全连接层和输出的Softmax层组成, 通过这些层可以让模型具有直接从复杂的结构图像中计算特征的能力。如今,大量著名的预训练CNN模型,例如 VGG、Alexnet、GoogleNet、ResNet、Inception等,都是开源的。CNN的三大优势分别为: 局部感受野,权值共享和降采样。CNN 通过局部感受野和权值共享的方式降低参数数目。一般认为,人对外界事物的认知是从局部到全局。图像的空间联系与局部像素的相关性较强,与距离较远的像素相关性相对较弱。因而,全局图像的感知只需要对局部神经元进行感知,在更高层将局部信息进行整合,即可得到全局信息。局部感受野是指卷积层的神经元只与上一层的部分神经元连接,感受局部的视觉特征,在更高层生成图像的特征描述。权值共享机制的原理是图像的部分统计特性与其他部分相似,此局部学习的特征适用于其他局部区域学习。通过这两种方式,减少了模型的训练参数,提高了模型的性能。降采样的作用是压缩数据和减少参数数量,尽量避免过拟合问题的出现。降采样即图像尺寸调整,保持特征不变性的同时降低特征维数。降采样可以减少特征的分辨率,实现对位移,缩放和其他形式扭曲的不变性。

一、边缘检测与卷积运算

在前言中,我们了解到神经网络的前几层是检测图像边缘的,后几层是检测到物体部分的,更靠后的一些层能检测到完整的物体,如下图所示:


本节将学习如何在一张图片中检测边缘,也就是上图中的第一个步骤。
注:所谓图像的边缘(垂直边缘、水平边缘、倾斜45°边缘…)就是图像特征,而边缘检测的过程其实就是图像特征提取。所以神经网络与传统机器学习的区别就在于特征提取步骤是发生在模型内部的!

1.1 案例分析


目标:识别上图中的物体。
第一步:检测图片中的垂直边缘(例如图片中的栏杆、行人的轮廓线),由垂直边缘检测器输出,由下图所示。

第二步:检测图片中的水平边缘,如下图。

注:一张图像不一定只包含水平和垂直边缘,所有角度的边缘都可以有(例如40°边缘、60°边缘),计算机可以通过计算检测这些所有边缘情况。问题是如何在图像中检测出这些边缘呢?——卷积计算!

1.2 卷积运算

1.2.1 概述

上图是一个 6×6 的灰度图像,因为它是灰度图像,所以维度为 6×6×1(因为只有一个颜色通道)。为了检测图像中的垂直边缘,需要构造一个 3×3 的矩阵(这个矩阵在卷积神经网络中一般被称为过滤器),这个 3×3 矩阵的第一列元素为 1、第二列元素为 0、第三列元素为 -1,如下图所示:


上图中的 * 符号指的是通过过滤器(或滤波器)对这个 6×6 的图像进行卷积运算,这个间距运算的输出将会是一个 4×4 的矩阵(其实是一张 4×4 的图片),如下图:

1.2.2 具体说明

下面将详细阐述 1.2.1 小节中的卷积过程

  • 第一步:计算这个4×4矩阵中的第一个元素。为了计算4×4矩阵中的第一个元素,需要用3×3矩阵覆盖到输入图像之上,然后进行元素乘法运算,如下图所示:


元素乘法:3×1 + 0×0 + 1×(-1) + 1×1 + 5×0 + 8×(-1) + 2×1 + 7×0 + 2×(-1) = -5。现将 -5 填在这个 4×4矩阵中的第一个元素,如下图所示:

  • 第二步:计算这个4×4矩阵中的第二个元素。此时只需要将过滤器矩阵向右平移一个像素单位,如下图所示:

    按照第一步中的方法进行元素乘法:0×1+1×0+2×(-1)+5×1+8×0+9×(-1)+7×1+2×0+5×(-1) = -4。所以4×4矩阵的第二个元素为-4:
  • 以此类推,直到将这个4×4矩阵中的每一个元素计算出来:


以上就是一个 6×6 的矩阵通过过滤器的卷积计算得到 4×4 矩阵的过程,需要注意的是 6×6 矩阵与 4×4 矩阵都是图片,而中间的 3×3 矩阵不是图片。
注:如果通过过滤器卷积后得到的灰度值超出了 0-255,那么大于 255 的灰度值统一当作 255,小于 0 的灰度值统一当作 0。

1.3 原理解读

为什么通过上述的步骤可以达到垂直边缘检测的目的呢?现通过下列的例子说明。下图为一个 6×6 的二值图像矩阵(因为只有两个灰度值)。如果将其进行可视化,那么图片的左侧是亮色区域(因为像素10是亮的像素值),右边则比较暗(假设用灰色来表示0),如下图所示:


在这张图片里面有一条很明显的垂直边缘——区分两块区域的分割线。现用一个 3×3 过滤器对上图进行卷积运算,这个过滤器同样可以可视化为一张图片,如下图所示:


通过卷积计算后得到如下的这个 4×4 的矩阵,将这个矩阵可视化的效果如下所示:


可以发现这张 4×4 的图片将原本 6×6 图片中的垂直边缘转化成了一段亮的区域(这里转换后的垂直边缘太粗的原因是,这个例子中的图片太小了)。以上就是卷积计算对图片的处理过程和原理解读!

二、卷积运算参数

2.1 几个边缘检测的例子

以下的三个例子中过滤器所使用的参数全是:-1、0、1

2.1.1 由暗到亮的卷积

2.1.2 水平边缘检测过滤器

2.1.3 更复杂的例子

2.2 过滤器参数

通过使用不同的过滤器,可以找出垂直的或是水平的边缘。但事实上,对于这个 3×3 的过滤器来说,目前我们只使用了其中的一种数字组合,也就是(-1、0、1):


但在过去大多数的计算机视觉文献中,曾争论过怎样的数字组合才是最好的,所以还可以有以下几种:

随着深度学习的发展,当你想去检测出复杂图像的边缘时,不一定要去使用上述研究者们所选择的这九个数字,可以把这矩阵中的9个数字当成9个参数,并且在使用反向传播算法时,其目标就是去理解这9个参数。


将过滤器矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们。

2.3 padding(填充)

2.3.1 卷积计算的两个问题

用一个 3×3 的过滤器对一个 6×6 的图片进行卷积,会得到一个 4×4 的图片(因为使用3*3的过滤器对 6×6 的图片进行卷积只有 4×4 种可能的位置),其实推广来说:对于一个 n×n 的图片,如果使用 f×f 的过滤器对其进行卷积,会得到一个 (n-f+1) × (n-f+1) 的图片

用这种方式对图片进行卷积会有两个缺点:

  • 每一次卷积操作会使图片变小从而造成最终的 “输出缩小” 问题(例如 6×6 变成 4×4),假如有一个深层神经网络,那么在多次卷积之后,图片最终可能变成 1×1。
  • 对于这个 6×6 的图片在进行卷积操作时,图片角落边的像素(例如四个顶角格)只会被过滤器触碰一次,而与此同时图片中心的某些像素会被过滤器多次触碰。所以这些角落或边缘区域的像素点在输出中采用较少,会造成图片边缘位置信息丢失

2.3.2 解决方法:padding

所谓padding,指的是在对图片进行卷积操作之前对图片进行边缘填像素充,如下图所示(一般用像素0进行填充):

注:填充的层数由超参数p手动设置,这里的p=1,即填充一层。
此时6*6的图片被填充为 8×8 的图片,此时如果使用3×3的过滤器对这个 8×8 的图片进行卷积操作的话,那么得到的输出图片由公式 “(n + 2p - f + 1)” 计算,将得到 6×6 的图片。
这样一来即避免了角落或图像边缘信息发挥作用较小这一缺点,又避免了卷积造成的输出图片缩小的缺点。

2.3.3 填充方式:Valid和Same

以上是填充一层的情况,其实 p 可以设为不同的值使得图片填充更多的层数,常见的填充方法有两种:Valid 和 Same

  • Valid:这种方式为不填充(p=0),该情况下 n×n 的图片,用 f×f 的过滤器进行卷积,会得到一个 (n-f+1)×(n-f+1)的图片。
  • Same:顾名思义,该填充方式的目的是使输出图片的大小等于输入图片大小。即:
    n + 2p - f + 1 = n,由此推得:p=(f - 1) / 2 。所以p遵循此公式进行设置就能保证输出图片的大小等于输入图片大小,这也就是之前使用3*3的过滤器对图片进行卷积时,将 p 设置为 1 的原因。
    注:由公式p=(f - 1) / 2可知,过滤器的维度 f 一般为奇数

2.4 卷积步长

在进行卷积计算时,另一个可以设置的超参数为卷积步长。通过一个例子来引入卷积步长的概念:现用 3×3 的过滤器对一个 7×7 的图像进行卷积计算,而结果却得到的是 3×3 的图像,这是怎么做到的呢?


可以通过设置卷积步长达到上述效果!现将卷积步长设置为2,那么:

  • 第一步:依然是从图片的左上角开始进行卷积计算

  • 第二步:之前的例子中没有设置卷积步长,系统默认步长为1(过滤器每次只移动一个像素距离)),现将卷积步长设置为2之后,过滤器每次移动两个像素距离:

  • 第三步:以此类推

  • 第四步:注意第四步向下移动时是跳两格

  • 剩下的过程以此类推,直到卷积成3×3的图像

2.5 输出矩阵维度计算

在上面的这个例子中,7×7 的图像通过 3×3 过滤器的卷积得到了 3×3 的输出图像。推广来说,假设用一个 f×f 的过滤器对 n×n 的图像进行卷积,padding为p,卷积步长为s。那么得到的输出图像的维度将会是:


注:包裹在公式外面的一层符号为“向下取整”,目的是为了避免结果为小数。

小结

本课介绍了卷积神经网络涉及到的一些基本概念与参数选择,下一节将继续介绍几种特殊的卷积运算,以及帮助大家构建完整的卷积神经网络。

【零基础深度学习教程第四课:卷积神经网络 (上)】相关推荐

  1. 【零基础深度学习教程第五课:卷积神经网络 (下)】

    零基础深度学习教程第五课:卷积神经网络(下) 一.三维卷积 1.1 三维卷积案例 1.1.1 卷积过程概述 1.1.2 卷积计算描述 1.2 三维卷积检测边缘 1.2.1 情况一 1.2.2 情况二 ...

  2. 花书+吴恩达深度学习(十四)卷积神经网络 CNN 之经典案例(LetNet-5, AlexNet, VGG-16, ResNet, Inception Network)

    目录 0. 前言 1. LeNet-5 2. AlexNet 3. VGG-16 4. ResNet 残差网络 5. Inception Network 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  3. 吴恩达deeplearning.ai系列课程笔记+编程作业(11)第四课 卷积神经网络-第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)

    第四门课 卷积神经网络(Convolutional Neural Networks) 第二周 深度卷积网络:实例探究(Deep convolutional models: case studies) ...

  4. 深度学习笔记 第四门课 卷积神经网络 第四周 特殊应用:人脸识别和神经风格转换...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  5. ​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  6. 【零基础深度学习教程第一课:深度学习基础】

    深度学习基础 目录 *深度学习基础* <第一节 深度学习简介> 一.深度学习与机器学习区别 二.神经网络简介 2.1 单神经元网络 2.2 多神经元网络 <第二节 神经网络基础> ...

  7. 深度学习第四课——卷积神经网络(week 1)

    目录 一.前言 1.1 卷积 1.2 其他滤波器 1.3 Padding 1.3.1 解释 1.3.2 填充多少像素的选择 1.4 卷积步长 1.5 三维卷积 1.6 单层卷积网络 1.7 深度卷积神 ...

  8. 深度学习笔记 第四门课 卷积神经网络 第二周 深度卷积网络:实例探究

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  9. 深度学习笔记 第四门课 卷积神经网络 第三周 目标检测

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

最新文章

  1. 亿级PV,常见性能优化策略总结与真实案例
  2. 美国雷神公司对第六代战斗机的任务系统提出六点预测
  3. ossec 学习二 (ossec -analogi安装)
  4. 微信小程序 提示Toast
  5. case when嵌套子查询_Oracle基础连接查询!!!
  6. ApplicationContextAware
  7. 修改Windows远程登录端口号
  8. php流导出excel内存溢出,phpExcel导出大量数据出现内存溢出错误的解决方法
  9. Oracle存在gap,发现gap及解决
  10. 华为交换机配置链路聚合实验——Eth Trunk
  11. [ZJOI2008]树的统计
  12. 百度网盘解析工具 利用IDM等工具提速下载
  13. 入侵sf服务器技术_入侵服务器、疯狂攻击各种网站, 这个黑客团伙终被“团灭”!...
  14. 移动磁盘数据错误循环冗余检查的文件找回方法
  15. gazebo可以另存为world
  16. 阿里云安全组开放端口,mysql也设置了登录权限,还是不能远程连接
  17. import cv2 失败“找不到指定模块”解决办法
  18. html5开发wp8,WP7几则消息(HTML5,Sliverlight,WP8)
  19. (Adventure项目)自行车业务数据分析报告(五)
  20. daimayuan每日一题#814 排队

热门文章

  1. PTA 6 后缀表达式计算 (100 分)
  2. c语言以正确定义字符变量ch1,【课外习题】二、 C语言程序设计的初步知识
  3. python 期中考试题目
  4. 对于ALU(算数逻辑运算单元)算数和逻辑的一点理解
  5. vb_一个简单的小程序·1
  6. 部署Squid代理服务器 —— 反向代理(acl 访问控制 、sarg 日志分析、 Squid反向代理) —— 再续前缘..
  7. Ant Design Pro V5开发系列:(一)vscode常用技巧整理
  8. memcache工作原理介绍
  9. return false不起作用
  10. hive案例——微博