由Andrew Zisserman 教授主导的 VGG 的 ILSVRC 的大赛中的卷积神经网络取得了很好的成绩,这篇文章详细说明了网络相关事宜。

文章主要干了点什么事呢?它就是在在用卷积神经网络下,在采用小的卷积核与小的移动步长的情况下,探索一下网络的深度对目标识别率的影响。

网络的大体结构

网络的输入为224*224的RGB图片,后面跟卷积层,卷积核的大小基本都为3*3有最小的可以保留图片空间分瓣率的卷积核,步长为1个像素,偶尔会有1*1的卷积核,这就相当于加入了一个非线性变换而已。再往后接pooling 层,它的大小为2*2,步长为2个像素,并且采用MAX-pooling的方法;再往后就是三层的全连层,第一层为4096个单元,第二层为4096个单元,第三层为1000个单元,即对应1000个类别,根据这1000个单元的输出其实这样就可以分类了;再往后为一个softmax层,目的其实就是用于计算网络的代价函数时用于求误差。就这样了,这就是整个网络的结构。根据网络的深度不同,文中探索了五种网络结构,如下所示:(黑色字体部分为网络相对于前一层增加的部分)

在上图中,如网络中的 conv3-512,表示网络的卷积核的大小为3*3, 共有512个feature map. 另外,maxpool的具体配置没有写出来。

另外,在上面的网络配置中,每经过一个 maxpooling的时候,它的feature map就增加一倍哦, 不对过maxpooling的话,feature map 的个数不变的,这样做的目的方便增加网络的深度;

网络采用最小的卷积核 3*3, 其实呢,当两层的3*3的卷积层叠加时相当于一个5*5的卷积层(因为它们对应的接收域是相同的),当三层的3*3的卷积层叠加时相当于一个7*7的卷积层哦。所以呢,文中的做法就是减少了卷积层的宽度,而增加了卷积层的深度,这样做有一个好处,可以减少参数的个数。例如:三层的3*3有卷积层的参数个数为3* 3*3* num_featuremap, 而一层的7*7 的卷积层的参数个数为:7*7*num_featuremap。 是不是减少了好多呢,哈哈哈。 既然参数减少了,这个过程也就相当于一个隐形的对网络一种  regularization。

网络的训练一些相关细节:

网络采用常用的mini-batch 的梯度下降法进行网络的训练, size为256;权值更新的原则也是常用的 momentum 的方法,动量值为0.9; 对网络的权值 decay 采用L2正则化方法,其中惩罚因子为5*10-4; 对最后的全连接层的前两层采用 dropput 的正则化机制, dropout的值为0.5;网络的学习率的大体设置为:初始值为0.01,当进入plateau时(可以认为验证值的识别率不再变化,当然也可以选其它的哦,如:lossValue),学习率 缩小10倍,变为0.001,然后再重复一次,变为0.0001就OK了。

权值的初始化是一个重要的问题:对于深层的网络来说,网络的权值初始值特别特别容易影响最后的识别率的,而相对于比较 shallow的网络的初始值我们可以用随机初始化的方法解决的哦。所以文中的做法就是随机初始化(用mean为0,variance为0.01的高斯分布)相当shallow的网络 A,然后训练完成啦,当我们训练其它相当于较深的网络的时候,我们用网络A的权值来初始化其它网络的权值就OK了,在训练过程中,我们的学习率初始值同样保持为0.01,好让它们充分学习嘛。

网络的输入的图片的选择问题:

我发现这个在文章中显的很重要呢,,,好像网络的没有什么创新,然后在这个方面下工夫来提高识别率吧,, 不过这个太也什么了吧。。。没点。。。。啥啥呢。。感觉。。。。。哎,,,这一部分吧,看得也有点模糊哦。额。。

