各位同学好,最近学习了CS231N斯坦福计算机视觉公开课,讲的太精彩了,和大家分享一下。
如下图所示,现在有shape为 32x32x3 的图像,如果使用全连神经网络,将图像拉长成一个一维向量 [None, 3072];使用10个线性分类器,每个分类器是一个一维向量,含 3072 个权重,和图像做点乘,每个分类器得到1个值,得到输出特征向量为 [None, 10]
使用全连接神经网络处理图像分类问题存在的缺陷是,将二维图像拉平成一维向量之后,丢失了图像的空间信息。为了解决这个问题,引入卷积操作。
卷积神经网络是由 卷积层、池化层(降采样)、全连接层 组成。卷积层提取特征;池化层对特征后处理,将特征大而化之的处理,图变小变模糊;全连接层融合不同的特征,输出最终结果。
卷积操作可以理解为,卷积核在原图像上滑动,把对应位置元素相乘,即图像像素乘以对应位置卷积核的权重,把相乘的结果再相加,填到生成特征图的对应位置。
以单通道图像举例。如下图,左图是原始像素,左图绿色区域为感受野,中间的图为卷积核,每次卷积结果生成特征图,如右图。每次卷积的卷积核里面的权重是不变的。在感受野区域内,将原始像素和卷积核对应像值相乘再相加,结果填到特征图的对应位置上。
有多少个卷积核就有多少张特征图。一个卷积核生成一张特征图,如果换一套卷积核权重,就得到了第二张特征图。将多个卷积核生成的特征图堆叠起来,就生成了多通道的特征图。作为下一个卷积层的输入。
然而,现在有个小问题。在卷积过程中,原图像左上角的像素只参加了一次卷积运算,而中间的像素参加了很多次卷积运算。这样会导致卷积过程中丢失边缘信息。
如何解决这个问题呢,我们可以在原图像边缘使用0填充一圈,称为padding操作。(1)补0之后,边缘像素就能更多的参与卷积运算。(2)不使用0填充的话,卷积过程中生成的特征图size会不断减小;采用0填充之后,卷积前的特征图size和卷积后的特征图size相同
现在卷积核在图像上移动步长=(1,1),即卷积核在水平和竖直方向每次滑动一格。若卷积核在图像上移动步长=(2, 2),即卷积核在水平和竖直方向每次滑动两格。
在现实生活中,一般都是彩色图像,即RGB三颜色通道。刚刚介绍的是原图只有一个通道。
卷积操作中,输入图像有多少个通道,卷积核就有多少个通道。如下图,三个通道的卷积核在三通道的原图像上滑动,对应元素相乘再相加,一个卷积核生成一张特征图。
如下图,输入图像三通道,一个卷积核也是三通道的,卷积核的每个通道对应原图的每个通道,卷积核的每个通道的权重是不相同的。卷积核和原图像对应位置相乘再相加,再加上一个偏置,填到特征图的对应位置上。
卷积的目的就是把原图中符合卷积核定义的特征提取出来。
可以理解为,卷积核定义了一个特征,卷积操作就是在原图上提取这个特征,如果原图中某些像素值符合卷积核特征,那么在特征图中对应的像素值就比较大,其他地方的值都很低。不同的卷积核能在原图中提取不同的特征,如下图两种卷积核。
输入图像的shape为 [32, 32, 3],用6个 5x5x3 的卷积核卷积,得到特征图的shape为 [28, 28, 6],再用10个 5x5x6 的卷积核卷,生成特征图的shape为 [24, 24, 10]
现在有卷积层输出的特征图,随着卷积核个数越来越多,特征图通道数也越来越多,参数量也越来越大。现在从特征图中选取一些代表性的像素值作代表,不需要考虑原来这么繁杂的参数。
选取方法有,最大池化:从每个池化窗中选出一个最大值;平均池化:计算每个池化窗口的平均值。
池化的作用:
(1)使卷积神经网络具有平移不变性。不管原图中,对象是处于图像的哪个位置,经过池化层,过滤平移变形。
(2)减少参数量。从特征图中提取具有代表性的像素值。
(3)防止过拟合。把特征图进行大而化之的处理,保留主要特征,过滤噪音。
卷积操作的卷积核是有权重的,池化操作的池化窗口中是没有权重的,只需要找出相应的值
全连接将输出特征图拉平成一个长向量,进行模型汇总,得到最后的结果。
(1)局部感受野。每个神经元仅于输入神经元的一块区域连接,这块区域称为感受野。
和全连接神经网络不同,全连接网络是每一个神经元都要处理上一层的全部输出信息;而在卷积神经网络中,每个神经元只关注感受野内的一小块区域。
(2)权值共享。卷积核是共享的,一次卷积过程中,一个卷积核的权重参数是不变的(一个卷积核各通道的权重参数可以不相同)
(3)池化(下采样)减少参数,防止过拟合,引入了平移不变性。
如果输入图像的size为(N, N),卷积核的size为(F, F),输出的特征图的size为 (N-F)/ stride +1
如下图,当步长=3时,输出特征图size是小数,应该避免这种情况,在原图的周围使用0填充,使输出特征图size是整数。
使用padding后,输出特征图size公式变为:(N+2P-F)/ stride +1
p 代表原图周围padding几圈。如果 p =(F-1)/ 2,且步长=1,那么输入和输出特征图的size相同。
1x1卷积是指 卷积核的长宽都等于1。如下图所示,输入特征图的shape为 [64, 64, 192],一个卷积核shape为 [1, 1, 192],对应元素相乘再相加,得到卷积输出特征图的shape为 [64, 64, 1]
可以使用不同个数的1x1卷积核来升维或降维,如果1x1卷积核个数是128个,就将输入图像的shape从 [64, 64, 192] 降为 [64, 64, 128]。
1x1卷积的作用:(1)降维或升维;(2)跨通道信息交融;(3)减少参数量;(4)增加模型深度,提高非线性表示能力。
如下图(a)所示,使用 5x5x256 的卷积核计算,参数量有二十万。操作数160.5M,可理解为每张输出特征图都是由一次卷积得来的,每一次卷积的运算量就是每个卷积核的size = 5*5
如图(b)所示,先用1x1卷积核降维,再用5x5卷积提取特征,每个1x1卷积核的参数量只有1*1*256。大大减少了计算量