热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于卷积神经网络的ImageNet分类器

本文中,作者训练了一个大型的深度卷积神经网络。作者将2010年ILSVRC挑战杯包含的120万高分辨率图像分类100种不同的类别。在测试数据方面,作者取得了远超过去最佳水平的效果,

基于卷积神经网络的ImageNet分类器
基于卷积神经网络的ImageNet分类器
基于卷积神经网络的ImageNet分类器

本文中,作者训练了一个大型的深度卷积神经网络。
作者将2010年ILSVRC挑战杯包含的120万高分辨率图像分类100种不同的类别。
在测试数据方面,作者取得了远超过去最佳水平的效果,分别为17%和37.5%的top-5和top-1错误率。
有着6000万参数和65万神经元的神经网络由5个部分连接Max池化层的卷积层和3个全连接层连带着1000路softmax组成。
为了加快训练速度,作者采用非饱和神经元和一个高效的卷积操作的GPU执行器。
为了降低全连接层的过拟合,作者采用了一项近期发展的已被证明有效的名为dropout的正则化方法。
基于卷积神经网络的ImageNet分类器
ImageNet是一个属于大约有22000类别的超过1500万标记的高分辨率图像的数据集。
图片是从网上收集的并且被人工添加标识。
ILSVRC-2010是ILSVRC的唯一可用的有标识的测试集版本也是作者使用的版本,而它的测试集标签无法获取的。
在ImageNet上,习惯上报告两种错误率:top-1和top-5,其中top-5错误率是正确标签不在被模型认为最可能的五个标签之中的测试图像的分数。
ImageNet由可变分辨率的图像组成,而我们的系统需要恒定的输入维度。因此,作者将图像欠采样到256*256的固定分辨率。给定一个矩形图像,首先重新缩放图像,使得短边的长度为256,然后从结果图像中裁剪出中心256 * 256的部分。
除了从每个像素中减去训练集上的平均**值之外,作者没有以任何其他方式预处理图像。 所以作者在像素的(中心化的)原始的RGB值上训练了作者的网络。基于卷积神经网络的ImageNet分类器

cnn总体构架
如图2所示,这个网络包含八个带权重的层; 前五个是卷积层,其余三个全连接层。最后全连接层的输出被馈送到1000路softmax,其产生1000个类别标签上的分布。我们的网络最大化多项逻辑回归函数,这相当于在预测分布下最大化正确标签的对数概率的训练案例的平均值。

基于卷积神经网络的ImageNet分类器

