深度学习与图像识别原理与实践
第8章 卷积神经网络
1、卷积神经网络是一种深度前馈神经网络,在图片分类、图片检索、目标检测、目标分割等图像视频相关领域中应用。与普通神经网络相比,卷积神经网络有一些特殊层。
2、全连接层:可以理解为前述神经网络的一个隐藏层,它包含权重向量W和激活函数。具体来说,对于一张32X32X3的图片,要通过全连接层,首先要将其拉伸为3072X1的向量作为神经网络隐藏层的输入,然后该向量和权重向量W做点乘操作,再将点乘后的结果作为激活函数的输入,终,激活函数输出的结果便是全连接层的终结果。
2、卷积层:与全连接层不同,它保留了输入图像的空间特征,即对于一张32X32X3的图片,卷积层的输入就是32X32X3的矩阵,不需要做任何改变。
3、在卷积层引入一个新的概念:卷积核kernel(简称为卷积)。卷积的大小在实际需要时自定义其长和宽(如3X3,5X5等),其通道个数一般设置为与输入图片通道数量一致。
4、卷积的过程:让卷积在输入图片上依次进行滑动,滑动方向为从左到右,从上到下;每滑动一次,卷积就与其滑窗位置对应的输入图片x做一次点积计算并得到一个值。
5、步长(stride):是指卷积在输入图片上移动时需要移动的像素数,如步长为1,卷积每次只移动1个像素。
6、卷积过程示例:如下图8-2输入是一个1X7的向量,我们定义一个一维卷积,卷积大小1X3,步长为1,那么经过第一次卷积操作后等到10X5+5X2+11X6=126,以此类推,终得到一个1X5的向量。
7、在一个应用场景中可以定义多个卷积,每次卷积运算完成不同的任务,即提取不同的特征层。
8、卷积神经网络是由一系列卷积层经过激活来得到的。
9、通用的卷积层的计算公式:输入图像为W1XH1XD1(W1、H1、D1分别代表宽、高和颜色通道),卷积核kernel为FXF,kernel个数为K,步长为S,填充pad大小为P。
W2=[(W1-F+2P)/S]+1
H2=[(H1-F+2P)/S]+1
D2=K
10、卷积层学习的关键就是几个kernel,与传统神经网络不同的是,卷积层的计算是含有空间信息的。
11、池化层(pooling):是对图片进行压缩(降维)的一种方法,池化的方法很多,如max pooling、average pooling等。
12、输入图像为W1XH1XD1(W1、H1、D1分别代表宽、高和颜色通道),池化层的参数中,池化kernel为FXF,步长为S,那么经过池化后输出的图像宽、高、通道分别为:
W2=[(W1-F)/S]+1
H2=[(H1-F)/S]+1
D2=D1
13、池化层对原始特征的信息进行压缩,是卷积神经网络中很重要的一步。大多数情况下,卷积层、池化层和激活层三者几乎像一个整体一样共同出现。
14、批规范层(BatchNorm层):主要是为了加速神经网络的收敛过程以及提高训练过程中的稳定性。虽然深度学习被证明有,但它的训练过程始终需要经过精心调试,比如精心设置初始化参数、使用较小的学习率等。
15、batch的概念:在使用卷积神经网络处理图像数据时,往往是几张图片被同时输入到网络中一起进行前向计算,误差也是将该batch中所有图片的误差累计起来一起回传。BatchNorm方法其实就是对一个batch中的数据根据公式做了归一化。
Xk^=(Xk-E[Xk])/√Var(Xk)
16、常见卷积神经网络结构:
1)AlexNet:主要由5个卷积层和3个全连接层组成,后一个全连接层通过Softmax终产生的结果将作为输入图片在1000个类别上的得分。使用ReLU作为激活函数,使用多种方法避免过拟合。
2)VGGNet:包含两种结构,分别为16层和19层。VGGNet结构中,所有卷积层的kernel都只有3X3。
3)GoogLeNet:GoogLeNet初的想法很简单,就是若想要得到更好的预测果,就要增加网络的复杂度,即网络深度和网络宽度。这个思路存在两个问题:更复杂的网络意味着更多的参数,容易过拟合;更复杂的网络会带来更大的计算资源的消耗。GoogLeNet引入inception结构来解决这两个问题。除了inception结构,GoogLeNet的另外一个特点是主干网络部分全部使用卷积网络,仅在终分类部分使用全连接层。
4)ResNet:该网络的提出为解决神经网络中因为网络深度导致的梯度消失问题提供了好的思路。为解决神经网络过深导致的梯度消失问题,ResNet巧妙地引入了残差结构。就算网络结构很深,梯度也不会消失。
17、在ResNet网络之后,还有很多新的网络结构不断出现,但主要思想大体是基于以上4种类型的一些改进。
(第6-7章主要涉及一些Pytorch案例,暂不介绍,后续分享自己搭建的案例。)