CS231n李飞飞计算机视觉 卷积神经网络详解上

卷积神经网络详解上

卷积层:W\times H\times D分别表示数据的宽、高、深度

卷积:输入数据大小:W1\times H1\times D1,滤波器大小:W2\times H2\times D2。滤波器与输入数据在左上角对齐,从该位置依次从左向右,从上到下滑动滤波器,滑动步伐为stride,滤波器与其覆盖的数据的对应位置相乘然后加和,在加上偏置,得到该位置的激活反应,对整个图像的卷积得到一个激活映射。如果D1=D2,滤波器直接按上述卷积,一般D1=D2。如果D1\neq D2,假设D1=3,D2=1,让滤波器分别在深度为1、2、3的层卷积。

假设输入数据32\times 32\times 3,滤波器5\times 5\times 3,滤波器在某个位置的卷积可看做下图:

滤波器在某个位置的卷积得到的是一个数,数值是滤波器和被滤波器覆盖的图像部分的点积再加上偏置。即做5*5*3维的点积再加上偏置。

一个滤波器对整张图像卷积后得到一个激活映射,如下图:

这是只有一个滤波器的情况,如果有六个滤波器卷积之后将得到6个激活映射,如下图:

卷积神经网络是由卷积层和激活函数序列组成的,一个卷积网络结构的例子如下图:

首先输入一张图像,然后依次经过卷积、激活、卷积、激活、池化层,经过三个这样的组合最终经过一个全连接层得到图像每个类别的分数。

卷积:

例输入数据7\times 7\times 3,滤波器3\times 3\times 3,stride是滑动步伐,即每次滑动滤波器滑多远,stride为1的时候

stride为2的时候:

卷积输出图像的大小:(N-F)/stride+1,而深度D=滤波器个数。(注:通常输入图像和滤波器都是方的。)N表示输入图像大小,F表示输出图像大小。如N=7,F=3,stride=1,此时输出图像大小是(7-3)/1+1=3。

如果stride=3,输出图像(7-3)/3+1=2.33不合理。

填充pad

pad:是在图像边界填充若干圈0数据。

在考虑填充时,记P为填充圈数,此时卷积的输出的长度和宽度:(N-F+2P)/stride+1,而深度是D=滤波器个数。

另外一个做填充的原因:从上述内容可以看出,如果对一个输入图像不断地进行卷积操作,图像的大小会越来越小,表达能力会越来越差,而且图像变小的速度非常快,而当网络很大时,不希望图像减小的太快,所以就会用填充的方法,使得图像保持大小不变。而此时具体填充多少圈,与卷积的滤波器大小F有关,填充圈数=(F-1)/2,会使得卷积后的图像跟输入图像大小一致。

例:输入图像32\times 32\times 3,滤波器5\times 5\times 3,有十个滤波器,stride=1,pad=2,(32-5+2*2)/1+1=32,输出图像是32*32*10。再看有多少个参数,每个滤波器有5*5*3+1=76个参数,额外加的1是偏置,10个滤波器一个760个参数。

滤波器的个数通常是2的指数,是为了在某些方法中计算方便。

从神经元的角度理解,滤波器在某一位置的卷积过程也相当于是w^Tx+b,所以一个滤波器在某一位置相当于一个神经元,且这个神经元只关注这一块,所以说神经元是局部连接的,因为它的接受域只是输入图像的一块。一个滤波器与输入图像卷积得到的一个激活映射也就是输入图像经过多个神经元得到的,而这些神经元共享参数,因为这些神经元都与一个滤波器相对应。

如果卷积如下图,输出图像有5层,即有5个滤波器,从神经元的角度理解,每个层的神经元共享参数(说白了这一个层的神经元的参数都是来自一个滤波器,只是不同的神经元关注图像的不同部分。)而不同层却在同一位置的神经元关注输入图像的相同位置,但参数不同,因为其对应的滤波器不同。

池化

池化层让图像的表示变小且更易于管理。且池化层是对不同的激活映射单独作用的。

最大池化,给出滤波器大小为2\times 2,stride=2,卷积是点乘加上偏置操作,而最大池化是在这一图像块内找到最大的像素。如下图:

类似地还有平均池化、最小池化。

猜你喜欢

转载自blog.csdn.net/wangchy29/article/details/86759548