一点最重要的学习方法:  当你读一篇论文读不懂时,如果又读了两遍还是懵懵懂懂时怎么办???方法就是别自己死磕了,去百度一下,如果是很好的论文,大多数肯定已经有人读过并作为笔记了的,比如我现在就把我读过以后的收获记下来(我也看了好几篇前人的博文的)。。。百度没有去试试google吧。。。如何快速读懂读明白一篇文章也是一种能力,选择的方法往往大于努力的。

对于这篇论文,网上有很多写的好的总结,大家可以去看,以下我写的内容零零散散,建议大家不要浪费时间看了哦。

文章基于 ILSVRC2013 的数据集进行图像目标的分类、定位与 detection. 对于分类的话,用官方的top-5 error(意思就是你的网络的前5个最可能的分类目标中只要有一个对了就可以,为什么呢?因为吧,图像中可能不仅仅包含要分类的目标还分包括一些不小的目标啦)来衡量网络的性能。对于定位的话,不但要把图像目标用矩形框圈出来,并且要分出正确有目标类别;对于detection, 图像目标中有什么,都找出来什么就可以啦。

对于用卷积神经网络进行图像目标的分类问题,我们要明白一些相关东西。

1. 一个训练好的卷积神经网络,它的相关的参数是固定的对吧, 参数都存在这些地方:第一,卷积核,所以呢,卷积层中的 feature map的个数是固定的,但是它的大小不是固定的哦。 第二就是网络中的全连接层,全连接层的神经元个数不能改变了。。。         总之,在卷积层中,网络的输入大小可以改变,输入大小的不同的结果仅仅是 feature map 大小的不同。 而在全连接层中,我们网络的输入的大小不能改变,必须固定。   在卷积神经网络中,网络的前面基本都是卷积层,而网络的后面几层基本都会跟着全连接层的,所以,这就决定的网络在训练过程中网络的输入的大小应该统一固定,在测试中,网络的输入应该与训练时网络的输入大小保持一致。

以上说的为常用的卷积神经网络。     不过有一种 fully-convnet 可以不受这个限制,它的做法就是把网络的后面的全连接层看层为卷积层来对待。这样,我们在测试时,就可以 multi-scale 的输入了。

2.即然在图像中目标的位置不确定,所以有人提出 slide-window的方法。  但是这个方法基本都是在网络测试时使用,不在网络的训练过程中使用。为什么呢?原因很简单,因为在监督学习中,如果使用 silide-window 进行网络的训练的话, 每个 窗口都要对应一个 label吧, 但是 窗口没有 align 目标的话,你想给什么样的label??对吧,我觉得没法给吧。。。这就是原因。

文章对任务建立了两个分类的模型,分别为快速版与精确版。快速版与精确版的网络结构的主要差别在于:步长的不同,网络层次数的不同,网络的feature map数目的不同。对于下面的网络,前面的卷积层称作为特征提取层,它负责学习输入图像的特征,后面的全连接层称为网络的分类层,负责分类。如果对于定位来说,我们就把后面的分类层改成一个回归网络来训练参数就可以了。

文章对于分类、定位与检测任务怎么处理的呢。文章用一个网络来解决这三个问题, 用一个网络的含义是网络的特征层不变(前面的卷积层),后面的网络类型根据不同的任务改改就可以。。。就这个意思应该是。

快速版的网络结构:

精确版的网络结构:

两个网络的参数个数与连接的数目的对比,如下图所示:我们会发现快速版的网络结构的参数多于精确版本的,但是呢,精确版本的连接数目远远多于快速版本哦,为什么呢?因为吧,参数最多的地方为卷积层与全连接层的相交之处, 而卷积层的参数相对较少的。

分类任务

要说明一点:基于 LILSVRC data的图像相关任务中,由于图像中的目标在图像中的位置不确定可能中间啦,可能上下左右啦;还有有时候目标的大小相对于图像来说不是很大,只占一小部分;还图像中的背景中的目标有对网络的性能有影响,所以都是把图像的 fixed-crop 输入给网络进行训练或测试。(对比手写字体 MNIST 的识别任务,那里的data 的像素很小吧,并且图像中只有一个目标,背景还都是白色)

对于图像的分类的网络的训练方法:

训练数据的获取:基本一样吧,给一个图片,取图像的 fixed-crop (如上面的两个模型分别为231*231和221*221)进行训练。对于具体的 crop的方法那就自己看着来好了,文中采用的方法是首先把图像进行缩放到最小边长(可能原始图像不是正方形吧)为256像素,然后random 截取 5个大小为221*221的 c rops,然后水平一翻转就增加了10了吧。

网络训练相关的配置:说说文中的吧, mini-batch 为128;权值初始化为:mean为0,variation为0.01的正态分布;权值更新的momentum term 为0.6;L2的权值衰减为1*10-5;学习速率初始化为0.05,然后在30,50,60,70,80的epoch时减为原来的0.5;对于最后的全连接层进行 0.5 rate 的dropout;网络的激活函数为:RELU;

