在2012年Imagenet比赛冠军—Alexnet (以第一作者Alex命名)直接刷新了ImageNet的识别率,奠定了深度学习在图像识别领域的优势地位。网络结构如下图:
下面分别对每层进行介绍:
(1)Input 层:为输入层,AlexNet卷积神经网络默认的输入数据必须是维度为224×224×3的图像,即输入图像的高度和宽度均为224,
色彩通道是R、G、B三个。
(2)Conv1 层:为AlexNet的第1个卷积层,使用的卷积核为(11*11*3)*96
(卷积核大小为11*11,输入通道为3,输出通道为96),步长为4,Padding为2。通过套用卷积通用公式,可以得到最后输出的特征图的高度和宽度均为55,即 ,最后输出的特征图的维度为55×55×96。卷积通用公式参考我的博客神经网络之多维卷积的那些事中卷积中的特征图大小计算方式。
(3)MaxPool1 层 :为AlexNet的第1个最大池化层,池化核大小为3×3,步长为2。通过套用池化通用公式,可以得到最后输出的特征图的高度和宽度均为27,即 ,最后得到的输出的特征图的维度为27×27×96。
(4)Norm1 层:为AlexNet的第1个归一化层,即LRN1层,local_size=5(相邻卷积核个数设为5),输出的特征图的维度为272796。
(5)Conv2 层 :为AlexNet的第 2个卷积层,使用的卷积核为(5*5*96)*256
,步长为1,Padding为2。通过套用卷积通用公式,可以得
到最后输出的特征图的高度和宽度均为27,即 ,最后得到输出的特征图的维度为27×27×256。
(6)MaxPool2 层 :为AlexNet的第2个最大池化层,池化核大小为为3×3,步长为2。通过套用池化通用公式,可以得到最后
输出的特征图的高度和宽度均为13,即 ,最后得到输出的特征图的维度为13×13×256。
(7)Norm2 层:为AlexNet的第2个归一化层,即LRN2层,local_size=5(相邻卷积核个数设为5),输出的特征图的维度为13×13×256。
(8)Conv3 层 :为AlexNet的第3个卷积层,使用的卷积核(3*3*256)*384
,步长为1,Padding为1。通过套用卷积通用公式,可以得到最后输出的特征图的高度和宽度均为13,即 ,最后得到特征图的维度为13×13×384。
(9)Conv4 层 :为AlexNet的第4个卷积层,使用的卷积核为(3*3*384)*384
,步长为1,Padding为1。通过套用卷积通用公式,可以得
到最后输出的特征图的高度和宽度均为13,即 ,最后得到输出的特征图的维度为13×13×384。
(10)Conv5 层 :为AlexNet的第5个卷积层,使用的卷积核为(3*3*384)*256
,步长为1,Padding为1。通过套用卷积通用公式,可以得
到最后输出的特征图的高度和宽度均为13,即 ,最后得到输出的特征图的维度为13×13×256。
(11)MaxPool3 层 :为AlexNet的第3个最大池化层,池化核大小为为3×3,步长为2。通过套用池化通用公式,可以得到最后
输出的特征图的高度和宽度均6,即 ,最后得到输出的特征图的维度为6×6×256。
(12)FC6 层 :为AlexNet的第1个全连接层,输入的特征图的维度为6×6×256,首先要对输入的特征图进行扁平化处理,将其变成维度为1×9216的输入特征图,因为本层要求输出数据的维度是1×4096,所以需要一个维度为9216×4096的矩阵完成输入数据和输出数据的全连接,最后得到输出数据的维度为1×4096。
(13)Dropout6 层:在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,反向传播的时候也不更新这些节点,输出的特征图的维度为1×4096。
(14)FC7 层 :为AlexNet的第2个全连接层,输入数据的维度为1×4096,输出数据的维度仍然是1×4096,所以需要一个维度为4096×4096的矩阵完成输入数据和输出数据的全连接,最后得到输出数据的维度依旧为1×4096。
(15)Dropout7 层:在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,反向传播的时候也不更新这些节点,输出的特征图的维度为1×4096(这些神经元还存在,只是置为0了,因此输出维度不变)。
(16)FC8 层 :为AlexNet的第3个全连接层,输入数据的维度为1×4096,输出数据的维度要求是1×1000,所以需要一个维度为4096×1000的矩阵完成输入数据和输出数据的全连接,最后得到输出数据的维度为1×1000。
总结:
- 网络比LeNet更深,包括5个卷积层和3个全连接层。
- 使用relu**函数,收敛很快,解决了Sigmoid在网络较深时容易出现梯度消失(或梯度弥散)的问题。
- 加入了dropout层,防止过拟合。
- 使用了LRN归一化层,通过在相邻卷积核生成的feature map之间引入竞争,从而有些本来在feature map中显著的特征在A中更显著,而在相邻的其他feature map中被抑制,这样让不同卷积核产生的feature map之间的相关性变小,从而增强了模型的泛化能力。
- 使用裁剪翻转等操作做数据增强,增强了模型的泛化能力。预测时使用提取图片四个角加中间五个位置并进行左右翻转一共十幅图片的方法求取平均值,这也是后面刷比赛的基本使用技巧。
- .分块训练,当年的GPU没有这么强大,Alexnet创新地将图像分为上下两块分别训练,然后在全连接层合并在一起。
- 总体的数据参数大概为240M。
参考文档
深度学习之Pytorch实战计算机视觉[唐进民著]
从LeNet到VGG,看卷积+池化串联的网络结构