图2:总体架构图,明确显示两个GPU之间职责的划分。一个GPU运行图形顶部部分,另一个运行图形底部部分。GPU仅在特定层通信。网络的输入是150,528维,网络剩余层中的神经元数为253,440-186,624-64,896-64,896-43,264-4096-4096-1000。
基于卷积神经网络的ImageNet分类器
第二,第四和第五卷积层的内核仅与位于同一GPU上的前一层中的那些内核映射相连。第三卷积层的内核连接到第二层中的所有内核映射。全连接层中的神经元连接到前一层中的所有神经元。响应标准化层连在第一和第二卷积层。3.4节中描述的最大池化层连在响应规范化层以及第五卷积层。将ReLU非线性应用于每个卷积和完全连接层的输出。
第一卷积层用96个大小为11 * 11 * 3的过滤器以4个像素的步幅卷积224 * 224 * 3输入图像。第二卷积层将第一卷积层的(响应归一化和池化)输出作为输入,并用大小为256×5×48的过滤器对其进行卷积。第三,第四和第五卷积层彼此连接而没有任何池化层或标准化层。第三卷积层具有连接到第二卷积层的(响应归一化和池化)输出的大小为3 * 3 * 256的384个过滤器。第四卷积层具有384个大小为3 * 3 * 192的过滤器,并且第五卷积层具有大小为3 * 3 * 192的256个过滤器。全连接层各有4096个神经元。
1.去建模一个神经元的输出——作为以x为输入的函数f的标准方式是f(x)=tanh(x)或f(x)=sigmoid(x)。就梯度下降训练时间而言,这些饱和非线性即f(x) = max(0; x)比非饱和非线性慢得多。遵循Nair和Hinton,我们将具有这种非线性的神经元称为整流线性单位(ReLUs)。使用ReLU的深度卷积神经网络的训练速度比使用tanh同等规模的神经网络快上几倍。图1展示了这一点,图中显示了特定四层卷积网络在CIFAR-10数据集上达到25%训练误差所需的迭代次数。基于卷积神经网络的ImageNet分类器
图1:具有ReLUs(实线)的四层卷积神经网络在CIFAR-10上的训练错误率达到25%,比具有tanh神经元(虚线)的网络快6倍。每个网络的学习率都是独立选择的以尽可能快地训练。没有采用任何形式的正规化。这里展示的效应的大小随网络架构而变化,但具有ReLU的网络一直学习速度比饱和神经元快几倍。
2:在多GPU上训练
单个GTX 580 GPU只有3GB内存,这限制了可以在其上训练的网络的最大尺寸。事实证明,120万个训练样例足以训练那些尺寸太大而不适合一个GPU的网络。因此,我们将网络分布在两个GPU上。目前的GPU特别适合于跨GPU并行化,因为它们能够直接读写对方的内存,而无需通过主机内存。
作者所采用的并行化方案基本上在每个GPU上放置了一半的内核(或神经元),还有一个额外的技巧:GPU仅在某些层次上进行通信。这意味着,例如,第3层的内核从第2层的所有内核映射中获取输入。
但是,第4层中的内核只能从驻留在同一GPU上的第3层中的那些内核映射接收输入。选择连通性模式是交叉验证的一个问题,但这使我们能够精确调整通信量,直到它达到计算量的可接受部分。与一个GPU上训练的每个卷积层内核数量减少一半的网络相比,这个方案分别将我们的top-1和top-5的错误率分别降低了1.7%和1.2%。双GPU网络的训练时间比单GPU网络的训练时间稍少。
3:局部响应归一化
作者发现以下的局部标准化方案有助于泛化。式中,ax,yi表示内核i在位置(x,y)上计算的**值,然后通过ReLU非线性变化得到响应的标准化**值bx,yi:
基于卷积神经网络的ImageNet分类器
总和运行在n个映射在相同空间位置上的“相邻的”内核,N是该层中核的总数。内核映射的排序当然是任意的,并且在训练开始之前确定。这种响应归一化实现了一种受真实神经元中发现的类型所激发的横向抑制形式,造成神经元输出的大数值的**值的竞争使用不同的内核。常量k、n、α和β是超参数,其值是使用验证集确定的; 我们取k = 2, n = 5,α= 10-4和β= 0.75。我们在应用某些层的ReLU非线性后应用了这种规范化。
作者的方案被更准确地称为“亮度标准化”,因为我们不会减去平均**值。响应规范化将我们的top-1和top-5的错误率分别降低1.4%和1.2%。我们还验证了这种方案在CIFAR-10数据集上的有效性:没有标准化的四层CNN实现了13%的测试错误率,而有标准化的为11%。
4.重叠池化
CNN中的池化层概括了相同内核映射中相邻神经元组的输出。一般地,被邻接的池化单元总结的邻居节点是没有重复的。
更准确地说,池化层可以被认为是由间隔s个像素的池化单元的网格组成,每个总结值以集中单元的位置为中心的大小为z * z的邻域。如果我们设置s = z,我们就可以获得CNN中常用的传统局部池。
如果我们设置s 结果:
与产生等效尺寸的输出的非重叠方案s = 2和z = 2相比,该方案分别将top-1和top-5的错误率分别降低了0.4%和0.3%。我们通常在训练期间观察到重叠池的模型发现稍微难以过拟合。
基于卷积神经网络的ImageNet分类器
1:数据增强
最简单最常用的减少过拟合的方法就是利用标签保存变形技术人工放大数据集。作者采取了两种不同形式的数据放大,它们都允许在仅对原图做少量计算的情况下产生变形的新图,所以变形后的新图无需存储在硬盘中。在我们的实现中,变形的新图由Python在CPU上计算产生,与此同时,GPU仍在计算其他的之前批次的图片。所以这种放大数据集的方式是很高效很节省计算资源的。