好啦,基本这样子,训练就可以了。。

网络的测试(文章中叫作:classificaiton):

这是应该说是文章的重要重要的重要的重要的地方,有价值的地方,OverFeat.

前面已经说过了,在测试的时候,我们通常采用slide-window的方法的图像上所有可能的位置选取 crops进行分类的。 对于一般的网络的话,看上去运算量很大,但是呢,对于卷积神经网络来说,它的效率还是很高的,因为对于需要重叠计算的地方它可以共享 computation.下面具体来说说哈:

1,首说一下什么是 fully-convolutional network,上面其实说过了,把后面的全连接层当作卷积层来对待,我用比较喜欢用图说明一下:

对于正常的卷积神经网络是下面这个图:

对于fully-convnet,后面网络的变化为:

此时,我们的输入的大小可以与训练时的大小不相同(如果比训练时尺寸小的话,zero-padding 就可以啦),如下面:

2,卷积神经网络滑动窗口的实现:对于测试时采用的slide-window的原始图像上进行滑动,对于卷积神经网络来说,会怎么样呢?看下面的图的举例:

当我们的输入的窗口大小为14*14时如下图所示:(后面的classifier就是我们的全连接层看作卷积层的样子)

现在假设我们的输入的图像为16*16,这时为这样子的:

解释一下:

1. 我们输入的为16*16的大小,最后输出的为2*2的大小。对于对于原始图像的左上角的14*14的大小看作窗口输入时,这个窗口的最后输出为2*2output的左上角那里。当我们对原始图像的右上角的14*14的大小看作窗口输入时,这个窗口的最后输出为2*2output的右上角那里(图上没有表示出来)…………。看到了吧,这个卷积网络一下子就可以把所有可能的窗口的输出都计算出来了。。很efficient, 原因就是在重叠的窗口上的数据不用重复计算。

2. 上面的例子也是为了让我们好明白简化了一下过程(或着说理想的过程),在实际中,可能由于zero-padding的原因,仅仅分影响部分计算过程中的边缘的数据而已(单独测试窗口的输入时会补0,而用fully-convnet 同时运算时,会补相邻的像素值)

3. 分辩率的问题:上面的分辨率为 2,因为pooling的步长为2哦。。当在原始图像中的窗口平移2个像素值时,就会对应一个 output.   在文章的精确版本中分辨率为2*3*2*3=36.

增加分辩率:

精确版的最后一层(第六层)的pooling 层为3*3的步长。现在想办法来remove 掉该pooling层的loss of resolution.方法是在pooling的时候给它加一个 offset。 具体用一维的例子说明:下面是文章中的配图:

假设图中(a)为第6层卷积以后且没有pooling的feature map,然后呢,图(b)为对图(a)进行pooling , 加的offset分别为0,1,2. 图(C)的话表示后面的相关卷积了,就不用管了,重点是图(b)的操作。通过这样的操作,就可以把pooling的操作损失的分辩率找回来。分辩率由原来的2*3*2*3变为了2*3*2。

下面我用在二维的平面的图示来说明一下:

解释一下:图中的原始图像为红色的一个矩形图。然后呢,图上的crop1,crop2,crop3,它们的水平与垂直的滑动都为12个像素的。其实它们就对应了在上面的精确版的最后一层(第六层)的pooling 层的offset分别为0,1,2(水平垂直同时位移)的pooling后得到的feature map.  而 crop4, crop 5, crop6 对应了对于offset为2 得到的feature map 进行 后面步长为5*5的卷积得到的 feature map里对应值,在原始图像中位移为36个像素;而crop4, crop 5, crop6 大小 为221*221.     如果我们把crop1 ,crop2, crop3 看作一级子图,而 crop4, crop5, crop6 看作二级子图的话,那么在原始图像中,经过上面的offset 机制我们可以得到3*3的9张的 一级子图,像素位移为12个像素, 而在每一个一级子图里面进行位移为36个像素的窗口滑动。这样它们交叉起来,窗口滑动的像素即为12个像素哦。这样的话,使分辨率变为了12个像素哦(我自己已经推过了), 增加了分辨率了吧(以前为36个像素)。

现在举个例子怎么进行分类的哈,采用精确版的模型。

当我们输入大小为257*293时,最第6层卷积完成以后不进行max-pooling得到的feature map的大小为18*21. 然后呢,我们采用不进行上面offset形式的的pooling,直接进行步长为3*3的pooling,我们得到大小为 6*7的 feature map,然后再进行7-9层的卷积操作,最后得到1000个2*3的一个输出。 这个输出表示了什么意思呢??它就代表了在原始图像上大小为221*221窗口进行36个像素的滑动步长得到一系列crops(共2*3=6个)的对应每一类别的概率哦;然后,我们取6个当中概率最大的一个就可以啦。

