AlexNet是ImageNet LSVRC 2012比赛中分类效果第一的深度神经网络模型,点击链接下载论文http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

1.模型的表现及结果

AlexNet模型主要在ILSVRC2010数据集与ILSVRC2012数据集上进行了训练与测试。在2012年的测试集上,模型取得top-5 error 15.3%,比第2名26.2%高了不少。由于ILSVRC2010的测试集的标签可用,AlexNet在2010测试集上[top-1error 37.5%,top-5 error 17.0%],比当时的第一名[top-1 error 45.7%,top-5 error 25.7%]效果好了不少。


2.数据集

ILSVRC2012的数据集约120万张图像,共包含1000个类。对图像数据集进行的预处理包括:

  (a) 统一所有的图像大小为256x256。将图像的短边缩放为256,然后截取缩放后的图像中心256x256的图像;

  (b) 对缩放后的 256*256 训练图像统计均值,并对所有图像减去均值。具体实现时并不像论文所写的计算每个像素的均值,而是统计所有图像的RGB均值[r,g,b],并在训练以及测试时减去这个均值[r,g,b]。网络上有预训练好的AlexNet模型代码,其中训练集的RGB均值为[124., 117., 104.]。

  训练集与测试集的图像不参与均值的计算,但是会进行缩放,并且减去均值。

数据扩增部分采取的操作:

  详见第4部分。


3.网络结构

3.1 AlexNet由8层神经网络层组成,分别是 input -> { 卷积层1 -> 卷积层2 -> 卷积层3 -> 卷积层4 -> 卷积层5 -> FC6 -> FC7 -> FC8 } -> softmax。网络的输入是[N, 227, 227, 3],图像的大小是[227, 227, 3]。

输入层:

输入: [227x227x3]

第1层:conv1 -> relu -> norm1 -> max pool1

conv1:96个11x11 filter, stride=4, pad=0. output=[55x55x96]

max pool1:3x3 filter, stride=2. output=[27x27x96]

第2层:conv2 -> relu -> norm2 -> max pool2

conv2: 256个5x5 filter, stride=1, pad=2. output=[27x24x256]

max pool2: 3x3 filter, stride=2. output=[13x13x256]

第3层:conv3 -> relu

conv3: 384个3x3 filter, stride=1, pad=1. output=[13x13x384]

第4层:conv4 -> relu

conv4: 384个3x3 filter, stride=1, pad=1. output=[13x13x384]

第5层:conv5 -> relu -> max pool5

conv5: 256个3x3 filter, stride=1, pad=1. output=[13x13x256]

max pool5: 3x3 filter, stride=2. output=[6x6x256]

第6层:

FC6 -> relu -> dropout 6, 4096个神经元

第7层:

FC7 -> relu -> dropout 7, 4096个神经元

第8层:

FC8, 1000个神经元

3.2 神经网络层的说明,按照它们的重要程度的顺序进行

(a) Relu非线性

神经元的输出函数一般是tanh(x)或者sigmoid(x),本文使用Relu非线性函数 f(x) = max(0, x). 在利用梯度下降进行训练时,饱和非线性函数(tanh,sigmoid)比非饱和非线性函数(relu)速度更慢。使用relu的深层卷积网络比使用tanh的网络训练要快上几倍。

(b) Training on GPUs

GTX580 GPU内存3GB,在两块这样的GPU上进行训练,利用并行的方式。

(c) Local Response Normalization(LRN)

Relu已经不需要normalization就可以防止饱和现象,但是本文发现LRN依然可以帮助提升模型的泛化性能。本文的LRN如下,

其中 aix,y 含义是第 i 个卷积核在(x,y)处的输出经过 relu 的结果,bix,y 指的是aix,y 经过LRN后的结果。

n是邻近的n个卷积核输出,卷积核的书序是训练之前就人为确定的,N是本层的所有卷积核数目。k,n,α,β是超参数,由验证集决定,训练中使用 k = 2, n = 5, α = 10-4β = 0.75

LRN分别减少模型的top-1 error 1.4%和top-5 error 1.2%。

(d) Overlapping Pooling

