目标检测学习笔记8——AlexNet学习与论文解读

文章目录

  • 一、引言
  • 二、摘要
    • 1、介绍
    • 2.数据集
  • 三、网络结构
    • 1. ReLU Nonlinearity
    • 2. Training on Multiple GPUs
    • 3. Local Response Normalization
    • 4. Overlapping Pooling
    • 5. Overall Architecture
  • 四、减少过拟合
    • 1. Data Augmentation
    • 4.2 Dropout
  • 五、学习细节
  • 六、性能

一、引言

AlexNet是2012年ImageNet图像分类竞赛冠军
首次将卷积神经网络CNN深度学习DL用于大规模图像分类。
性能优异,相比之前获得巨大飞跃,是后续一系列优秀网络的奠定者

创新点:

  1. CNN
  2. ReLU
  3. 双GPU模型并行
  4. LRN局部响应归一化
  5. 重叠最大池化
  6. 数据增强
  7. Dropout正则化

二、摘要

训练了一个大而深卷积神经网络去分类ImageNet2010年比赛1千200万张1000个类别的高分辨率图像。实现top-1的37.5%错误率top-5的17.0%错误率。比之前最高水平的网络都好。

所使用的该神经网络有5个卷积层(后接最大池化层)+3个全连接层,有65万个神经元和6千万个参数。

为了使训练更快,使用了非饱和激活函数ReLU双GPU运行。
为了避免过拟合,在全连接层使用正则化方法Dropout

在ILSVRC-2012比赛中,top-5错误率为15.3%,比第二名的26.2%有明显优势。

1、介绍

过去的图像识别方法都是基于机器学习的。
为了提升性能:

  • 收集了更大的数据集
  • 学习了更强大的模型
  • 使用了很好的技术避免过拟合

过去的网络在小数据集上可以刷到很高的分,比如在MINIST手写数字数据集上的错误率能抵御0.3%,但现实世界很复杂,需要更大的数据集。为了在大数据集上学习,我们需要一个更大学习能力的网络。 CNN具备很多优点,可以用于大规模图像识别。CNN的深度、宽度都可以控制这个网络的容量,局部链接、权值共享、下采样具有更少的参数。
该网络使用5个卷积层和3个全连接层。通过实验也发现深度很重要,去掉任何一个卷积层都会有更差的表现。

2.数据集

  • ImageNet:1千500万张标注的高分辨率图像,22000个类别。是人为标注的数据集。
  • ILSVRC(ImageNet Large-Scale Visual Recognition Challenge):是ImageNet数据集的子集,1000个类别。
    训练集:1千200万张图片;
    验证集:5万张图片;
    测试集:15万张图片。

ILSVRC-2010是唯一一年公开了测试集标签的,因此2010年版本的数据是在实验中使用得最多的。

ImageNet包含了大小不一分辨率的数据集,但模型的输入需要固定尺寸256×256,因此需要对数据集进行下采样。

  • 首先缩放图片至最短边为256
  • 从上图裁出中心256×256

预处理:减去训练集图像中每个像素的均值

三、网络结构

网络结构如图2所示。包含8个学习权重的层——5个卷积+3个全连接。接下来介绍该网络的重点部分。先说最重要的。
目标检测学习笔记8——AlexNet学习与论文解读_第1张图片

1. ReLU Nonlinearity

ReLU(修正线性单元)非线形激活函数

目标检测学习笔记8——AlexNet学习与论文解读_第2张图片
以前使用的是饱和激活函数:

  • tanh: f ( x ) = e x − e − x / e x + e − x f(x)=e^x-e^{-x}/e^x+e^{-x} f(x)=exex/ex+ex 双曲正切激活函数

目标检测学习笔记8——AlexNet学习与论文解读_第3张图片

  • Sigmoid: f ( x ) = ( 1 + e − x ) − 1 f(x)=(1+e^{-x})^{-1} f(x)=(1+ex)1
    目标检测学习笔记8——AlexNet学习与论文解读_第4张图片

由上图可知,饱和的激活函数容易梯度消失,而非饱和的激活函数有助于避免梯度消失
经过实验发现,非饱和的激活函数比饱和的激活函数收敛快

  • 数据集规模小,核心问题是防止过拟合;
  • 数据集规模大,核心问题是加快训练

由于ImageNet数据集规模很大,因此核心问题是:加速训练。
由图1可知,ReLU激活函数可以加速训练,比tanh收敛快6倍。
目标检测学习笔记8——AlexNet学习与论文解读_第5张图片

2. Training on Multiple GPUs

多GPU模型并行

