二 卷积过程
1 卷积过程中一些概念
(1) 过程说明
卷积过程实际就是基于一个固定的矩阵(输入像素矩阵),在另一个矩阵(卷积核)不断一格一格(步长为1)扫过去,得到的数值的和,产生一个新的矩阵。用一个式子表示:Wx+b ⇒ ReLU ⇒ maxpooling。
(2) 卷积后的维数:
输入大小为:W1×H1×D1
需要指定的超参数:filter个数(K),filter大小(F),步长(s),边界填充(P)
输出: W2 = (W1-F + 2P)/S + 1
H2 = (H1 - F + 2P)/S + 1
深度 D2 = K
在上面两个公式中,W2是卷积后Feature Map的宽度;W1是卷积前图像的宽度;F是filter的宽度;P是Zero Padding数量,Zero Padding是指在原始图像周围补几圈0,如果P的值是1,那么就补1圈0;S是步长;H2是卷积后Feature Map的高度;H1是卷积前图像的高度。
(3) 池化: 把原来的维数降到1/n,n是池化矩阵的维数
(4) 步长(stride):卷积核每次移动的格子
(5) Padding :填充
输入图像在被卷积后,输出的图像会“缩小”,经过有限的卷积操作后,输入会变得过小,而不适合再进行卷积,从而限制整个网络的深度。Padding 可以解决此类问题。它会在输入图像进行卷积前先在频道周围“填充”上若干圈0。
当Padding设置为1时,即在输入图像周围填充一圈0。
(6) 激活函数
激活函数的种类也有很多,常用的是ReLU :f(x) = max{0,x}
2 卷积过程
(1) 单通道卷积
单个输入通道的卷积操作是非常简单的,输入图像像素和卷积核的对应元素相乘再相加即可。如下图的过程:
(2) 多通道卷积
实际情况中大多为多通道卷积。多通道卷积的过程如下图。下图是一个7*7*3的像素矩阵,俩个大小为3*3*3的卷积核(最后的3要对应输入像素矩阵的位深)。先看第一个卷积核W0,输入像素矩阵的每一层与W0对应的层做卷积,然后代入到激活函数中,得到第一层feature map,然后输入像素矩阵与卷积核W1做卷积,生成第二层feature map,其中输入像素与卷积核每对相同位置的元素乘积的和代入激活函数,就生成了 feature map 中的一个像素。不管输入图像有多少层,经过一个filter,最后都通过下面的公式变成一个深度为1的特征图。因此,卷积后feature Map的深度(层数)和卷积层的filter个数是相同的。要提取多少特征就需要多少个卷积核,越往后,卷积核设定的数目越多,体现label的特征就越细致,提取的特征就越多,就越能完成分类,识别等功能。
下面的式子就是生成feature map中每个元素的公式
首先对图像的每个像素进行编号,用Xi,j表示图像的第i行第j列元素;对filter的每个权重进行编号,用Wm,n表示第m行第n列权重,用Wb表示filter的偏置项;对Feature Map的每个元素进行编号,用ad,i,j表示Feature Map的第d层第i行第j列元素;用f表示激活函数(这个例子选择relu函数作为激活函数),D是深度(层数);F是filter的大小(宽度或高度,两者相同)。
不同的filter可以卷积得到不同的特征,也就是得到不同的feature map。有多少个卷积核就生成多少张特征图。
这里以典型的CNN模型AlexNet为例。AlexNet输入为227*227*3(最后的3 就是通道数),卷积核尺寸为11*11*3(最后的3是原图的深度3),卷积核的深度要和上一层输出的图像的深度一样。
第一层:
AlexNet训练时用俩个GPU并行训练,故将96个卷积核分成2组,每组48个卷积核,对应生成2组55*55*48的像素层,生成的特征图的大小是55*55,有48层(每组48层)。
这些像素层经过pool运算(池化运算)的处理,池化运算的尺度为3*3,运算的步长为2,则池化后图像的尺寸为(55-3)/2+1=27。,即每组像素层的维数是27*27*48。
第二层:
输入为27*27*96的像素层,padding = 2;27*27*96的像素层分成维数为27*27*48的两组,两组数据分别再两个不同的GPU中进行运算。每个GPU中有128个卷积核,大小是5*5*48,步长为1,生成俩组维数为27*27*128的像素层。经过池化层,池化运算的尺度为3*3,运算的步长为2,池化后像素的规模为2组13*13*128的像素层。
第三层:
输入为2组13*13*128的像素层;padding = 1;2组像素层要送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是3*3*128;步长为1。因此,每组运算后生成的特征图是13*13*192的像素层。
第四层:
输入为2组13*13*192的像素层;padding = 1;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是3*3*192;步长为1。因此,生成2组13*13*192像素层,
第五层:
输入是2组13*13*192的像素层;padding = 1;2组像素层都被送至2个不同的GPU中进行运算。每个GPU中都有128个卷积核,每个卷积核的尺寸是3*3*192;步长是1。因此,运算后的每组特征图的是13*13*128的像素层。
2组13*13*128像素层分别在2个不同GPU中进行池化(pool)运算处理。池化运算的尺度为3*3,运算的步长为2,则池化后每组图像的尺寸为6*6*128。
第六层(fc6):
第五层输出的6*6*256的像素层与第六层的4096个神经元全连接,然后经relu6处理生成4096个数据,再经过drop6处理输出4096个数据。
第七层(fc7):
第六层输出的4096个数据与第七层的4096个神经元进行全连接,然后经由relu7进行处理后生成4096个数据,再经过dropout7处理后输出4096个数据。
第八层(fc8):
第七层输出的4096个数据与第八层的1000个神经元进行全连接,经过训练后输出被训练的数值。最后输出的结果,结合softmax做出分类。有几类,就输出几个结点,每个结点保存的是属于该类别的概率值。
以上图文大部分摘抄自他人笔记
网友评论