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

用于图像识别的深度残差学习

DeepResidualLearningforImageRecognition(ResNet)用于图像识别的深度残差学习摘要由于越深的神经网络训练起来越来困难,所以本文提出了

Deep Residual Learning for Image Recognition(ResNet)
用于图像识别的深度残差学习
摘要
由于越深的神经网络训练起来越来困难,所以本文提出了一种残差学习框架,用于简化网络层次比较深的模型。这个ResNet框架使得网络层次可能根据输入来学习残差函数而非原始函数(unreferenced functions),本文已经证明,这些残差网络的优化更加简单,并且可以是的更深的层来获得更高的准确率,这些残差组合模型在ImageNet测试集上的错误率仅3.57%,这个结果在2015年的ILSVRC分类任务上获得了第一名的成绩。
1、introduction
(1)随着网络越来越深,梯度就会出现爆炸或者消失。
解决的办法:
在初始化的时候要做好一点,就是权重在随机初始化的时候,权重不要特别大也不要特别小。
在中间加入一些normalization,包括BN(batch normalization)可以使得校验每个层之间的那些输出和他的梯度的均值和方差相对来说比较深的网络是可以训练的。
文章提出出现精度变差的问题不是因为层数变多了,模型变复杂了导致的过拟合,而是因为训练误差也变高了(overfitting是说训练误差变得很低,但是测试误差变得很高),训练误差和测试误差都变高了,虽然网络是收敛的,但是好像没有训练出一个好的结果(红线在黄线上面,就是网络变深,错误率下降)
(2)深入讲述深度增加之后精度也会变差
考虑一个比较浅一点的网络和它对应的比较深的神经网络(在浅的网络中再多加一些层进去),如果浅的神经网络效果还不错的话,深的神经网络是不应该变差的,这是因为深的网络新加的那些层,总是可以把这些层学习的变成一个identity mapping(恒等映射作为跳跃连接和加和的激活项,能使得前向和反向的信号能直接在模块之间传播)但是实际情况是,虽然理论上权重是可以学习成这样,但是实际上做不到:假设让SGD去优化,深层学到一个跟那些浅层网络精度比较好的一样的结果,上面的层变成identity(相对于浅层神经网络,深层神经网络中多加的那些层全部变成identity),这样的话精度不应该会变差,应该是跟浅层神经网络是一样的,但是实际上SGD(梯度下降法)找不到这种最优解。
这篇文章提出显式地构造出一个identity mapping,使得深层的神经网络不会变的比相对较浅的神经网络更差,它将其称为deep residual learning framework
在这里插入图片描述图1
要学的东西叫做H(x)(红色),假设现在已经有了一个浅的神经网络(蓝色),它的输出是x,然后要在这个浅的神经网络上面再新加一些层,让它变得更深。新加的那些层不要直接去学H(x),而是应该去学H(x)-x,x是原始的浅层神经网络已经学到的一些东西,新加的层不要重新去学习,而是去学习学到的东西和真实的东西之间的残差,最后整个神经网络的输出等价于浅层神经网络的输出x和新加的神经网络学习残差的输出之和,将优化目标从H(x)转变成为了H(x)-x。这样的好处是:只是加了一个东西进来,没有任何可以学的参数,不会增加任何的模型复杂度,也不会使计算变得更加复杂,而且这个网络跟之前一样,也是可以训练的,没有任何改变。
解释:什么是残差
ResNet提出了两种mapping:
一种是identity mapping,指的就是图1中”弯弯的曲线”,
另一种residual mapping,指的就是除了”弯弯的曲线“那部分,所以最后的输出是 y=F(x)+x