由反向传播原理可知,显存中不仅要存储模型参数,还需存储正向传播时每一层整个batch的中间结果。batch size越大,占用显存越大。我们这个网络会对显存造成压力,所以使用双GPU并行的策略

每个GPU各占一半的神经元,而且两个GPU可以读取对方的显存,并行计算。两个GPU只在某些层进行交流,在具体讲解网络结构组成部分会进行具体说明。

双GPU(全参数)的训练时间比单GPU(半参数)更短。
单GPU模型中,最后一个卷积层和全连接层参数数量与双GPU模型相同,因此“半参数”并非真的只有一半。
top-1错误率降低了1.7%,top-5错误率降低了1.2%。

3. Local Response Normalization

LRN局部对比度归一化
该方法在VGG中已经被证明没有什么作用,因此不过多进行讲解。原理是侧向抑制,兴奋的神经元对周围的神经元抑制作用。(强者愈强,弱者愈弱)

该操作就是指:与附近的神经元做归一化
公式:
目标检测学习笔记8——AlexNet学习与论文解读_第6张图片
如下图,n=2,就是和周围的2个神经元做归一化操作。
目标检测学习笔记8——AlexNet学习与论文解读_第7张图片
目标检测学习笔记8——AlexNet学习与论文解读_第8张图片

文章表明, k = 2 , n = 5 , α = 1 0 − 4 , β = 0.75 k=2,n=5,α=10^{-4},β=0.75 k=2,n=5,α=104β=0.75
该操作在ReLU激活函数之后。
top-1错误率降低了1.4%,top-5错误率降低了1.2%。

4. Overlapping Pooling

重叠的池化(池化窗口是重叠的)

这个操作后期也不怎么用了。
池化的作用:

  1. 可以减少尺寸、减少计算量
  2. 防止过拟合
  3. 把噪声去掉
  4. 引入了平移不变性

该文章发现,重叠池化有助于避免过拟合。top-1错误率降低了0.4%,top-5错误率降低了0.3%。

5. Overall Architecture

整体网络架构

上下各一个GPU,在C2和C3层两个GPU可相互通信,是全部连接的,C5和F1、 F1和F2、F2和F3也是全部连接,其余都是各自一半连接。
目标检测学习笔记8——AlexNet学习与论文解读_第9张图片
5个卷积层+3个全连接层,分类1000类。
目标检测学习笔记8——AlexNet学习与论文解读_第10张图片

四、减少过拟合

1. Data Augmentation

数据增强

人为地去扩充数据集,扩充的数据集无需硬盘存储,且有CPU负责。GPU在上一批训练时,CPU已经将下一批的准备好了。有两种方法:
(1) 平移、水平翻转
训练阶段:假设需要224×224的图片,输入图片是256×256。256-224=32,所以有32×32个位置可以裁剪,并且对裁剪所得图片进行水平翻转。因此有32×32×2=2048个图片。裁出来的这些图片虽然都很相像,但是可以有效防止过拟合。
测试阶段:从左上角、左下角、右上角、右下角以及中心位置裁出5张图片,并进行翻转,因此共10张图片。取结果的平均。

(2)颜色光照变换
这一部分我不是很理解,感觉就是对图像RGB像素值进行主成分分析。该方法近似地捕捉原始图像的一些重要属性,对象的身份不受光照的强度和颜色变化影响。

4.2 Dropout

多个不同的模型集合可有效防止过拟合,但对大型网络不太经济。

  1. 在训练阶段:随机掐死一半的神经元,将其值置为0,阻断该神经元的前向、反向传播。
  2. 在预测阶段,保留所有神经元,预测结果乘以0.5。

在F1和F2层使用该操作。虽然使用dropout操作需要double训练轮次,但是也很值得。
目标检测学习笔记8——AlexNet学习与论文解读_第11张图片

五、学习细节

  • batch size=128
  • momentum=0.9(动量的目的是防止困在鞍点和局部最优点)
  • weight decay=0.0005(它不仅仅可以有正则效果,还可以减少错误率)
    目标检测学习笔记8——AlexNet学习与论文解读_第12张图片
  • 初始化权重均值为0,标准差为0.001
  • biases在2、4、5卷积层和全连接层初始化为1
  • biases在其他层的初始化为0
  • 学习率初始化为0.01,在训练没有进展时,除以10;减少3次。
  • 训练90轮

六、性能

目标检测学习笔记8——AlexNet学习与论文解读_第13张图片
目标检测学习笔记8——AlexNet学习与论文解读_第14张图片

你可能感兴趣的:(目标检测,深度学习,神经网络,pytorch)