参考很多,仅为个人学习记录使用
论文:ImageNet Classification with Deep Convolutional Neural Networks
发表时间:2012
一、网络结构(pytorch)
输入:227 * 227 * 3 (论文中写 224)
第一块:
conv: (227 - 11) / 4 + 1 = 55 3 -> 64
pool: (55 - 3) / 2 +1 = 27 64 -> 64
nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2)
第二块:
conv: (27 - 5 + 2 * 2) / 1 + 1 = 27 64 -> 192
pool: (27 - 3) / 2 + 1 = 13 192 -> 192
nn.Conv2d(64, 192, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2)
第三块:
conv: (13 - 3 + 1 * 2) / 1 + 1 = 13 192 -> 384
conv: (13 - 3 + 1 * 2) / 1 + 1 = 13 384 -> 256
conv: (13 - 3 + 1 * 2) / 1 + 1 = 13 256 -> 256
pool: (13 - 3) / 2 + 1 = 6 256 -> 256
nn.Conv2d(192, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(256, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2)
第四块:
Drop -> Linear -> ReLU -> Drop -> Linear -> ReLU -> Linear
nn.Dropout(),
nn.Linear(256 * 6 * 6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, num_classes)
二、网络特点
1.ReLU
使用了 ReLU 作为激活函数,论文中用一个 4 层的卷积网络,分别使用 ReLU 和 tanh 作为激活函数,比较了在 Cifar-10 上准确率达到 75% 时的速度。得出 ReLU 能大幅加快收敛速度的结论(ReLU 比 tanh 快 6 倍)。
2.LRN(Local Response Normalization)
论文中提出使用了 LRN 后 AlexNet 在 ImageNet 上的准确率有提高,但是这个方法除了 AlexNet 基本没有别的网络使用。且 LRN 会降低网络速度。
3.Overlapping Pooling
一般的 pooling 方法是无重叠的,AlexNet 中使用尺寸为 3,步长为 2 的池化块,发现更难过拟合,泛化能力有提高(准确率有微弱提高:top1和top5分别提升0.4%和0.3%)
4.Dropout
每个神经元都有一定的几率被 drop 掉,相当于在大模型中抽样出子模型,可以避免网络对某些神经元的依赖,迫使网络寻找更具有鲁棒性的特征。可以有效的减少过拟合。
三、数据增强
1.随机裁剪 + 水平翻转
将原始图片 resize 到 256 * 256,然后随机 crop 出 227 * 227 的图片,再进行水平翻转,那么每张原始图像就有 (256 - 227 + 1) * (256 - 227 + 1) * 2 = 1682 种出现方式,相当于把训练集扩充了 1682 倍(论文中 crop 大小为 224,倍数为 32 *32 * 2 = 2048)。
测试时选取图像的四个角和中心位置的图像,再对每张图像进行水平翻转,最终得到 10 张图像,将这 10 张图像作为输入,取其测试结果的平均值作为该测试图片的最终结果。
2.像素增强
先在整个训练集图像上用 PCA 计算 RGB 通道上的主成分,然后对每张训练图片进行颜色增强,引入参数 alpha,这个参数是用均值为 0,标准差为 0.1 的高斯随机数发生器随机产生的,每当遇到同样的训练图片时,就获得一个新的 alpha 值用于增强该训练图片。像素增强的公式如下
I′xy=Ixy+[p1,p2,p3][α1λ1,α2λ2,α3λ3]T
用这个方法使 AlexNet 的 Top-1 错误率降低了 1%
四、训练过程
用了带动量的 SGD,动量 0.9
初始学习率 0.01,在验证集准确率不变时对现有学习率除 10