AlexNet--CNN经典网络模型详解

二、AlexNet

AlexNet--CNN经典网络模型详解在imagenet上的图像分类challenge上大神Alex提出的alexnet网络结构模型赢得了2012届的冠军,振奋人心,利用CNN实现了图片分类,别人用传统的机器学习算法调参跳到半死也就那样,Alex利用CNN精度远超传统的网络。
AlexNet--CNN经典网络模型详解
1. conv1阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解
AlexNet--CNN经典网络模型详解第一层输入数据为原始的2272273的图像,这个图像被11113的卷积核进行卷积运算,卷积核对原始图像的每次卷积都生成一个新的像素。卷积核沿原始图像的x轴方向和y轴方向两个方向移动,移动的步长是4个像素。因此,卷积核在移动的过程中会生成(227-11)/4+1=55个像素(227个像素减去11,正好是54,即生成54个像素,再加上被减去的11也对应生成一个像素),行和列的5555个像素形成对原始图像卷积之后的像素层。共有96个卷积核,会生成555596个卷积后的像素层。96个卷积核分成2组,每组48个卷积核。对应生成2组555548的卷积后的像素层数据。这些像素层经过relu1单元的处理,生成**像素层,尺寸仍为2组5555*48的像素层数据。

这些像素层经过pool运算(池化运算)的处理,池化运算的尺度为33,运算的步长为2,则池化后图像的尺寸为(55-3)/2+1=27。 即池化后像素的规模为272796;然后经过归一化处理,归一化运算的尺度为55;第一卷积层运算结束后形成的像素层的规模为272796。分别对应96个卷积核所运算形成。这96层像素层分为2组,每组48个像素层,每组在一个独立的GPU上进行运算。

反向传播时,每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的96个偏差值。

2. conv2阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解
AlexNet--CNN经典网络模型详解第二层输入数据为第一层输出的272796的像素层,为便于后续处理,每幅像素层的左右两边和上下两边都要填充2个像素;27x27x96的像素数据分成27x27x48的两组像素数据,两组数据分别再两个不同的GPU中进行运算。每组像素数据被5x5x48的卷积核进行卷积运算,卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿原始图像的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,卷积核在移动的过程中会生成(27-5+2x2)/1+1=27个像素。(27个像素减去5,正好是22,在加上上下、左右各填充的2个像素,即生成26个像素,再加上被减去的5也对应生成一个像素),行和列的27x27个像素形成对原始图像卷积之后的像素层。共有256个5x5x48卷积核;这256个卷积核分成两组,每组针对一个GPU中的27x27x48的像素进行卷积运算。会生成两组27x27x128个卷积后的像素层。这些像素层经过relu2单元的处理,生成**像素层,尺寸仍为两组27x27x128的像素层。

这些像素层经过pool运算(池化运算)的处理,池化运算的尺度为3x3,运算的步长为2,则池化后图像的尺寸为(57-3)/2+1=13。 即池化后像素的规模为2组13x13x128的像素层;然后经过归一化处理,归一化运算的尺度为5*5;第二卷积层运算结束后形成的像素层的规模为2组13x13x128的像素层。分别对应2组128个卷积核所运算形成。每组在一个GPU上进行运算。即共256个卷积核,共2个GPU进行运算。

反向传播时,每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的256个偏差值。

3. conv3阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解
AlexNet--CNN经典网络模型详解第三层输入数据为第二层输出的2组1313128的像素层;为便于后续处理,每幅像素层的左右两边和上下两边都要填充1个像素;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是33256。因此,每个GPU中的卷积核都能对2组1313128的像素层的所有数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,运算后的卷积核的尺寸为(13-3+12)/1+1=13(13个像素减去3,正好是10,在加上上下、左右各填充的1个像素,即生成12个像素,再加上被减去的3也对应生成一个像素),每个GPU*1313192个卷积核。2个GPU*1313384个卷积后的像素层。这些像素层经过relu3单元的处理,生成**像素层,尺寸仍为2组1313192像素层,共1313*384个像素层。

4. conv4阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解AlexNet--CNN经典网络模型详解第四层输入数据为第三层输出的2组1313192的像素层;为便于后续处理,每幅像素层的左右两边和上下两边都要填充1个像素;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是33192。因此,每个GPU中的卷积核能对1组1313192的像素层的数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,运算后的卷积核的尺寸为(13-3+12)/1+1=13(13个像素减去3,正好是10,在加上上下、左右各填充的1个像素,即生成12个像素,再加上被减去的3也对应生成一个像素),每个GPU*1313192个卷积核。2个GPU*1313384个卷积后的像素层。这些像素层经过relu4单元的处理,生成**像素层,尺寸仍为2组1313192像素层,共1313*384个像素层。

5. conv5阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解
AlexNet--CNN经典网络模型详解第五层输入数据为第四层输出的2组1313192的像素层;为便于后续处理,每幅像素层的左右两边和上下两边都要填充1个像素;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有128个卷积核,每个卷积核的尺寸是33192。因此,每个GPU中的卷积核能对1组1313192的像素层的数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动,移动的步长是1个像素。因此,运算后的卷积核的尺寸为(13-3+12)/1+1=13(13个像素减去3,正好是10,在加上上下、左右各填充的1个像素,即生成12个像素,再加上被减去的3也对应生成一个像素),每个GPU*1313128个卷积核。2个GPU*1313256个卷积后的像素层。这些像素层经过relu5单元的处理,生成**像素层,尺寸仍为2组1313128像素层,共1313*256个像素层。

2组1313128像素层分别在2个不同GPU中进行池化(pool)运算处理。池化运算的尺度为33,运算的步长为2,则池化后图像的尺寸为(13-3)/2+1=6。 即池化后像素的规模为两组66128的像素层数据,共66*256规模的像素层数据。

6. fc6阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解
AlexNet--CNN经典网络模型详解第六层输入数据的尺寸是66256,采用66256尺寸的滤波器对第六层的输入数据进行卷积运算;每个66256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果,通过一个神经元输出这个运算结果;共有4096个66256尺寸的滤波器对输入数据进行卷积运算,通过4096个神经元输出运算结果;这4096个运算结果通过relu**函数生成4096个值;并通过drop运算后输出4096个本层的输出结果值。

由于第六层的运算过程中,采用的滤波器的尺寸(66256)与待处理的feature map的尺寸(66256)相同,即滤波器中的每个系数只与feature map中的一个像素值相乘;而其它卷积层中,每个滤波器的系数都会与多个feature map中像素值相乘;因此,将第六层称为全连接层。

第五层输出的66256规模的像素层数据与第六层的4096个神经元进行全连接,然后经由relu6进行处理后生成4096个数据,再经过dropout6处理后输出4096个数据。

7. fc7阶段DFD(data flow diagram):

AlexNet--CNN经典网络模型详解第六层输出的4096个数据与第七层的4096个神经元进行全连接,然后经由relu7进行处理后生成4096个数据,再经过dropout7处理后输出4096个数据。

8. fc8阶段DFD(data flow diagram):
AlexNet--CNN经典网络模型详解第七层输出的4096个数据与第八层的1000个神经元进行全连接,经过训练后输出被训练的数值。

Alexnet网络中各个层发挥的作用如下表所述:
AlexNet--CNN经典网络模型详解
参考自
d5224