2、相关工作(relateed work)
(1)、残差连接如何处理输入和输出的形状是不同的情况:
第一个方案是在输入和输出上分别添加一些额外的0,使得这两个形状能够对应起来然后可以相加;
第二个方案是之前提到过的全连接做投影,到卷积上是通过一个叫做11的卷积层,这个卷积层的特点是在空间维度上不做任何处理,主要是在通道维度上做改变。所以只要选取一个11的卷积使得输出通道是输入通道的两倍,这样就能将残差连接的输入和输出进行对比了(???)。在ResNet中,如果把输出通道数翻了两倍,那么输入的高和宽通常都会被减半,所以在做11的卷积的时候,同样也会使步幅为2,这样的话使得高宽和通道上都能够匹配上
(2)、implementation中讲了实验的一些细节
把短边随机的采样到256和480
使用了颜色的增强(AlexNet上用的是PCA,现在我们所使用的是比较简单的RGB上面的,调节各个地方的亮度、饱和度等)类似PS的工作
批量大小是56,学习率是0.1,然后每一次当错误率比较平的时候除以10。
模型训练了60
10^4个批量
在测试的时候使用了标准的10个crop testing(给定一张测试图片,会在里面随机的或者是按照一定规则的去采样10个图片出来,然后再每个子图上面做预测,最后将结果做平均)
在这里插入图片描述
图二
3、Experiments
在这里插入图片描述
图三
上表是整个ResNet不同架构之间的构成信息(5个版本)
第一个77的卷积是一样的
接下来的pooling层(池化层)也是一样的
最后的全连接层也是一样的
不同的架构之间,主要是中间部分不一样,也就是那些复制的卷积层是不同的
conv2.x:x表示里面有很多不同的层(块)
【3
3,64】:64是通道数
在这里插入图片描述图四
上图中比较了18层和34层在有残差连接和没有残差连接的结果
一开始训练精度是要比测试精度高的,因为在一开始的时候使用了大量的数据增强,使得寻来你误差相对来说是比较大的,而在测试的时候没有做数据增强,噪音比较低,所以一开始的测试误差是比较低的
上图主要是想说明在有残差连接的时候,34比18要好;另外对于34来说,有残差连接会好很多;其次,有了残差连接以后,收敛速度会快很多,核心思想是说,在所有的超参数都一定的情况下,有残差的连接收敛会快,而且后期会好。
输入输出形状不一样的时候怎样做残差连接
填零
投影
所有连接都做投影
对比以上三种残差连接的三种方法
在这里插入图片描述图五
A表示填0;
B表示在不同的时候做投影;
C表示全部做投影;
B和C的表现差不多,但是还是要比A好一点;
B和C虽然差不多,但是计算复杂度更高,B对计算量的增加比较少,作者采用了B。

怎样构建更深的ResNet
在这里插入图片描述
图六
左图是之前的设计,当通道数是64位的时候,通道数不会发生改变
如果要做到比较深的话,可以学到更多的模式,可以把通道数变得更大,右图从64变到了256
当通道数变得更大的时候,计算复杂度成平方关系增加,这里通过1个1*1的卷积,将256维投影回到64维,然后再做通道数不变的卷积,然后再投影回256(将输入和输出的通道数进行匹配,便于进行对比)。等价于先对特征维度降一次维,在降一次维的上面再做一个空间上的东西,然后再投影回去。
虽然通道数是之前的4倍,但是在这种设计之下,二者的算法复杂度是差不多的
在这里插入图片描述
图七
在整个残差连接,如果后面新加上的层不能让模型变得更好的时候,因为有残差连接的存在,新加的那些层应该是不会学到任何东西,应该都是靠近0的,这样就等价于就算是训练了1000层的ResNet,但是可能就前100层有用,后面的900层基本上因为没有什么东西可以学的,基本上就不会动了。

mAP:目标检测上最常见的一个精度,锚框的平均精度,越高越好

为什么ResNet训练起来比较快?
因为梯度上保持的比较好,新加一些层的话,加的层越多,梯度的乘法就越多,因为梯度比较小,一般是在0附近的高斯分布,所以就会导致在很深的时候就会比较小(梯度消失)。虽然batch normalization或者其他东西能够对这种状况进行改善,但是实际上相对来说还是比较小,但是如果加了一个ResNet的话,它的好处就是在原有的基础上加上了浅层网络的梯度,深层的网络梯度很小没有关系,浅层网络可以进行训练,变成了加法,一个小的数加上一个大的数,相对来说梯度还是会比较大的。也就是说,不管后面新加的层数有多少,前面浅层网络的梯度始终是有用的,这就是从误差反向传播的角度来解释为什么训练的比较快。
参考链接


推荐阅读
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • ICRA2019最佳论文  Making Sense of Vision and Touch: SelfSupervised Learning of Multimodal Representatio
    文章目录摘要模型架构模态编码器自监督预测控制器设计策略学习控制器设计实验结论和展望会议:ICRA2019标题:《MakingSenseofVision ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 论文阅读:《Bag of Tricks for LongTailed Visual Recognition with Deep Convolutional Neural Networks》
    基于深度卷积神经网络的长尾视觉识别技巧包摘要近年来,挑战性长尾分布上的视觉识别技术取得了很大的进展,主要基于各种复杂的范式(如元学习)。除了这些复杂 ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
author-avatar
手机用户2502853447_666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有