Py学习  »  机器学习算法

【深度学习】回顾经典: AlexNet, CaffeNet — Winner of ILSVRC 2012

机器学习初学者 • 1 年前 • 110 次点击  
转载自:AI算法与图像处理,作者:AIstudy

导读

 

最近和同事交流很多来参加面试的应聘者的情况,很多都是介绍自己用了什么来做什么,但是对于内部的原理,都兵没有深入研究,现在深度学习框架都提供了非常便利的API,你可以轻松实现和搭建基础的网络,甚至可以直接照搬开源代码跑。

但你觉得跑跑开源代码真的就能拿到高薪吗?不太现实吧,跑通别人代码只是开始,更加重要的是理解原理,理解作者是如何通过观察发现存在的问题,理解作者如何设计实验,以及如何验证自己的想法。


在本文中,将回顾 AlexNet 和 CaffeNet。AlexNet是2012年ILSVRC(ImageNet Large Scale Visual Recognition Competition) 的冠军,这是一个图像分类比赛。

这是2012年来自Hinton教授团队的NIPS论文,在我(指原作者)写这篇文章的时候被引用了28000次。它在深度学习方面取得了重大突破,大大降低了ILSVRC 2012的错误率,如下图所示。因此,这是一篇必读的论文!!

ImageNet是一个包含超过1500万张高分辨率图像的数据集,包含大约22000个类别。ILSVRC使用ImageNet的一个子集,在1000个类别中每个类别中大约有1000张图片。总共大约有120万张训练图像,5万张验证图像和15万张测试图像。

AlexNet, the winner in ILSVRC 2012 image classification with remarkable lower error rate
A. For AlexNet, we will cover:
  1. Architecture

  2. ReLU (Rectified Linear Unit)

  3. Multiple GPUs

  4. Local Response Normalization

  5. Overlapping Pooling

  6. Data Augmentation

  7. Dropout

  8. Other Details of Learning Parameters

  9. Results

B. 对于CaffeNet来说,它只是一个AlexNet的单gpu版本。因为通常人们只有一个GPU, CaffeNet是一个模拟AlexNet的单GPU网络。在这个故事的最后我们也会报道这个。
通过遍历每个组件,我们可以知道每个组件的重要性。其中一些现在还不是很有用。但它们确实激发了其他网络的发明。
整理自:https://medium.com/coinmonks/paper-review-of-alexnet-caffenet-winner-in-ilsvrc-2012-image-classification-b93598314160

1. Architecture


AlexNet
AlexNet contains eight layers:
1th: Convolutional Layer: 96 kernels of size 11×11×3 (stride: 4, pad: 0) 55×55×96 feature maps Then  3×3 Overlapping Max Pooling (stride: 2)
27×27×96 feature maps Then Local Response Normalization
27×27×96 feature maps
2nd: Convolutional Layer: 256 kernels of size 5×5×48 (stride: 1, pad: 2)
27×27×256 feature maps Then 3×3 Overlapping Max Pooling (stride: 2) 13×13×256 feature maps Then **Local Response Normalization 13×13×256 feature maps
3rd: Convolutional Layer: 384 kernels of size 3×3×256 (stride: 1, pad: 1)
13×13×384 feature maps
4th: Convolutional Layer: 384 kernels of size 3×3×192 (stride: 1, pad: 1)
13×13×384 feature maps
5th: Convolutional Layer: 256 kernels of size 3×3×192 (stride: 1, pad: 1)
13×13×256 feature maps Then 3×3 Overlapping Max Pooling (stride: 2)
6×6×256 feature maps
6th: Fully Connected (Dense) Layer of
4096 neurons
7th: Fully Connected (Dense) Layer of
4096 neurons
8th: Fully Connected (Dense) Layer of
Output: 1000 neurons (since there are 1000 classes) Softmax is used for calculating the loss.
总共有6000万参数需要训练!!!

2. ReLU


激活函数
在Alexnet之前,Tanh被使用。ReLU是在AlexNet中介绍的。达到25%的训练错误率时,ReLU比Tanh快6倍

3. Multiple GPUs

此时使用的是NVIDIA GTX 580 GPU,内存只有3GB。因此,我们可以在架构中看到,它们被分成两条路径,使用两个gpu进行卷积。内部通信只发生在一个特定的卷积层。
因此,使用2个gpu,是由于内存问题,而不是为了加快训练过程。
与只有一半内核(只有一条路径)的网络相比,整个网络中,top-1和top-5的错误率分别降低了1.7%和1.2%。

4. Local Response Normalization