第一种形式的数据增强包括生成图像平移和水平反射。我们通过从256 * 256个图像中提取随机224 * 224块(及其水平反射)并在这些提取的块4上训练我们的网络来实现这一点。这使得我们的训练集的规模增加了2048倍,尽管由此产生的训练样例当然是高度相互依赖的。如果没有这个方案,我们的网络会遭受大量的过度训练,这将迫使我们使用更小的网络。在测试时间,网络通过提取五个224*224方块(四个角方块和中心方块)以及它们的水平反射(因此共有十个方块),并对网络的softmax层对十个方块进行的预测进行平均。

第二种形式的数据增强包括改变训练图像中RGB通道的强度。具体来说,我们在整个ImageNet训练集的RGB像素值集上执行PCA。 对于每个训练图像,我们添加多个找到的主成分,大小与相应的特征值成比例,乘以从均值为零和标准差为0.1的高斯绘制的随机变量。因此,对于每个RGB像素 Ixy =[IxyR , IxyG , IxyB ]T我们加入的值如下:
基于卷积神经网络的ImageNet分类器
其中,pi 和λi分别是第i个特征向量和第i个3x3RGB协方差矩阵的本征值。而αi是前面所述的随机变量。对于一张特定的训练图片的所有像素,每个αi仅被抽取一次,直到这张图像再次被用于训练才会再次提取随机变量。这一方案能够近似地捕捉原始图像的一些重要特征,即那些不随光线强度与颜色变化的物体特质。这一方法把top-1错误降低了1%。
2:Dropout
降低测试错误的一种有效方法是联立多种不同模型的预测结果,但这种方法对于大型神经网络来说似乎太昂贵了,需要好几天去训练。
然而,有一种非常高效的模型联立方法,只需要在训练过程中消耗一到两个因子。这种新近研究出来的技术叫做“DROPOUT”,它会以50%的概率将每个隐藏层神经元置零。以这种方法被置零的神经元不再参与前馈和BP过程。所以每次一个输入进来之后,这个神经网都会被置于不同的结构,但所有这些结构共享同一套参数。
这种技术降低了神经元间相互适应的复杂性,因为每个神经元都不可能依赖其他特定某个神经元的表现。因此,模型***学习更加健壮的特征,使之能够被许多不同的随机神经元子集使用。在测试中,我们使用所有的神经元,但是把它们的输出乘以0.5,这是一种对大量dropout网络产生的预测分布的几何均值的合理近似。
作者在图2中的前两个全连接层使用dropout。否则,我们的网络会表现出严重的过拟合。dropout大概会让达到收敛所需要的迭代次数翻倍。
基于卷积神经网络的ImageNet分类器
作者每个训练批次有128个样本,在其上采用随机梯度下降进行训练。设置增量为0.9,权值衰退因子为0.0005。作者发现小的权重衰退因子对于模型学习很重要,换句话说,权重衰退因子在这里不光是个正则化因子,它还可以减少模型错误。权值w的更新规则是:

基于卷积神经网络的ImageNet分类器

其中,i是迭代次数,v是增量,ε是学习速率。
我们将每一层的权值利用均值为0方差为0.01的高斯分布随机初始化,我们用常数1初始化第2、4、5卷积层和全连接隐藏层的偏置神经元(常数单元)。这种初始化通过向ReLUs提供正输入,加速了学习的早期过程。我们将其它层的偏置神经元初始化为0。
在整个学习过程中,作者在所有层都使用人工调整的相等的学习速率。作者采用的启发式方法是当验证误差不在降低时,就把当前的学习速率除以10。学习速率初始化为0.01,并在结束前减小3次。(做三次除以10)作者大概用120万张图片把我们的网络训练了约90轮,在两个NVIDIA GTX 580 3GB GPU上这大概要5到6天。
基于卷积神经网络的ImageNet分类器
我们在ILSVRC-2010数据集上的实验结果归纳在表1里。我们的网络top-1和top-5测试误差分别是37.5%和17.0%。在此之前ILSVRC- 2010数据集上的最好的比赛纪录是对在不同特征上训练的留个稀疏自编码器取平均,top-1和top-5测试误差分别是47.1%和28.2%。
之后,已出版的最佳结果是一种对两个在不同取样密度的费舍向量上训练的分类器取平均的方法,结果是45.7%和25.7%。

