[关闭]
@coolwyj 2015-10-30T07:22:56.000000Z 字数 2799 阅读 10579

DeepLearning 笔记(二) OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

DeepLearning 论文



这篇文章看了好久,有些地方不是很懂,参考了别人写的一些理解才懂了。目测是自己英语太渣了,sad story。不过除了别人所述,也算有一点自己的体会吧。

先上参考的链接:
http://blog.csdn.net/whiteinblue/article/details/43374195
http://zhangliliang.com/2014/07/11/paper-note-overfeat/

简单来说,本文主要介绍了使用DeepLearning来解决classification,localization,detection的pipeline。把detection问题划分为了classification和localization两个子问题来解决。

先简单解释一下三个问题分别是啥。
classification:给定一张图片,以及一个标签指明图片中主要物体的类别,程序猜k次其类别,看是否和标签一致。
localization:与classification类似,区别在于它需要给出你猜的这些类别的物体的框,而且这个框与真实值的差距不能小于50%。
detection:事先不知道这张图片有没有可以分类的物体,有的话他们的数量是多少,需要给出物体的框以及其类别。

下面介绍一下各个方面idea的要点,至于模型啥样的,达到了啥成绩就不废话了。

1. classification

基于Krizhevsky的论文[笔记],区别在于:

在提取特征的时候Krizhevsky的论文使用了multi-view的方法,也就是对给定的图片分别取四个角,中间以及翻转的图块输入到CNN中,得到的结果取均值。这个方法的缺陷在于有些区域的组合会被忽略(比如ground truth在中间偏右,但是此方法并没有检测这个框),只关注了一个scale导致结果的置信度不高,而且重叠区域的计算很耗时。

本文对其的改进是使用了multi-scale

传统的检测/定位算法是固定输入图像不变,采用不同大小的滑窗来支持不同尺度的物体。对于CNN来说,滑窗的大小就是训练时输入图像的大小,是不可以改变的。那么,CNN支持多尺度的办法就是,固定滑窗的大小,改变输入图像的大小。具体来说,对于一幅给定的待处理的图像,将图像分别resize到对应的尺度上,然后,在每一个尺度上执行上述的密集采样的算法,最后,将所有尺度上的结果结合起来,得到最终的结果。

然而,对于上文所述的密集采样算法来说,采样的间隔(也就是滑窗的 stride)等于执行所有卷积和pooling操作后图像缩小的倍数,也就是所有卷积层和pooling层的 stride 的乘积。如果这个值较大的话,采样就显得sparse,图像中的某些位置就无法采样得到。这时,或者减小卷积层和pooling层的 stride,或者干脆去掉某个pooling层,或者采用某种方法替代某个pooling层。

文章采用的方法是使用模型前5层卷积层来提取特征,layer 5在 pooling 之前给定 x,y 一个偏移ΔxΔy{0,1,2},即对每个 feature map 滑窗从(0,0), (0,1), (0,2), (1,0), (1,1)...处分别开始滑动,得到9种不同的feature map,那么下一层的 feature map 总数为9*前一层的 num_output

至此,整个分类过程结束。其过程可以简单理解为:给定一张框定的图片,已知这张图片有某种可分类物体,但是由于框给的不是很合适,没有alignment,和训练的时候有差异,所以取不同scale图片进行检测,得到结果。对于CNN,使用不同scale需要放缩图片,由于最后的FC层的输入大小是固定的(比如5x5),所以不同scale输入经过pool5之后的 'feature map' 大小不一,此时取所有可能5x5作为输入得到特征向量。

最后的预测方法如下:对某一个类别,分别对不同scale矩阵取最大值,然后取该类别中不同矩阵最大值的均值,最后输出所有类别的top-1 or top-5。

经过FC层形成的矩阵中,一个像素就相当于原来图像中的一个图块。

示意图:
示意图

2. Localization

定位问题的模型也是一个CNN,1-5层作为特征提取层和分类问题完全一样,后面接两个全连接层,组成 regressor network 。训练时,前面5层的参数由 classification network 给定,只需要训练后面的两个全连接层。这个 regressor network 的输出就是一个 bounding box ,也就是说,如果将一幅图像或者一个图像块送到这个 regressor network中,那么,这个 regressor network 输出一个相对于这个图像或者图像块的区域,这个区域中包含感兴趣的物体。这个 regressor network 的最后一层是class specific的,也就是说,对于每一个class,都需要训练单独最后一层。这样,假设类别数有1000,则这个 regressor network 输出1000个 bounding box ,每一个 bounding box 对应一类。

对于定位问题,测试时,在每一个尺度上同时运行 classification networkregressor network 。这样,对于每一个尺度来说, classification network 给出了图像块的类别的概率分布,regressor network 进一步为每一类给出了一个 bounding box,这样,对于每一个 bounding box,就有一个置信度与之对应。最后,综合这些信息,给出定位结果。

算法还给出了一个合并多余框的方法:

令Cs为top-k(例如5)标准中每个scale下找到的可能类别。

令Bs为Cs中这些类别的预测框。而B集合是Bs的并集。

找B集合里面两个框的中心距离和相交面积之和最小的一对,如果他们的和大于给定阈值t,则结束,否则从B中删去两个框,合并这一对用他们的均值构成新的一个框,加入B

3. Detection

其实就是上述两个结合一下,( ╯□╰ )

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注