网络的训练:对于训练时的图片我还能看懂,就是把图片调整为边长最小的(估计不是正方形的吧)为Q,Q为256,或384,或在(256,512)之间的值。然后呢,在上面随机采样224*224大小的区域,然后去训练就可以啦,还是每次迭代时都是再重新彩样的。在训练时,为了加快速度,当我们训练完Q为256的时候,当我们再训练Q=384时,我们的网络用Q为256权值初始化,然后把学习率调整为0.001再训练。。   当我们训练Q=(256,512)之间的值时, 我们的网络用Q为384权值初始化,然后把学习率调整为0.001再训练。。

测试网络的过程:在测试网络过程中吧,同样是把图片调成 multi-scale,即不同大小嘛。。然后吧,后面分两种方法哈:第一种dense evaluation, 这个吧就是 fully-convolutional networks.可以参考我之前写过的 对 OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 一文的理解,第二种方法吧,就是在图片上进行multi-crop,然后送给网络进行测试,这样计算量很大的其实。反正吧,文中说它们之间可以进行 complementary.为什么呢?1,采用dense的 evaluation时,窗口的采样率为2*2*2*2*2=32个像素的(一共5个步长为2的max-pooling),而如果用multi-crop的话,我们可以人为控制步长了吧;2,采用dense evaluation与 multi-crop时的一点小差别为:可能由于zero-padding 导制边缘数据不一样,这样很容易理解啦( dense evaluation 时补充的为相邻的像素值,而 multi-crop补充的为0嘛)。

结果表明了什么呢?首先看 A 与 A-LRN, 说明了局部的正则化 不起毛作用啊,白白增加了计算量,所以,后面的网络就不用它了。现看网络B与网络C-1,它俩的区别在于C-1增加了一层的卷积核为1 的卷积层,即相当于此引入了非线性,结果呢,识别的错误率有所下降,说明起点作用啦(这样也可以,竟然,,,我怎么觉得在瞎搅gu 呢)。再看D-1与C-1,它们的区别在于把C-1中的卷积核为1*1换为了3*3的卷积核,结果又有提高,说明了,用原文中的话就是 it is  important to capture spatial context by using conv. 文中一句话我觉得很重要的:文中在的实验过程中表示出了当网络的深度增加到了 19层的时候,网络的错误识别率达到了饱和了,已经很难下降了哦。。。

而multi scale evaluation 对应于三个 scale 的图片,然后求它们三个的average 就可以啦,结果如下图所示:

反正这么做的结果就是:网络的性能提高了。。提高了,提高了。。。其实像这样的做法提高也在情理之中吧,,我觉得在情理之中, ,也没有什么技术含量啊。。。。。

测试网络的过程2: 对于测试的 multi-crop evaluation 与 dense evaluation的对比,反正没看明白什么意思,怎么又把网络的全连接层转为 卷积层的呢,泥马 这么做的话,权值怎么办啊。留着后续去看相关论文去寻找答案吧。

网络的实现:

网络的训练是基于caffe的,当然也对它进行修改了,主要就是来实现多GPU的加速。  文中采用的方法为把一个 min-batch 分为多份,然后让每一个 GPU 去求对应的梯度值,然后呢,再把这个GPU的梯度值进行求平均,再权值更新。。 总之吧,最后用4块

NVIDIA Titan 系列(一两万一块)的 GPU,训练网络要花2-3周,  如果我用我笔记本跑的话,单 620M的显卡, 估计可以跑一年,哈。。。。

图片分类实验:

这里要说一点我们经常见到的 top-1 error 与top-5 error是什么毛玩意呢。。。top-1 error 就是实在的错误率,概率最大一类的作为输出;而top-5 error常作为 ILSVRC 官方的识别率的测试,它指 的是概率的前5个中 只要有对应的正确的类就算是识别对了,没有就是错了。。。以前傻乎乎的不明白,现在终于知道了。。。。。。另外吧,ILSVRC分类识别中,一般我们只知道训练集与验证集哦,然后呢, 如果想要测试,那好,就提交给 ILSVRC大赛的官方服务器就可以哦,,这样做防止别人作弊。。记得15年的大赛中,某网上寻医问药有风险的互联网巨头,在2014年11月28日至2015年5月13日期间,参赛团队使用了至少30个帐号向测试服务器进行了至少200次提交,这大大超过了比赛规定的每周提交两次的上限,最后被禁止参与这样的竞赛了,哈哈哈!!!

