最近在做一个分类的任务,输入为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. 子DIV设置margin-top影响父DIV位置的解决办法

    父div如果没有任何东西,子div设置margin-top,父div会下落 <!DOCTYPE html> <html lang="en"> <hea ...

  2. BZOJ 1061: [Noi2008]志愿者招募

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4064  Solved: 2476[Submit][Stat ...

  3. css样式之background详解(格子效果)

    background用法详解: 1.background-color 属性设置元素的背景颜色 可能的值 color_name            规定颜色值为颜色名称的背景颜色(比如 red) he ...

  4. textarea 中的 innerHTML 和 value

    <textarea></textarea> <input type="button" value="click" /> &l ...

  5. setTimeout和setInterval从入门到精通

    我们在日常web前端开发中,经常需要用到定时器方法. 前端中的定时器方法是浏览器提供的,并不是ECMAScript规范中的.是window对象的方法. 浏览器中的定时器有两种, 一种是每间隔一定时间执 ...

  6. Cookie的应用

    作用:在浏览器当中用cookie来保存参数,比如实现登录功能时用来保存账号 <%@ page language="java" import="java.util.* ...

  7. WIN7下安装visualC++2008 redistributable 出现1935错误的解决办法(转自)

    转自:http://zhidao.baidu.com/link?url=jylNh_JeANi4wrOMmd4d2i06e_N3QCw7z6BLGiNNNTu1Hc6ADTkUq2PORExKmjtk ...

  8. 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗

    碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...

  9. django 基础篇

    jdango 简介: 一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以 小的代价构建和维护高质量的Web应用. Python的WEB框架有Django.Tornad ...

  10. React Diff算法

    Web界面由DOM树来构成,当其中某一部分发生变化时,其实就是对应的某个DOM节点发生了变化.在React中,构建UI界面的思路是由当前状态决定界面.前后两个状态就对应两套界面,然后由React来比较 ...