AI智能
改变未来

卷积神经网络-CNN


一. 概述

  1. CNN网络
  • CNN网络通常用于图像的特征提取
  1. 组成部分
  • 通常包含卷积层、池化层等

二. 边缘检测示例

  1. 什么是边缘检测?
  • 即对图像的边缘信息进行提取
  • 如下图,是对图片的垂直边缘检测水平边缘检测
  1. 如何实现边缘检测?
  • 就是利用CNN网络中的卷积层进行计算
  1. 什么是卷积计算?
  • 这里以简单的二维向量举例(如下图)
  • 其中6×6代表待处理的输入,比如图片;3×3代表的是滤波器;计算结果为4×4的矩阵;其中 ∗*∗代表的是卷积操作
  • 计算过程是将3×3的矩阵与图片中对应的3×3的部分的每个元素相乘再相加,如图得到第一个输出 -5 ;然后依次向右移动,再向下
  • 最终的卷积计算结果如下(注意图中不同颜色方框所框住的内容)
  1. 为什么卷积计算就可以检测边缘呢?
  • 上图是对卷积计算进行一个解释,但是并不能体现出能够实现边缘检测等功能
  • 所以这里举一个最简单的实例,看下图
  • 假如图片的亮度和数字大小成正比,也就是数字越大,图片越亮;输入的图片黑灰之间有一条分割线需要我们去检测,那么通过卷积操作,这个垂直的地方就被放大了,更加突出

  1. 滤波器
  • 这里想要检测什么特征主要跟滤波器有关
  • 如下图,是检测水平和垂直边缘常用的两种滤波器

  • 但是上面的滤波器只能检测固定方向的,想要检测其他角度的边缘怎么办呢
  • 可以把滤波器里的参数都设置成可变的,通过对模型进行训练得到结果
  • 这样得到的滤波器就十分灵活了,会根据参数的调节得到最好的结果

三. Padding(填充)

  1. 为什么需要Padding?
  • 前面的卷积操作可以看到,输入为6×6,滤波器为3×3,得到的结果为4×4;但是这通常不是我们想得到的结果,这样每次卷积之后都变小了;我们更想输入和输出的大小相同,这样更方便计算

  • 对输入和输出的维度用式子表示,输入为 n x n,卷积为 f x f,那么结果为(n-f+1)x(n-f+1)

  1. 如何Padding?
  • 就是在输入矩阵的最外围加上一层(这个填充的层数是可以设置的,这里简单起见设置为1 )
  • 假设在填充 1层,那么6×6就变成了8×8
  • 抽象为式子就是(n+2* p-f+1)x(n+2* p-f+1) ,当n=6,p=1,f=3,发现结果刚好为6,就实现了输入输出维度一致

四. 卷积步长

  1. 什么是步长?
  • 前面看到,滤波器在输入矩阵上是一次移动一格进行计算,这个也是可以设置的我们可以一次移动两格进计算,那么步长就是2
  1. 设步长为s,那么计算的式子如下图

五. 三维卷积

  1. 前面是为了方便使用二维的矩阵进行计算,但是实际计算图片时,图片的输入是三维的;例如一张1080×1080的RGB图片,会有三种原色红、绿、蓝;所以输入的是1080x1080x3的三维张量(这里的3也叫channel数)
  2. 三维张量如何卷积?
  • 如下图,6x6x3的输入和3x3x3的滤波器进行计算得到4×4的结果,发现结果还是二维的;是因为结果中的每个元素是由27个数相加的到的(之前二维的是9个数相加)

  • 上面的输入是三维的,输出是二维的,显然不利于后续的计算(这里我们还是希望输入和输出的维度一致);所以再添加一组3x3x3的滤波器,计算得到4x4x2的结果

  • 所以也可以看出来输出结果的最后一维(也就是channel),是由滤波器的组数决定的

  • 所以结合一下前面的知识,对原始的输入进行Padding,然后把滤波器的组数设置为3,那么输出维度就是6x6x3了,就和输入维度一致了

  • 另外,当设置每一组为不同的滤波器时(比如第一组为水平检测滤波器,第二组为垂直检测滤波器),那么就实现了不同的边缘检测,换句话说,就是提取了不同的特征

六. Pooling(池化)

  1. 什么是池化?
  • 池化是为了减少计算量而设计的
  1. 如何进行池化?
  • 以最大池化为例,就是取2×2格子的最大值,依次取最大值即可,十分简单,也没有参数

  1. 常见的池化层
  • Max Pooling:取最大值
  • Average Pooling:取平均值
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 卷积神经网络-CNN