Normalization
在AlexNet中,使用了局部相应归一化( local response normalization)。正如我们在方程式中看到的那样,它不同于批处理归一化(batch normalization)。归一化(normalization)有助于加快收敛速度。现在,批处理归一化代替了局部相应归一化。
通过局部响应归一化,Top-1和top-5的错误率分别降低了1.4%和1.2%。

5. Overlapping Pooling

Overlapping Pooling 是步长小于核大小的池化,而Non-Overlapping Pooling 是步长等于或大于核大小的池化。
通过overlapping pooling,,Top-1和top-5的错误率分别降低了0.4%和0.3%。

6. Data Augmentation

两种方式的数据增强
第一:图像平移 + 水平变换(镜像)
从一张 256×256的图像加上水平变换后随机裁剪224×224。训练集的大小增加了2048倍。可以计算如下:
图像平移 :(256–224)²=32²=1024
水平变换:1024×2 = 2048
在测试时,利用四个角斑加上中心斑及其对应的水平反射(共10个斑)进行预测,并对所有结果进行平均,得到最终分类结果。
第二:Altering the intensity
对训练集进行主成分分析 (PCA),对于每一张训练图像,添加数量:
Quantity of intensity altered
pi 和 λi 是 3×3协方差矩阵的特征向量和特征值的RGB像素值,相应的,αi 是随机变量的意思,均值为0和标准差0.1。
通过增加训练集的大小,将Top-1错误率降低1%以上。

7. Dropout



Dropout
通过在训练过程中使用dropout的这一层,每个神经元都有一定概率不参与前馈传递和反向传播。这样,每个神经元就可以有更大的机会接受训练,而不必太依赖某些非常“强大”的神经元。
在test阶段,没有使用 dropout。
在AlexNet中,前两个完全连接层的概率为0.5。Dropout是一种减少过拟合的正则化方法。

8. Other Details of Learning Parameters

Batch size: 128 Momentum v: 0.9 Weight Decay: 0.0005 Learning rate ϵ: 0.01, reduced by 10 manually when validation error rate stopped improving, and reduced by 3 times.


训练集120万张图片。网络被训练了大约90个周期。在两个NVIDIA GTX 580 3GB gpu上运行5到6天。

9. Results

Error Rate in ILSVRC 2010
对于ILSVRC 2010, AlexNet获得了前1和前5的错误率分别为37.5%和17.0%,优于其他方法。
如果不通过数据扩充对10个patches 进行10次预测取平均,AlexNet的前1次和前5次错误率分别为39.0%和18.3%。


Error Rate in ILSVRC 2010
1个 AlexNet (1 CNN)时,验证错误率为18.2%。
通过对5个AlexNet(5个CNNs)的预测进行平均,错误率降低到16.4%。这是一种已经在LeNet中用于数字分类的boosting 技术
通过在AlexNet中增加一个卷积层(1 CNN*),验证错误率降低到16.6%
通过对2个modfiied AlexNet和5个原始AlexNet(7个CNNs)的预测进行平均*,验证错误率降低到15.4%


Some Top-5 results by AlexNet

B. CaffeNet

CaffeNet is a 1-GPU version of AlexNet. The architecture is:


CaffeNet

我们可以看到AlexNet中的两条路径被合并成一条路径。

需要注意的是,对于CaffeNet的早期版本,池化层和归一化层的顺序是颠倒的,这是偶然的。但是在Caffe提供的当前版本的CaffeNet中,它已经为CaffeNet提供了正确的池化层和归一化化层的顺序。

通过逐一调查每个组件,我们可以知道每个成分的有效性。


References

  1. [2012 NIPS] [AlexNet] ImageNet Classification with Deep Convolutional Neural Networks

    https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

  2. [2014 ACM MM] [CaffeNet] Caffe: Convolutional Architecture for Fast Feature Embedding

    https://ucb-icsi-vision-group.github.io/caffe-paper/caffe.pdf

  3. VERY QUICK SETUP of CaffeNet (AlexNet) for Image Classification Using Nvidia-Docker 2.0 + CUDA + CuDNN + Jupyter Notebook + Caffe

    https://medium.com/@sh.tsang/very-quick-setup-of-caffenet-alexnet-for-image-classification-using-nvidia-docker-2-0-c3b75bb8c7a8

  4. ILSVRC ImageNet Large Scale Visual Recognition Competition

    http://www.image-net.org/challenges/LSVRC/



END

声明:部分内容来源于网络,仅供读者学术交流之目的。文章版权归原作者所有。如有不妥,请联系删除。




    
往期 精彩回顾







Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152855
 
110 次点击