基于卷积神经网络的ImageNet分类器

表1:ILSVRC-2010测试集的结果比较。斜体字是其他人取得的最好结果。
作者在表2中展示了我们的结果。
在这一段的余下部分,我们使用验证误差代替测试误差,因为根据作者的经验,它们的差距不会大于0.1%(见表2)。本文描述的CNN实现了18.2%的top-5错误率。五个相似CNN的预测值的平均值的误差率为16.4%。 培训一个CNN,在最后一个池层上增加一个额外的第六卷积层,对整个ImageNet 2011秋季赛发布数据(15M图像,22K类别)进行分类,然后在ILSVRC-2012上对其进行“微调”,则错误率为16.6%。对整个2011年秋季赛发布数据预训练的两个CNN与上述五个CNN进行的平均预测给出了15.3%的错误率。 第二好的比赛录入达到了26.2%的错误率,其方法是对从不同类型的密集采样特征计算出的FV进行训练的几个分类器的预测进行平均。

基于卷积神经网络的ImageNet分类器

表2:ILSVRC-2012验证和测试集错误率的比较。斜体字是其他人取得的最好结果。带有*的是“预先训练好的”,用于对整个ImageNet 2011秋季赛进行分类。
最后,作者还在2009年秋季版ImageNet上报告了10,184个类别和890万个图像的错误率。 在这个数据集中,作者遵循文献中使用一半图像进行训练和一半进行测试的惯例。 由于没有建立测试集,作者的分割必然不同于先前作者使用的分割,但这并不会对结果产生显着影响。
结果:
在这个数据集中,作者的前1和前5的错误率分别是67.4%和40.9%,通过上面描述的网络获得,但是在最后的池化层上具有额外的第六卷积层。 该数据集的最佳公布结果是78.1%和60.9%。

定量分析
图3显示了网络的两个数据连接层学习的卷积核。 该网络已经学习了各种频率和方向选择内核,以及各种彩色斑点。请注意两个GPU表现除出了不同的特性,这是3.5节介绍的限制互联方式的结果。GPU 1上的内核基本上不在意颜色,而GPU 2 上的内核就是色彩专家。这种专一性每次都会出现,与权值的随机初始化无关(GPU重新编号)。
基于卷积神经网络的ImageNet分类器