所谓的 网络融合(convnet fusion,翻译过来应该是这个意思)

这种做法,是什么呢?很简单很简单,多个网络模型的输出结果求平均再用于识别。在ILSVRC的比赛中大家都在用,为什么呢?因为这样做基本上稍微弄弄,都可以提高网络的识别率。原理呢,可能就是所谓的不同网络模型之间有点互补吧(complementarity). 这也说明了网络的不稳定吧。。。还是没有找到本质吧。

最后文中的附录B给出了网络的generalization

即把网络的特征提取层 用到的 data set中去。

说实话,读完了这篇文章以后,给我的什么感觉呢?无非还是 trial-and-error啊啊啊啊。。。。人工智能是不是没有发展前景呢??全都是基于数学模型与算法,还有各种大数据统计,概率相关知识吧吧。,想让电脑有自己的思想,,,我觉得还好遥远远远啊啊啊。。。

VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 这篇论文的更多相关文章

  1. VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition

    Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...

  2. Very Deep Convolutional Networks for Large-Scale Image Recognition

    Very Deep Convolutional Networks for Large-Scale Image Recognition 转载请注明:http://blog.csdn.net/stdcou ...

  3. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...

  4. 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)

    Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...

  5. SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加 ...

  6. 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记

    <DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...

  7. 2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译

    2014-VGG-<Very deep convolutional networks for large-scale image recognition>翻译 原文:http://xues ...

  8. 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...

  9. 论文笔记:(2019CVPR)PointConv: Deep Convolutional Networks on 3D Point Clouds

    目录 摘要 一.前言 1.1直接获取3D数据的传感器 1.2为什么用3D数据 1.3目前遇到的困难 1.4现有的解决方法及存在的问题 二.本文idea 2.1 idea来源 2.2 初始思路 2.3 ...

  10. 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015

    Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...

随机推荐

  1. solr 日期查询格式

    //solr 日期格式: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); //开始 ...

  2. eclipse tomcat 集成

    1. 下载 Tomcat        作者选择的是 Tomcat6,下载地址:http://tomcat.apache.org/download-60.cgi,选择绿色版的 zip 进行下载(目前最 ...

  3. 今天携程出事了:让我们来学习下http的响应码

    就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...

  4. 渗透日记-利用SQLMAP伪静态注入

    今日找到一个网站,做下安全检测,url是这样的: 不是传统的.php结尾,所以很多人认为这个不能注入,其实伪静态也能注入的,这个url虽然做了伪静态,但是还是需要传递参数到数据库去查询的,试试能否注入 ...

  5. python求解ax² + bx + c = 0

    系数需满足条件: a,b不能同时为0 b2-4ac≠0 代码如下def quadratic(a, b, c): """ 返回ax² + bx + c = 0的 " ...

  6. MySQL命令大全:MySQL常用命令手册、MySQL命令行大全、查询工具

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  7. DataGrid新增行数据

    本文将介绍一下,如何通过Jquery MiniUI来添加Datagrid一行. 1.效果展示: ↓ 2.具体代码: <script type="text/javascript" ...

  8. .net(C#)中结构和类的区别

    static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也 ...

  9. angularJS——模块

    一.在讲angularjs的模块之前,我们先介绍一下angular的一些知识点: AngularJS是纯客户端技术,完全用Javascript编写的.它使用的是网页开发的常规技术(HTML,CSS,J ...

  10. Dynamics AX 2012 R2 窗体系列 - 在窗体上修改字段时所触发的方法及其顺序

        在这个系列里,Reinhard将和大家一起探索在AX的窗体上执行操作时,都会触发窗体.窗体数据源和表上的哪些方法,并且是以怎样的顺序触发的.     这次,我们来看看在窗体上修改或录入数据的情 ...