当我们输入大小为281*317时,最第6层卷积完成以后不进行max-pooling得到的feature map的大小为20*23. 然后呢,我们采用上面offset分别为0, 1, 2的形式的的3*3的pooling, ,我们得到大小为 9个大小为6*7的 feature map,然后再进行7-9层的卷积操作,最后得到9 * 1000个2*3的一个输出。 这个输出表示了什么意思呢??它就代表了在原始图像上大小为221*221窗口进行12个像素的滑动步长得到一系列crops(共2*3*9=54个)的对应每一类别的概率哦;然后,我们选取这些当中概率最大的一个就可以啦。

multiple scale操作:

上面的操作我们只是对single-scale进行的哈,我们可以选择不同的scale进行操作,然后求平均的。下图列出了文章中的6种不同scale(即图像的大小不一样啦)。表中的layer 5应该针对的快速版的模型。

localization

不想写了呢,怎么。

Detection

不想写了呢,怎么。

对 OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 一文的理解的更多相关文章

  1. 深度学习论文翻译解析(十一):OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

    论文标题:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 标题翻译: ...

  2. OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks

    目录 概 主要内容 Sermanet P., Eigen D., Zhang X., Mathieu M., Fergus R., LeCun Y. OverFeat:integrated recog ...

  3. 论文笔记:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

    2014 ICLR 纽约大学 LeCun团队 Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann ...

  4. 论文笔记:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks DeepLearning 》

    一.Abstract综述 训练出一个CNN可以同时实现分类,定位和检测..,三个任务共用同一个CNN网络,只是在pool5之后有所不同 二.分类 这里CNN的结构是对ALEXNET做了一些改进,具体的 ...

  5. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 这篇论文

    由Andrew Zisserman 教授主导的 VGG 的 ILSVRC 的大赛中的卷积神经网络取得了很好的成绩,这篇文章详细说明了网络相关事宜. 文章主要干了点什么事呢?它就是在在用卷积神经网络下, ...

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

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

  7. 中文版 R-FCN: Object Detection via Region-based Fully Convolutional Networks

    R-FCN: Object Detection via Region-based Fully Convolutional Networks 摘要 我们提出了基于区域的全卷积网络,以实现准确和高效的目标 ...

  8. [Localization] R-CNN series for Localization and Detection

    CS231n Winter 2016: Lecture 8 : Localization and Detection CS231n Winter 2017: Lecture 11: Detection ...

  9. [论文阅读] Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(MTCNN)

    相关论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 概论 用于人脸检测和对 ...

随机推荐

  1. 细数那些我们都习惯了的Java谣言

    我是一个Java的反对者,至于为什么,我想最大的一个原因是它不实在,不管是当年sun所说的一些言论,还是如今Java用户的一些言论,都有蛊惑之嫌,甚至很多太假了,而这些言论层出不穷,其实就语言本身我不 ...

  2. 1.<%@Page%>中的Codebehind、AutoEventWireup、Inherits有何作用?

    AutoEventWireup --- 指示是否自动启用页事件. Codebehind --- 指示后台代码文件. Inherits --- 继承类. AutoEventWireup:指示该页的事件是 ...

  3. Java中关于先有鸡还是先有蛋的问题----Class&Object

    在Java中,我们常常会看到一个类型:Class.并且在类似Person.class,cache.getClass()等代码中见到它的身影. 众所周知,Class是用来描述一个类的类型,而Object ...

  4. android下面使用SurfaceView+ mediaPlayer播放视频

    final SurfaceView surfaceView = new SurfaceView(StartupActivity.this); StartupActivity.this.mediaPla ...

  5. NoSQL数据库笔谈(转)

    NoSQL数据库笔谈 databases , appdir , node , paper颜开 , v0.2 , 2010.2 序 思想篇 CAP 最终一致性 变体 BASE 其他 I/O的五分钟法则 ...

  6. 【实践】js 如何实现动态添加文本节点

    对于我这个js 小白来说 今天鼓起勇气做起了邮箱认证这个特效 但是这次不是想说如何实现这这个特效而是想记录一下特效当中的某个部分 那就是向元素节点动态添加文本节点 百度了一下动态添加文本节点的方式 是 ...

  7. 在Ubuntu14.04_ROS_indigo上安装Kinect2驱动和bridge

    小乌龟:大乌龟,你这两周干么呢? 大乌龟:在Ubuntu14.04 ROS_indigo上装Kinect2的驱动和bridge 小乌龟:就装个驱动有什么难的 大乌龟:你说的对小乌龟,这确实不是问题,但 ...

  8. 简单而又复杂的jsp(小知识)

    JSP中的page标签中的pageEncoding属性和contentType属性 pageEncoding的默认值为ISO-8859-1 contentType的默认属性为:text/html; c ...

  9. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  10. job

    详情见:http://blog.csdn.net/wxwzy738/article/details/25158787 spring.xml <beans xmlns="http://w ...