图3:96个通过第一个卷积层学习224x224x3的图片得到的11x11x3的卷积内核。上面48个和下面48个分别由两个GPU学习得到,详见6.1.
基于卷积神经网络的ImageNet分类器
图4 :(左)8个ILSVRC-2010测试图像和我们模型最可能考虑的5个标签。每张图像下面都写有正确的标签,并且标有正确标签的概率也显示为红色条(如果是 恰好在前5名)。(右)第一列有5个ILSVRC-2010测试图像。其余的列显示了六个训练图像,其产生与测试图像的特征向量具有最小欧几里德距离的最后隐藏层中的特征向量。
在图四的左侧,我们定量地展示了对于8张图片网络所学习到的前五个预测。注意对于偏离中心的物体,比如左上角的那只螨虫,网络依然可以识别出来。大多数前五个标签看起来都比较合理,比如,只有其他类别的猫科动物才被判别是豹子的可能标签。在一些例子中,比如栅栏,樱桃,确实对于究竟该关注哪个物体存在歧义。
另一个研究可视化网络所学知识的方法是考虑最后一个4096维隐层所**的特征向量。如果两张图的向量欧氏距离很小,可以说很大程度上神经网络认为它们是相似的。图4展示了五张测试集中的图片,以及按照上述方法找出的分别与这五张图最相似的6张训练集图片。请注意,在像素级别,检索到的训练图像在L2中通常不会与第一列中的查询图像接近。 例如,检索到的狗和大象出现在各种姿势中。 作者在补充材料中提供更多测试图像的结果。
我的感悟:
本文是作者使用机器学习方法解决物体识别的问题。为了解决这个问题,作者收集了更大的数据集(ImageNet),用更好地技术去拟合,努力去减少识别的错误率。在学习的模型方面,作者选择了卷积神经网络(CNN),选择了CNN之后,作者也运用了四个框架来分析:1.ReLU的非线性;2.在多GPU上训练;3.局部响应归一化;4.重叠池化。
本文作者训练一个基于ImageNet的用于ILSVRC-2010和ILSVRC-2012比赛的数据子集的最大的卷积神经网络并且在这些数据集上取得了迄今为止最好的结果。作者编写了一个高度优化的2D卷积的GPU实现和训练卷积神经网络我们公开使用的所固有的所有其他操作。
基于卷积神经网络的ImageNet分类器
作者的最终网络包含五个卷积和三个完全连接的层。
此外,作者为了拟合的更好,还做了减少过度拟合。其中两个重要的方法是
1.数据增强,2.Dropout
数据增强方面:
第一种形式包括生成图像平移和水平反射。作者通过从256 * 256个图像中提取随机224 * 224块(及其水平反射),在测试时间,网络通过提取五个224*224方块(四个角方块和中心方块)以及它们的水平反射(因此共有十个方块),并对网络的softmax层对十个方块进行的预测进行平均。
第二种形式包括改变训练图像中RGB通道的强度。具体来说,我们在整个ImageNet训练集的RGB像素值集上执行PCA。
Dropout方面:
Dropout会以50%的概率将每个隐藏层神经元置零。这种技术降低了神经元间相互适应的复杂性,因此,模型***学习更加健壮的特征。基于卷积神经网络的ImageNet分类器
此外在训练细节方面,作者发现小的权重衰退因子对于模型学习很重要,换句话说,权重衰退因子在这里不光是个正则化因子,它还可以减少模型错误基于卷积神经网络的ImageNet分类器基于卷积神经网络的ImageNet分类器
在这里插入图片描述
作者的结果:左侧的图我们可以发现,作者找到了卷积神经网络里最小的错误率。右侧的图我们也可以看大第一列有5个ILSVRC-2010测试图像。其余的列显示了六个训练图像,可以看出作者的图片分类和识别工作已经基本完成。
同时作者也发现,一个大的深层卷积神经网络能够使用纯监督学习在具有高度挑战性的数据集上实现破纪录的结果。值得注意的是,如果单个卷积层被删除,我们的网络性能就会下降。


推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 本文将深入探讨生成对抗网络(GAN)在计算机视觉领域的应用。作为该领域的经典模型,GAN通过生成器和判别器的对抗训练,能够高效地生成高质量的图像。本文不仅回顾了GAN的基本原理,还将介绍一些最新的进展和技术优化方法,帮助读者全面掌握这一重要工具。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • Python默认字符解析:深入理解Python中的字符串处理
    在Python中,字符串是编程中最基本且常用的数据类型之一。尽管许多初学者是从C语言开始接触字符串,通常通过经典的“Hello, World!”程序入门,但Python对字符串的处理方式更为灵活和强大。本文将深入探讨Python中的字符串处理机制,包括字符串的创建、操作、格式化以及编码解码等方面,帮助读者全面理解Python字符串的特性和应用。 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 如何使用Python去除字符串中的非中文字符[Python编程技巧]
    在 Python 中,可以通过正则表达式来实现去除字符串中的非中文字符。具体方法是使用 `re` 模块中的 `re.sub()` 函数,配合正则表达式 `[^u4e00-u9fa5]` 来匹配并替换掉所有非中文字符,从而保留字符串中的中文部分。这种方法简洁高效,适用于多种文本处理场景。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 本文深入解析了Python在处理HTML过滤时的实现方法及其应用场景。通过具体实例,详细介绍了如何利用Python代码去除HTML字符串中的标签和其他无关信息,确保内容的纯净与安全。此外,文章还探讨了该技术在网页抓取、数据清洗等领域的实际应用,为开发者提供了宝贵的参考。 ... [详细]
author-avatar
蓝星星空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有