最近在做一个分类的任务,输入为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. ScrollView分栏视图分析

    代码精华部分如下: //1.添加scrollView /* 1). 添加一个scrollView; 2).创建关注.热门.附近三个控制器. 3). 存储它们的名字到数组中,遍历并放到本控制器里. 4) ...

  2. [LeetCode] Flip Game 翻转游戏之二

    You are playing the following Flip Game with your friend: Given a string that contains only these tw ...

  3. 使用WCF传输DataTable:DataTable和Xml格式的字符串相互转换(C#)

    背景:项目中要用到客户端向服务端传数据,使用WCF,绑定webHttpBinding,做了一个小例子. 业务逻辑简介:客户端在a表中添加了几条数据,从SQL Server数据库直接取出新添加的数据(D ...

  4. IT培训行业揭秘(一)

    最近一个多月来,身边有很多朋友问我,我家孩子明年就要大学毕业了,现在工作还没有着落,最近孩子回家经常和我说,他们学校最近来了很多IT培训班,让同学们参加培训,然后各个培训班动辄拿出往届他们的培训学生赚 ...

  5. 华为5G空口新技术(2015年)

    2015-03-24 长江后浪推前浪,4G建设方兴未艾,业界关于5G的讨论已如火如荼.对于每一代移动通信,空口技术都相当于王冠上的明珠. 在月初的世界移动通信大会上,华为发布了面向5G的新空口,并展出 ...

  6. java script 基础知识

    方法:提供信息 函数去处理 给出一个结果 字符类型. 字符提前赋类型 int i=1; money x; float;datetime; decimal;var 万用类型 var a = 1; 1赋值 ...

  7. 一个脚本可以一直运行 ignore_user_abort

    php中ignore_user_abort函数的用法 PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ign ...

  8. js获取当前系统时间

    Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份 ...

  9. UICollectionViewCell 网格显示数据

    using System; using System.Collections.Generic; using Foundation; using UIKit; namespace ddd { publi ...

  10. PHP中explode和implode的区别

    字符串的连接与分割是非常重要的两个内容,通过其可以将数组按照指定的规则转换成字符串,也可以将字符串按照指定的规则进行分割,返回一个数组.其应用范围很广,如在购物网站的购物车,在线投票系统等.这两项技术 ...