CNN

卷积神经网络简介

  • 特点
  • 将大数据量的图片降维成小数据量
  • 有效保留图片特征
  • 应用领域
  • 人脸识别、自动驾驶、无人安防
  • CNN解决的问题
  • 图像的数据量太大,导致成本很高,效率很低
  • 图像在数字化的过程中容易丢失特征
  • (其实就对应了两个特点)

下面具体看一下这两个问题

数据量大

图像是由很多像素构成的,每个像素又是由颜色构成的。一张彩色图,每一个像素都有RGB(即光学三原色)三个通道,用于表示颜色信息。所以,对于一张常见的1000*1000清晰度的图片,就会含有1000*1000*3个数值需要计算,这显然是一个庞大的数据。

为了解决此问题,CNN将大量参数降维成少量参数。

需要说明的是,降维并不会影响结果。就比如将一张图像在一定范围内缩小,图像的特征仍然不会改变。

保留图像特征

cnn数据集 cnn数据量_cnn数据集

如果简单地将图像的特征01化,即有圆形的地方为1,其余地方为0。则对于特征相近的图像(比如平移),则数字化的矩阵会有很大区别。

为解决此问题,CNN用视觉的方式保留图像特征,即模仿人的肉眼去提取、存留特征。

人的视觉原理

深度学习的理论研究,很大程度上是对人视觉的模仿。

人类视觉如何运作?

cnn数据集 cnn数据量_深度学习_02

首先摄入原始信号(即各种颜色的像素点),然后提取不同物体间的分界,接着识别图像的抽象(如几何形状),最后判断物体。

对应成图像处理的步骤:读取图像并数值化、提取图像边缘、提取图像特征、图像分类。

所以一个图像处理的思路是:构造多层的神经网络,较低层提取初级的图像特征,较高层进一步细化,最终在顶层实现图像的分类。

CNN基本原理

  • CNN三个基本组成部分
  • 卷积层:提取图像局部特征
  • 池化层:数据降维
  • 全连接层:输出结果

卷积层

核心部分是一个卷积核,滑窗处理。大致思路是用一个卷积核来过滤图像的各个区域,得到这些小区域的特征值

cnn数据集 cnn数据量_计算机视觉_03

具体计算过程为对应项相乘然后相加。

cnn数据集 cnn数据量_神经网络_04

(32*32*3->28*28*1)

在具体应用中,往往有多个卷积核,可以认为,每个卷积核代表了一种图像模式,**如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。**如果我们设计了6个卷积核,可以理解:我们认为这个图像上有6种底层纹理模式,也就是我们用6中基础模式就能描绘出一副图像。比如说垂直边缘、水平边缘等。

cnn数据集 cnn数据量_神经网络_05

如果使用6个卷积核提取,最终得到6个特征图,叠加在一起就得到了卷积层。

cnn数据集 cnn数据量_卷积_06

同时可以对卷积层继续进行卷积操作。注意每一个卷积核的深度和上一层的输入相等。经过连续的卷积不断提炼出高层次的特征,一步步将特征浓缩,得到高层次特征,最终达到分类效果。

可以发现,其实卷积层已经将图像缩小了一圈(如果不加边框),但是效果并不明显。

在了解卷积的大致过程后,还有一些细节部分需要思考。

  • 卷积核每次滑动的步长stride
  • 步长如果太大,比如大于卷积核的长度,则会遗漏一些像素点,导致特征损失。
  • 步长如果太小,比如为1,则效率太低。
  • 卷积对每个像素点是否平权
  • 由于滑窗的交集部分是计算了多次的,所以边缘的像素点计算次数少于中间的像素点。所以可能会丢失一部分边缘信息。
  • 解决方法是在图像外围加一圈0(或多圈),使得在不影响特征的情况下,增加边缘像素点的计算次数。

cnn数据集 cnn数据量_神经网络_07

  • 由于卷积的过程是多次叠加的,所以需要计算卷积过程中每一次的输入图尺寸,来设计卷积核。
    cnn数据集 cnn数据量_cnn数据集_08
    cnn数据集 cnn数据量_计算机视觉_09
  • 权值共享
  • 同一卷积过程中,filter内的值不变,即对于每一时刻滑窗对应的矩阵,各个位置的参数对于结果的权重保持一致。

前向传播和反向传播

  • 前向传播即是卷积的操作。(输入->输出)

本质是用输入层和卷积核去求解卷积结果。cnn数据集 cnn数据量_深度学习_10表示第i个卷积核。

cnn数据集 cnn数据量_cnn数据集_11

  • 反向传播

本质是已知卷积结果,去更新cnn数据集 cnn数据量_卷积_12的过程。

cnn数据集 cnn数据量_深度学习_13

具体过程以后再补充。

提取边缘特征

  • 为什么中间的卷积核可以提取垂直边缘?

cnn数据集 cnn数据量_神经网络_14

在颜色相近的区域,矩阵内的值相近,卷积计算的结果小,表现为暗色;在颜色区别明显的区域(可以认为是边缘),卷积计算结果大,表现为白色。

  • 垂直边界和水平边界

一个物体的边界可以看成由许多小的垂直边缘和水平边缘组成。

cnn数据集 cnn数据量_cnn数据集_15

偏差值和激活函数

  • 卷积计算后还需加入偏差cnn数据集 cnn数据量_深度学习_16,计算出新矩阵放入激活函数(Relu、Softmax、logistic等),作为卷积层的输出结果。

池化层(下采样)

池化层可以大大降低数据的维度,也可以有效避免过拟合。如下图(20*20->2*2)

cnn数据集 cnn数据量_神经网络_17

池化的大致过程:选取输入图中某个区域的最大值或均值来代替整个区域。在一幅图像中提取最大值可能意味着提取了某些特定特征,如垂直边缘、一只眼睛等。

cnn数据集 cnn数据量_计算机视觉_18

全连接层

经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。

cnn数据集 cnn数据量_cnn数据集_19

典型的 CNN 并非只是上面提到的3层结构,而是多层结构,例如 LeNet-5 的结构就如下图所示:

卷积层 – 池化层- 卷积层 – 池化层 – 卷积层 – 全连接层

cnn数据集 cnn数据量_计算机视觉_20

cnn数据集 cnn数据量_深度学习_21

也就是说卷积和池化重复出现,避免一次池化降维太快,导致特征损失。

参考博客、参考博客