常规的pooling都是 z=2, s=2, 本文使用z=3, s=2,所以pooling时会有重叠现象,这减少模型的top-1 error 0.4% 和 top-5 error 0.3%,而且观察到重叠池化不易过拟合。

3.3 损失函数(优化目标)

AlexNet模型的优化目标是 最大化多类逻辑回归,等价于最大化交叉熵(maxmizing the average cross training case of the log-probability of the correct label under the prediction distribution)。


4. 减少过拟合

整个模型大概有6000万的参数,主要采用2种方法减少过拟合。

4.1 数据扩增(Data Augmentation)

减少模型的过拟合最简单与常用的方法就是人工的扩增数据集。本文使用的扩增图像数据的方法计算简单,所以新增的图像无须提前存储在硬盘上(即可以随时生成)。

  第一种是图像平移与水平翻转,训练时,在256x256图像上取 224x224 大小的图像以及它们的水平翻转图像,因此一张图像可以扩展到 (256-224)*(256-224)* 2 = 2048张,数据集可以扩展到2048倍。 实际都是取227x227的图像作为模型的输入,因此2048倍变为(256-227+1)*(256-227+1)* 2 =1800,这样就扩增了数据集1800倍。

  测试时,取 256x256 图像的4个角与中心的224x224图像以及它们的水平翻转图像共10张,输入模型后,将softmax层在这10个图像上的预测平均值作为原图像的预测。

  第二种是改变训练集的图像在RGB通道的值。本文对训练集图像的RGB通道像素执行PCA,将PCA的特征值乘上随机量,随机量是从均值为0,标准差0.1的高斯分布中取的。

原图像 = [p1, p2, p3] [α1, α2, α3]T,加入随机量之后图像 = [p1, p2, p3] [α1λ1, α2λ2, α3λ3]T,λ就是随机量。

4.2 Dropout

训练过程中,以概率p使隐层中的神经元的输出为0,则神经元就被 dropout了,它们的输出不会影响到前向传播,也不会参与BP。每次迭代都有不同的神经元被dropout,可以看作是模型得到不同结构的网络,这些网络共享权重。Dropout使得一个神经元的输出不能依赖于特定的神经元,减少了神经元之间复杂的互适应关系,使得模型学到的特征更加健壮。

测试时,不使用dropout,全部神经元参与预测,但是所有神经元的输出 x 0.5。

本文在全连接层的前2层使用dropout技术,可以缓解过拟合问题。但是dropout使得迭代次数加倍才能收敛。


5. 模型实现的一些细节

5.1 使用SGD优化模型,batch_size=128, momentum=0.9,weight_decay=0.0005,

i 是迭代次数,ν是momentum,ε是学习率,<φL/φω|ωi>是第i个batch Di的关于ωi偏导的平均

5.2 初始化参数

  每层的权重w初始化:均值=0,标准差=0.01的高斯分布

  第2,4,5层,全连接层 的偏差biases初始化:全1

  其余层的偏差biases:全0

5.3 学习率

初始学习率0.01。当验证集精度不再增加时,就手动的将学习率减小10倍,在训练停止前学习率减小了3次(学习率1e-5)。总共进行了90个epoch的训练,在两块NVIDIA GTX580 3GB GPU上面运行了5~6天。


6. 结果

6.1 模型在ImageNet数据集上的效果

6.2 模型评估

第一个图可视化显示了与图像紧邻的卷积核学到的特征。

第2个图显示了图像经过模型后产生的 (FC-7)4096维特征,如果两个图像的4096维特征的欧氏距离比较近,那么模型就认为这两个图像在全局水平上比较相似(内容相似,类别相同等...)。

第1层的96个卷积核直接从图像上学到的特征。由于两个GPU分开连接,GPU1上的卷积核主要学到颜色无关的特征,而GPU2主要学到颜色相关的特征。每次训练都是这种特征差异,而且与随机初始化无关。

左边是ILSVRC-2010的8张图像,每张图像下面的黑色字体是图像的正确标签,紧接着的下面是模型预测的图像的前5个最有可能的标签。红色标签标示模型的预测正确(top-5)。

右边的第一列是ILSVRC-2010测试集的图像,剩下的6列是训练集中的图像,经过模型产生的特征4096维特征(FC-7),与测试集图像的4096维特征的欧氏距离最近的6个图像。

