VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 这篇论文
由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 这篇论文的更多相关文章
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...
- Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition 转载请注明:http://blog.csdn.net/stdcou ...
- Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...
- 目标检测--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 ...
- SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加 ...
- 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记
<DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...
- 2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译
2014-VGG-<Very deep convolutional networks for large-scale image recognition>翻译 原文:http://xues ...
- 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...
- 论文笔记:(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 ...
- 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015
Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...
随机推荐
- solr 日期查询格式
//solr 日期格式: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); //开始 ...
- eclipse tomcat 集成
1. 下载 Tomcat 作者选择的是 Tomcat6,下载地址:http://tomcat.apache.org/download-60.cgi,选择绿色版的 zip 进行下载(目前最 ...
- 今天携程出事了:让我们来学习下http的响应码
就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...
- 渗透日记-利用SQLMAP伪静态注入
今日找到一个网站,做下安全检测,url是这样的: 不是传统的.php结尾,所以很多人认为这个不能注入,其实伪静态也能注入的,这个url虽然做了伪静态,但是还是需要传递参数到数据库去查询的,试试能否注入 ...
- python求解ax² + bx + c = 0
系数需满足条件: a,b不能同时为0 b2-4ac≠0 代码如下def quadratic(a, b, c): """ 返回ax² + bx + c = 0的 " ...
- MySQL命令大全:MySQL常用命令手册、MySQL命令行大全、查询工具
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- DataGrid新增行数据
本文将介绍一下,如何通过Jquery MiniUI来添加Datagrid一行. 1.效果展示: ↓ 2.具体代码: <script type="text/javascript" ...
- .net(C#)中结构和类的区别
static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也 ...
- angularJS——模块
一.在讲angularjs的模块之前,我们先介绍一下angular的一些知识点: AngularJS是纯客户端技术,完全用Javascript编写的.它使用的是网页开发的常规技术(HTML,CSS,J ...
- Dynamics AX 2012 R2 窗体系列 - 在窗体上修改字段时所触发的方法及其顺序
在这个系列里,Reinhard将和大家一起探索在AX的窗体上执行操作时,都会触发窗体.窗体数据源和表上的哪些方法,并且是以怎样的顺序触发的. 这次,我们来看看在窗体上修改或录入数据的情 ...