一、卷积神经网络(Convolutional Neural Network)
1、使用目的
专门用于图像处理的网络架构,比如图像分类、目标检测等;
2、预先处理
把不同大小的图片都先Rescale成一个固定大小的图片;
3、图像分类处理框架
4、一般一张RGB图像都拥有三个维度
(1)什么是图像的维度?
首先,针对于类似于上述的图片而言,一张RGB图像,除去基本的长和宽,还有一个颜色通道的维度,一般而言,计算机会将一张RGB图像通过红绿蓝三种不同的颜色进行叠加来产生各种各样的颜色,所以在颜色维度下,每一个通道(channels)的值都规定在 [ 0 → 255 ] [0\to255] [0→255]之间;
(2)为什么后面要拉伸成一维向量?
一般而言,在处理这种图像情况的时候,我们会将三维的张量(Tensor,可以理解为一个三维向量)拉伸成一个一维的张量(Python中可以利用torch.reshape()
或者torch.Tensor.view()
),但不一定是一开始就拉伸,因为有卷积层和池化层可以对二维/三维图像进行处理,但是通常在构建一个网络的时候最后还是会进行一维向量的拉伸操作,我的理解是这样的好处是可以在后面接全连接层,而且最后进行
s
o
f
t
m
a
x
softmax
softmax输出的时候也是需要拉伸成一维向量的;
二、图像识别的一些障碍
1、网络如何识别物体?
有时候我们并不需要看完整张图片的样貌才知道这里的内容是什么,而是只需要看一小部分的信息,就可以推断出其中的内容是什么,对于人类如此,对于网络也是如此,在训练网络的过程中,网络中每个神经元只需要知道一部分信息,然后通过全连接层或者其他方式,将各个神经元之间的信息交流整合起来,在最后输出的时候就可以得到一个较好的分类器(Classifier)来进行判别;
(1)如何看一小部分的信息?
还记得一开始我们讲的把整张图像拉伸成一维的方式吗,我们或许不需要针对一整张图片进行拉伸,而是只针对一小部分,再将这一小部分放入网络中去学习训练,不就可以做到只关注一部分信息了吗?
其中,红框中的部分即我们常说的感受野(Receptive Field),我们将这
(
3
×
3
×
3
)
(3\times3\times3)
(3×3×3)维度的像素拉伸成一个
(
27
×
1
)
(27\times1)
(27×1)的向量,再如之前我们所学一样,这个向量中的每个元素(像素值Pixel)作为输入,添加权重以及偏置后进行训练学习;
(2)如何确定感受野(Receptive Field)?
感受野的设计完全取决于你对于所要解决的问题的理解,它可以是长方形的、也可以是正方形的、也可以不考虑完所有的通道、也可以不同的感受野之间相邻或不相邻都可以,取决于自己的设计,而设计了一个固定的感受野,有一个专业名词称其为卷积核,但这个卷积核这里还解释的不够完全,我们接下来继续进行拓展其中奥秘;
(3)经典的Receptive Field
- 一般对于RGB图像而言,卷积核会覆盖所有的通道;
- 卷积核大小:就是指你所设计的卷积核每次操作的感受野的大小;
- 步长:就是每次卷积核移动多少个元素;
- 填充(padding):因为图像大小很有可能和卷积核大小无法整除,所以在边缘部分我们会填充一些数据(常用是填充为0)来让卷积操作正常进行下去;
2、同样的特征可能会出现在图片的不同位置?
因为上文中提到所提到的卷积核会覆盖整张图像的所有像素,所以特征的位置就无关紧要了,因为不同的卷积核会对相同的特征进行相同的处理,所以不用担心位置不同导致训练的失误;
但是,在一些论文中,研究人员会注重不同特征之间的位置关系,让网络去学习这种位置关系,比如在行人重识别的任务中,正常情况下人的头一定是会在身体之上的,所以这种位置关系也可以作为特征让网络进行学习;
3、权值共享
(1)原因与目的
因为看上去为了检测同一个鸟喙而用不同的感知器会显得模型特别冗余,所以为了简化模型参数(也是为了防止过拟合)我们利用权重共享的方式来用一种权重参数下的感知器来对所有通道的所有像素进行处理学习训练,如下图所示:
其中,两个神经元不同颜色线条表示的是各自不同的参数权值,相同的颜色表示权值相同;
(2)常用的权值共享方式
每一个感受野都有一组神经元来训练(如,64个神经元),且每一个感受野的神经元权重参数都相同,这样的神经元我们称之为一个过滤器(filter);
4、阶段性的总结
首先,我们一开始用的是全连接层来处理图像数据,但是这样处理会导致网络过于重视全局特征,导致一些没有用的背景杂波也被学进网络里,所以我们进一步利用感受野的方式来进行局部性的处理,这样网络可以学习哪些区域的图像特征是有用的哪些是无用的,进一步地,如果每一个感受野的参数权重都不尽相同的话,势必会导致网络参数量过于庞大,于是便提出了参数共享的方法
如上图所示,当融合了这些操作之后,卷积层(Convolutional Layer)的奥秘就被揭开了;
三、进一步的介绍
1、卷积层的输出
对于RGB图像而言其数据具有三个通道(channel),而黑白照片则只有一个通道,然后将这些数据输入卷积核去操作之后,输出的结果就叫做特征图(Feature Map)
注意,其中的卷积核的大小要留心设置;
2、池化(Pooling)
池化操作就是对图像的下采样操作,一般接在卷积操作之后,其参数是不需要学习的,该操作目的就是让前层输入变小、降维、提取特征,但是,到底适不适合加Pooling需要通过实验来进行探究!
(1)最大池化(Max Pooling)
即,选取一组区域中最大的数值的那个像素点作为整组的输出;
(2)平均池化(Avg Pooling)
3、卷积神经网络(CNN)总体框架
4、CNN的局限
卷积神经网络并不擅长于处理图像变换的问题,比如下面两张图片,网络可能可以学到第一张图像中的对象是狗,但是放大之后网络可能就无法识别了,所以这就需要**数据增广(Data Augmentation)**来进行预先处理