由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. javaSE基础第二篇

    1.JDK下载: www.oracle.com   2.JAVA_HOME bin目录:存放可执行文件.exe 把可能变的路径写入JAVA_HOME path=......;%JAVA_HOME%%; ...

  2. 在nginx日志的access log中记录post请求的参数值

    背景:有时程序偶出现参数少了或没有提交到下一个链接Url里后出现问题,如何查呢,最好的办法是在nginx上的加post参数,以定位到问题才有可能对某个UIR的代码出现的问题进行排查. og_forma ...

  3. 3.MongoDB下Windows下的安装

    由于博主目前使用的是Windows的系统,没有使用Linux等其它的系统,因此此安装配置和开发使用,均是在Windows下进行的,以后在使用其它的系统的时候,再将其它系统的配置的使用补充上来. 1.下 ...

  4. diff输出格式解析

    1 命令格式 $diff <变动之前的文件> <变动之后的文件> 2 diff文件的三种格式 normal diff context diff unified diff 3 示 ...

  5. [转]在 Web 项目中应用 Apache Shiro

    目录[-] 用户权限模型 图 1. 用户权限模型 认证与授权 Shiro 认证与授权处理过程 Shiro Realm 清单 1. 实现自己的 JDBC Realm 为何对 Shiro 情有独钟 与 S ...

  6. Java 邮件发送

    <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId&g ...

  7. wex5 实战 用户点评与提交设计技巧

    最近遇到很多同学做毕业设计,其中有一项是用户点评与提交.功能并不复杂,同学们又不会,做为一个完整的功能,如果用wex5来设计开发,事半功倍.今天就以景区实战来向大家展示wex5的高效与强大.半天可以设 ...

  8. 在centos7中安装Robot Framework

    安装前景介绍: 最初,我们是在Windows环境下搭建Robot Framework来对我们的服务进行接口测试的(想知道如何在Windows下安装Robot Framework,可以参考我同事的博客h ...

  9. 自己写的java excel导出工具类

    最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...

  10. jQuery Mobile应用之火车票查询

    效果图: 在CMD中输入如下代码 corsproxy (前提是有node.js环境,并先安装corsproxy) html: <!DOCTYPE html> <html> &l ...