最近在做一个分类的任务,输入为3通道车型图片,输出要求将这些图片对车型进行分类,最后分类类别总共是30个。

  开始是试用了实验室师姐的方法采用了VGGNet的模型对车型进行分类,据之前得实验结果是训练后最高能达到92%的正确率,在采用了ImageNet训练过的DataLayer之后,可以达到97%的正确率,由于我没有进行长时间的运行测试,运行了十几个小时最高达到了92%的样子。

  后来是尝试使用Deep Residual Learning的ImageNet(以后简称ResNet)的实现方法,十几个小时的训练可以达到94%的正确率,由于ResNet-50的模型太大,没有进行长时间的测试,不知道能否达到跟ImageNet最好结果差不多的效果。

  下面对ResNet的模型进行简单的介绍。

  ResNet的原理如下:

  首先假设我们简单的一层:输入——>中间层——>输出。那么假设中间层的函数为F(x),我们得到的结果就是F(x)。那么对于ResNet,我们假设我们要拟合的函数为H(x),我改变了一种方式,我将输入跳过中间层,直接与输出相连。如图:(论文原图)。

  即我们的F(x)是由这个公式得到的:F(x):=H(x)-x。也就是说,我们要拟合的函数是H(x)=F(x)+x。上述是一个简单的例子,在实际过程中,这H(x)等式右边的这两个分量是可以加上参数的。最终的公式为:Ws还有一个目的就是调整x的纬数,也就是当输入与输出纬数不相同时,Ws要负责将二者的纬数变为相同。

  那么这样做有什么好处?在之前的实验中,研究者们发现,理论上来说,一个层数越多的神经网络,那么它所能拟合的函数就越复杂,得出的错误率就应该越小,但是研究者们得出的结论却并不是这样。如图:                                                                                  

  在20-Layer和56-Layer的比较中发现,56 -Layer无论是Training error还是Test error都明显高于20-Layer,这与理论上的关系并不符合。这个问题叫做degradation problem。这个问题表示了不是所有的函数都是很容易去优化的。

  所以这个方法直接将x加到输出端,在理论上来说,如果这个Identity项是最优的,那么旁边的非线性层的参数应该全部为0,然后一层Identity Mapping就代表了最优函数,但是通常情况下,这个x不是最优的,但是通常情况下,如果Identity Mapping接近于最优函数,那么这一项可以很好的帮助优化。他对于更深层的网络传递到后来的误差就会越小。

  在我这次的实验中,采用了ResNet-50的模型。整个模型可参考:http://ethereon.github.io/netscope/#/gist/db945b393d40bfa26006

  这里我拿出一个部分进行介绍:

  在这是第一个Res层,最上面是一个输入层,紧接着一个MaxPooling。res2a_branch代表的是卷积层,BN代表的是BatchNormalization。在这里作者对Identity项也进行了一次卷积操作。这个卷积操作是1*1的卷积。在原文中,作者介绍了当输入输出纬数不同时,有两种选择:选择A,如果纬数不同,那么多余的纬数采用zero-padding,这样不会增加参数。选择B,如果纬数不同,那么采用1*1卷积来将纬数保持平衡。

在这个模型中采用的是选择B。

  当纬数相同的时候,输入是直接接到输出的,是没有左边这个模块的。

  经过测试,在训练相同时间(十余个小时)的情况下,VGG最高到92%,ResNet-50的TOP1为6%。

  全文参考Deep Residual Learning for Image Recognition,作者:Kaiming He Xiangyu Zhang Shaoqing Ren Jian Sun。

  附torch实现代码https://github.com/KaimingHe/deep-residual-networks

Deep Residual Learning的更多相关文章

  1. [论文阅读] Deep Residual Learning for Image Recognition(ResNet)

    ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...

  2. 论文笔记:Deep Residual Learning

    之前提到,深度神经网络在训练中容易遇到梯度消失/爆炸的问题,这个问题产生的根源详见之前的读书笔记.在 Batch Normalization 中,我们将输入数据由激活函数的收敛区调整到梯度较大的区域, ...

  3. Deep Residual Learning for Image Recognition这篇文章

    作者:何凯明等,来自微软亚洲研究院: 这篇文章为CVPR的最佳论文奖:(conference on computer vision and pattern recognition) 在神经网络中,常遇 ...

  4. 论文笔记——Deep Residual Learning for Image Recognition

    论文地址:Deep Residual Learning for Image Recognition ResNet--MSRA何凯明团队的Residual Networks,在2015年ImageNet ...

  5. Deep Residual Learning for Image Recognition论文笔记

    Abstract We present a residual learning framework to ease the training of networks that are substant ...

  6. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...

  7. Deep Residual Learning for Image Recognition

    Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun           Microsoft Research {kahe, v-xiangz, v-sh ...

  8. 【文献阅读】Deep Residual Learning for Image Recognition--CVPR--2016

    最近准备用Resnet来解决问题,于是重读Resnet的paper <Deep Residual Learning for Image Recognition>, 这是何恺明在2016-C ...

  9. [论文理解]Deep Residual Learning for Image Recognition

    Deep Residual Learning for Image Recognition 简介 这是何大佬的一篇非常经典的神经网络的论文,也就是大名鼎鼎的ResNet残差网络,论文主要通过构建了一种新 ...

随机推荐

  1. 开坑Java编写Json解析器,简明教程

    https://zhuanlan.zhihu.com/p/22460835?refer=json-tutorial 课程不是我原创,我打算照他的这个C版本来重写一遍Java的,打算用面向对象的方式来编 ...

  2. GO语言总结(5)——类型转换和类型断言

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(4)——映射(Map),本篇博客介绍Go语言的类型转换和类型断言 由于Go语言不允许隐式类型转换.而类型转换和类型断言的本质,就是把一个类型转换到 ...

  3. [LeetCode] Concatenated Words 连接的单词

    Given a list of words (without duplicates), please write a program that returns all concatenated wor ...

  4. [LeetCode] Largest BST Subtree 最大的二分搜索子树

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...

  5. 使用FastReport打印二维码

    简单介绍一下该功能所在的项目背景:C#语言编写的WPF客户端应用程序,在“结账”模块中,打印出的收款小票上需要显示一个二维码,服务生拿着小票去找顾客,顾客可以选择现金.银行卡等普通支付方式,也可以直接 ...

  6. 【wpf】缓存

    1.引用 System.Runtime.Caching 2.源 msdn //实例化MemoryCache类 ObjectCache cache = MemoryCache.Default; //读取 ...

  7. 1.ios synthesize有什么作用

    ###1.ios synthesize有什么作用 当定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,所以Xcode提供了@property和@synthe ...

  8. 小公司0成本基于Pythony的单元\GUI\Web自动化\性能的几个开源软件测试工具

    以下是当前流行的几款适合小公司0成本的几个开源软件测试解决方案: 1.单元测试 a.unittest :Python自带的单元测试框架 b.pyunit:Junit的Python版本 2.使用Pyho ...

  9. css-css权威指南学习笔记7

    第11章 表布局 1.border-spacing,单元格边框间距,可以有两个或一个值,两个值前者表示水平间距,后者垂直间距. 2.border-collapse值为collapse时不可设置padd ...

  10. Jenkins安装

    直接下载使用Jenkins有两种方式:一种是下载war包安装.另一种是下载.zip进行安装. 一..zip解压安装 1.下载Jenkins:地址http://mirrors.jenkins-ci.or ...