计算两个4096维特征的欧氏距离,计算效率比较低,但是可以训练自动编码机(AE)将长向量压缩为短二维码,这可以作为一个比较好的图像检索方法。


7. 讨论

在视频处理方面使用更深更大的卷积网络,因为视频中包含了静态图像所不具备的丰富的时空信息。

AlexNet模型的解析及tensorflow实现的更多相关文章

  1. flex盒模型 详细解析

    flex盒模型 详细解析 移动端页面布局,采用盒模型布局,效果很好 /* ============================================================    ...

  2. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)

    前面文章介绍了ASP.NET MVC中的模型绑定和验证功能,本着ASP.NET MVC没有魔法的精神,本章内容将从代码的角度对ASP.NET MVC如何完成模型的绑定和验证进行分析,已了解其原理. 本 ...

  3. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)

    上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...

  4. 基于Caffe训练AlexNet模型

    数据集 1.准备数据集 1)下载训练和验证图片 ImageNet官网地址:http://www.image-net.org/signup.php?next=download-images (需用邮箱注 ...

  5. AlexNet模型

    AlexNet模型 <ImageNet Classification with Deep Convolutional Neural Networks>阅读笔记 一直在使用AlexNet,本 ...

  6. [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念

    [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念 目录 [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念 0x00 摘要 0x01 矩阵乘积 1.1 matmul pr ...

  7. [阿里DIN]从模型源码梳理TensorFlow的形状相关操作

    [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 目录 [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 0x00 摘要 0x01 reduce_sum 1.1 reduc ...

  8. 吴裕雄 python 神经网络——TensorFlow实现AlexNet模型处理手写数字识别MNIST数据集

    import tensorflow as tf # 输入数据 from tensorflow.examples.tutorials.mnist import input_data mnist = in ...

  9. AlexNet 网络详解及Tensorflow实现源码

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 图片数据处理 2. 卷积神经网络 2.1. 卷积层 2.2. 池化层 2.3. 全链层 3. AlexNet 4. 用Tensorflow搭 ...

随机推荐

  1. lightoj 1095 - Arrange the Numbers(dp+组合数)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题解:其实是一道简单的组合数只要推导一下错排就行了.在这里就推导一下错排 ...

  2. windows10环境下安装深度学习环境anaconda+pytorch+CUDA+cuDDN

    步骤零:安装anaconda.opencv.pytorch(这些不详细说明).复制运行代码,如果没有报错,说明已经可以了.不过大概率不行,我的会报错提示AssertionError: Torch no ...

  3. 【Offer】[26] 【树的子结构】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入两棵二叉树A和B,判断B是不是A的子结构.图中右边的树是左边的子结构  思路分析 先对树A进行遍历,找到与树B的根结点值相同的节点 ...

  4. 2019最新WEB全栈架构师第八期视频教程

    下载链接:https://www.yinxiangit.com/117.html

  5. SVN中忘记上传自己写的工程,但是IP已经变了的解决方案

    苦于自己没有养成每天下班上传SVN的好习惯,第二天来又发现IP变了,只得把自己写的删掉,记录一下解决方法: 第一个红框中的svn://192.168.0.103/FH是前一天的IP链接地址,结果发现今 ...

  6. Https、OpenSSL自建CA证书及签发证书、nginx单向认证、双向认证及使用Java访问

    0.环境 本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 必须安装nginx,必须安装openssl,(用apt-get upd ...

  7. 线上问题排查神器 Arthas

    线上问题排查神器 Arthas 之前介绍过 BTrace,线上问题排查神器 BTrace 的使用,也说它是线上问题排查神器.都是神器,但今天这个也很厉害,是不是更厉害不好说,但是使用起来非常简单.如果 ...

  8. Peer reports incompatible or unsupported protocol version.

    问题描述 ==> CentOS 操作系统 git clone 项目时出现类似如下错误: fatal: unable to access 'https://github.com/rancher/r ...

  9. Tomcat启动时设置Jdk版本

    1. Window版本Tomcat 到bin下的setclasspath.bat文件,在文件的开始处添加如下代码: set JAVA_HOME=D:\Program Files\Java\jdk1.8 ...

  10. Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

    随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...