第6章 图像识别与卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)
6.1 图像识别问题简介及经典数据集
图像识别问题简介
- 图像识别问题希望借助计算机程序来处理、分析和理解图片中的内容,使得计算机可以从图片中自动识别各种不同模式的目标和对象
- 卷积神经网络是图像识别问题取得突破性进展的最主要技术支持
- 在NNIST上,相比其他算法,卷积神经网络可以得到更低的错误率。而且通过卷积神经网络达到的错误率已经非常接近人工标注的错误率
CIFAR数据集
- CIFAR数据集分为CIFAR-10和CIFAR-100两个问题,它们都是图像词典项目(Visual Dictionary)中800万张图片的一个子集
- CIFAR数据集中的图片为32*32的彩色图片
- CIFAR-10问题收集了来自10个不同种类的60000张图片
- CIFAR官网提供不同格式的数据集下载
- CIFAR-10中的图片大小都是固定的且每一张图片中仅包含一个种类的实体
- 样例
MNIST和CIFAR相对于真实环境的2个问题
- 现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的
- 现实生活中的物体类别很多,而且一张图片中不会只出现一个种类的物体
ImageNet图像数据库
- ImageNet是一个基于WordNet的大型图像数据库
- 在ImageNet中,将近1500万图片被关联到了WorkNet的大约20000个名词同义词集上
如图
- 在这张图片上用几个矩形框出了不同实物的轮廓
- 在物体识别问题上,一般将用于框出实体的矩形称为bounding box
ILSVRC:ImageNet每年都举办图像识别相关的竞赛(ImageNet Large Scale Visual Recognition Challenge)
top-N正确率:指的是图像识别算法给出前N个答案的正确率作为比较的方法,其中N的取值一般为3或5
6.2 卷积神经网络简介
全连接神经网络:每两层之间的所有节点都是有边相连的
卷积神经网络简介
- 卷积神经网络也是通过一层一层的节点组织起来的
- 卷积神经网络中的每个节点都是一个神经元
- 卷积神经网络中相邻两层之间只有部分节点相连
- 为了展示每一层神经元的维度,一般会将每一层卷积层的节点组织成一个三维矩阵
- 卷积神经网络的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可信度,这和全连接神经网络的输入输出是一致的
卷积与全连接的区别:神经网络中相邻两层的连接方式
为什么全连接神经网络无法很好地处理图像数据
- 使用全连接神经网络处理图像的最大问题在于全连接的参数太多
- 参数增多除了导致计算速度减慢,还很容易导致过拟合问题
在卷积神经网络的前几层,每一层的节点都被组织成一个三维矩阵
- 比如处理CIFAR-10数据集中的图片时,可以将输入层组织为一个32323的三维矩阵
一个卷积神经网络主要由以下5种结构组成
- 输入层
- 输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵
- 三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道
- 比如黑白图片的深度为1,而在RGB色彩模式下,图像的深度为3
- 卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转化为下一层的三维矩阵
- 卷积层
- 卷积层中每个节点的输入只是上一层神经网络的一小块,这个小块常用的大小有33或者55
- 卷积层试图将神经网络中的每一小块进行更加深入地分析从而得到抽象程度更高的特征
- 一般来说,通过卷积层处理过的节点矩阵会变得更深
- 池化层(Pooling)
- 池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小
- 池化操作可以认为是将一张分辨率较高的图片转化为分辨率较低的图片
- 通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的
- 全连接层
- 我们可以将卷积层和池化层看作自动图像特征提取的过程
- 在特征提取完成之后,仍然需要使用全连接层来完成分类任务
- Softmax层
- Softmax层主要用于分类问题
- 通过Softmax层,可以得到当前样例属于不同种类的概率分布情况
- 输入层
6.3 卷积神经网络常用结构
6.3.1 卷积层
过滤器
- 如图
- 简介
- 过滤器可以将当前层神经网络上的一个子节点矩阵转化为下一层神经网络上的一个单位节点矩阵
- 单位节点矩阵指的是一个长和宽都为1,但深度不限的节点矩阵
- 过滤器的尺寸
- 过滤器所处理的节点矩阵的长和宽都是由人工指定的,这个节点矩阵的尺寸也被称为过滤器的尺寸
- 过滤器处理的矩阵深度和当前层神经网络节点矩阵的深度是一致的,也就是深度上不做切割,有多深就用多深
- 过滤器的深度
- 过滤器另一个需要人工指定的设置是输出的单位节点矩阵的深度,这个设置称为过滤器的深度
- 如图
过滤器的前向传播过程
- 简介:就是通过左侧小矩阵中的节点计算出右侧单位矩阵中节点的过程
- 计算公式
- 公式
- 解读
ax,y,z
:过滤器中节点(x,y,z)
的取值f
:激活函数wix,y,z
:输入节点(x,y,z)
相对于第i
个输出节点的权重参数bi
:第i
个输出节点的偏置值
- 假设矩阵的size为2 2 3,过滤器的深度为5,则参数值为:2 2 3 * 5 + 5 = 65
- 公式
卷积层结构的前向传播过程
- 简介:卷积层结构的前向传播过程就是通过将一个过滤器从神经网络的左上角移动到右下角,并且在移动中计算每一个对应的单位矩阵得到的
- 过滤器每移动一次,可以计算得到一个单位矩阵(深度为k),将这些数值拼接成一个新的矩阵,就完成了卷积层前向传播的过程
如何避免卷积层运算前后矩阵尺寸的变化
- 背景:当过滤器的大小不为1*1时,卷积层前向传播得到的矩阵的尺寸要小于当前层矩阵的尺寸
- 解决:为了避免尺寸的变化,可以在当前层矩阵的边界上加入全0填充
- 如图
通过设置过滤器移动的步长来调整结果矩阵的大小
- 如图:显示了当移动步长为2且使用全0填充时,卷积层前向传播的过程
- 如图:显示了当移动步长为2且使用全0填充时,卷积层前向传播的过程
卷积层中过滤器参数