Stanford_cs231n_lecture8:Spatial Localization and Detection

大纲介绍

这节课程的主要是接着之前的已经讲过的卷积神经网络,开始进入相关的应用。这里的应用就是从,分类(Classification),定位(Localization)和检测(Detection)三个方面切入。所以就就从这三个相近的概念入手,来看一下这节课程。

三者的比较

先上图来直观的看一下:

Paste_Image.png

从上图可以直观的看到:
1.对于分类而言,就是对于给定的图片把其划分到给定的几种类别中某一种。很显然,图像中只能存在一种给定类别中的对象。
2.而定位就是找到对应的对象的位置区域,把它框选出来(即Bounding Box),这个选框除了位置信息(x,y)外还要包含其大小信息(w,h)。同样的,这里的图像只包含单个对象。
3.检测就可以看作是定位的拓展,即给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别。与定位的不同就是图像中包含的对象数不确定。
4.实例分割(Instance Segmentation),就是在检测的基础上,把每个对象的轮廓勾勒出来,随之而来的就是语义分割(Semantic segmentation)

接下来看看这几个工作具体的过程:

定位

定位一般都是要与分类结合的,所以它的可以很明确分为两部分:1.选择对象位置框,2.划分对象类别,如下图。

Paste_Image.png

这里简单介绍一下IoU,直接翻译就是交集比上并集,在图像分割中,就应该是分割结果与Ground Trueth的交集比上它们的并集,即为分割的准确率。

一个简单的实现方式如下:
1.先训练一个分类的模型,主要是其用于提取特征的卷积网络部分

Paste_Image.png

2.在上面训练好的卷积网络后接上用于选框的全连接的回归网络(fully-connected “regression head”)

Paste_Image.png

3.然后训练接上的回归网络部分,采用SDG和L2(L2,一种cost function,可以参考博客 http://blog.csdn.net/zouxy09/article/details/24971995/

Paste_Image.png

4.最后使用的时候,把卷积网络后接上两个全连接的头,用于选框定位和分类

扫描二维码关注公众号,回复: 1571572 查看本文章
Paste_Image.png

上面就是一个简单的定位网络的训练过程。

Paste_Image.png

那么这里就有一个问题了,是对于每一种分类进行一个选框呢还是对于整张图片进行一层分类呢,只能说两者现在都有。
方式如下:
一、分类部分:C 个类别
二、选框部分:
1.类型不明确:4 数字(1个选框)
2.类型明确的:C x 4 数字(每个类1个选框)

还有另外一种常用选框方式就是Sliding Window。
这里还要补充一下关于对象选框的问题,object proposal(后面简写做OP)方法分成了两类,一类叫grouping method,即先将图片打碎,然后再聚合的一种方法,比如selective search;另一类叫window scoring method。是生成大量window并打分,然后过滤掉低分的一种方法,比如objectness。这里的Sliding Window也是这类方法。
这里就做这样简单的介绍,更多内容可以参见博客http://blog.csdn.net/zxdxyz/article/details/46119369 ,这里就不赘述了。

这里要说的取得ILSVRC 2013 localization challenge冠军Overfeat

参考文献:“Integrated Recognition, Localization and Detection using Convolutional Networks”, ICLR 2014
这篇论文采用一个统一的结构在识别,定位和识别方向上,在当时都取得了不错的成绩。
大致结构思想如图:

Paste_Image.png

该文采用华东窗口在整个图片上滑动,过程如PPT_24-30页的演示,每个滑动窗口作为CNN的输入,会预测一个选框,并给予一个评分,最后结合评分然后把几个选框进行融合。
这篇文章要采用多尺度的方式。这里要补充一下多尺度(multi-scale)的问题,传统的检测/定位算法是固定输入图像不变,采用不同大小的滑窗来支持不同尺度的物体。对于CNN来说,滑窗的大小就是训练时输入图像的大小,是不可以改变的。那么,CNN支持多尺度的办法就是,固定滑窗的大小,改变输入图像的大小。具体来说,对于一幅给定的待处理的图像,将图像分别resize到对应的尺度上,然后,在每一个尺度上执行上述的密集采样的算法,最后,将所有尺度上的结果结合起来,得到最终的结果。

采用第五5层卷积层提取的特征,layer 5在 pooling 之前给定 x,y 一个偏移,即对每个 feature map 滑窗从(0,0), (0,1), (0,2), (1,0), (1,1)...处分别开始滑动,得到9种不同的feature map。(这里就是文章中提到的“offset max-pooling”部分,并没有看的很明白,这就就不展开了,大概意思是应该算是一种数据增益技术,达到更好窗口的覆盖)。
这一部分的理解是:给定一张框定的图片,已知这张图片有某种可分类物体,但是由于框给的不是很合适,或者和训练的时候有差异,所以取不同scale图片进行检测,得到结果。对于CNN,使用不同scale需要放缩图片,由于最后的FC层的输入大小是固定的(比如5x5),所以不同scale输入经过pool5之后的 'feature map' 大小不一,此时取所有可能5x5作为输入得到特征向量.

然后就有了这种改进结构:

Paste_Image.png

这里就来看一个简单的例子:
Paste_Image.png

例如训练阶在(14 14)下,训练网络;测试阶段在多个较大的图片上测试,由于每个1414的view区域产生一个分类预测分布,(16 16)的图片上测试,有4个不同的1414的view,所以最后产生一个4个分类预测分布;组成一个具有C个特征图的2 2分类结果图,然后按照11卷积方式计算全连接部分;这样整个系统类似可以看做一个完整的卷积系统。
后面又在这个分类(识别)的基础上,做了定位。
在训练的CNN后面接两个全连接层,组成regressor network 。训练时,只需要训练后面的两个全连接层。这个 regressor network 的输出就是一个 bounding box,这个 regressor network 的最后一层是class specific的,也就是说,对于每一个class,都需要训练单独最后一层。这样,假设类别数有1000,则这个 regressor network 输出1000个 bounding box,每一个bounding box 对应一类。
对于定位问题,测试时,在每一个尺度上同时运行 classification network 和 regressor network 。这样,对于每一个尺度来说, classification network 给出了图像块的类别的概率分布,regressor network 进一步为每一类给出了一个 bounding box,这样,对于每一个 bounding box,就有一个置信度与之对应。最后,综合这些信息,进行框选的融合,最终给出定位结果。
(这篇文章还在定位的基础上做了检测,思想是类似的。对于这篇文章只是粗略的看了一下,很多问题还没有看明白。后面再次研读的时候,会把这次很多不细致的地方补充上。)

检测

看完了定位,接下来看一下检测,PPT中简单介绍一些经典的传统方法,随后对于按照分类来做检测给出了自己的看法:不能简单对每一个不同尺度不同位置窗口进行分类,因为数据量实在太多,所以要尽量选取可能正确区域。这也正式现在的普遍做法,比较出名就是Region Proposals: Selective Search。
这里有必要说明一下: Selective Search只是Region Proposals(后面简称RP)中的一种方法,此外还有edge Boxes等方法。为什么要使用region proposal呢?因为其利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率(这个名词将在后面再次提到时与其他概念放在一起进行说明)。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高(滑动窗口固定长宽比)
这就要回归一下上面提到第一种OP(在我看来,OP>RP,RP是OP的一种方法,不知道我的理解对不对)方式,就是比较出名的Selective Search。

Selective Search:

简单的讲就是:首先将图片打散,然后按照超像素的原理(superpixel),根据人为定义的距离进行聚合。
这个理论提出在“Selective Search for Object Recognition”,IJCV2013
其中为了提高选取的多样化,选择搜索主要是从下面三个方面进行的:
1.使用多样化的色彩空间用于获得不变性;
2.使用不同的相似性测量;
3.不同的初始区域。

然后就进入最著名三大检测算法,R-CNN,fast R-CNN,faster R-CNN:

R-CNN:

  1. 输入测试图像
    (2) 利用selective search算法在图像中提取2000个左右的region proposal。
    (3) 将每个region proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。
    (4) 将每个region proposal提取到的CNN特征输入到SVM进行分类。
    (5) 对于SVM分好类的region proposal做边框回归(bounding-box regression),边框回归是对region proposal进行纠正的线性回归算法。
结构如图:

Paste_Image.png

这个就是这个网路实际使用的过程,及测试过程。
那么对于测试过程:
其首先是使用在ImageNet(大数据集)上预训练的模型,然后在PASCAL VOC(小数据集)上进行微调得到用于特征提取的CNN模型,最后利用CNN模型对训练集提特征训练SVM。
这里补充一点, 为了平衡训练数据中的正负样本,对每个类都训练一个线性的SVM分类器,除了刚好包含某一类物体的region proposal应该是正样本,完全不包含的region proposal应该是负样本,但是对于部分包含某一类物体的region proposal同样是使用IoU阈值的方法,阈值为0.3,计算每一个region proposal与标准框的IoU,大于这个阈值的作为正样本,小于的作为负样本。

既然说到了检测,那么就要说一下检测所用的评价标准:
采用的mean average precision(mAP)评价方式,
对于以正负样本分类为例,分类的样本根据分类结果有四类:true positive(被正确分类的正例)false negative(本来是正例,错分为负例) true negative(被正确分类的负例)false positive(本来是负例,被错分为整理)。
precision:衡量一个结果的准确度,也称为PPV(positive predictive value);
recall:衡量一个结果的完整性,也被称为true positive rate或sensitivity。
下图就可以很好的表现他们的关系:

Paste_Image.png

为了更好的对一个分类器评价,precision和recall往往是此消彼长的,一个极端的例子是:如果把所有样本都判为正样本,那个precision就会很小,而recall此时达到最大为1;相反地如果只把极少数的样本判为正样本,那么可能能得到很高的precision,而结果不够完整。
所以AP(average precision)这个指标则很好的兼顾了两者。可以将它看成precision/recall曲线下方围成的曲面面积,其中横坐标是recall,纵坐标是precision,precision是关于recall分段常数的函数。所以计算ap的时候通过计算阴影部分每个小矩形的面积然后再求和就行。大概例子如图,

Paste_Image.png

(以上参考http://blog.csdn.net/a1154761720/article/details/50864994

Fast R-CNN

为了解决R-CNN的问题:
1.运行速度慢
2.训练分为多个阶段,步骤繁琐
3.支持向量机和回归是事后训练的:CNN特征没有根据支持向量机和回归来更新
在进入Fast R-CNN之前,必须提到另一个网络,就是SPPNet:针对不同尺寸输入图片,在CNN之后的Feature Map上分割成同样大小的特征图并Pooling,转化成相同尺度的向量。

Paste_Image.png

对于Fast R-CNN,简答的说就是把RP转移到Feature Map之后做,这样不用对所有的区域进行单独的CNN。同时最终一起回归bounding box和类别。

Paste_Image.png
Paste_Image.png

与R-CNN不同主要就是:
1.最后一个卷积层后加了一个ROI pooling layer;
2.二是损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

但是这里还是RP还是选用selective search方法,然后再映射到后面的feature maps 上,并没有完全的实现end-to-end。所以就有了后来的Faster R-CNN。

Faster R-CNN

所以这篇文章就提出了 Region Proposal Network(RPN) 用来提取检测区域,并且和整个检测网络共享卷积部分的特征,接在CNN之后。结构如图:

Paste_Image.png

RPN直接训练产生RP,无需额外的RP操作
在RPN之后,使用RoI pooling,分类和选框回归,就如同Fast R-CNN一样

RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,因为anchor机制和边框回归可以得到多尺度多长宽比的region proposal。如图所示(这里看的很粗糙,还有没有很好的理解这段内容)

Paste_Image.png

过程如图:
(1) 现在ImageNet上预训练的模型;
(2) 使用(1)中RPN网络提取region proposal训练网络;
(3) 使用(2)的网络重新初始化RPN, 固定卷积层进行微调;
(4) 固定(2)中的卷积层,使用(3)中RPN提取的region proposal整体微调网络。
上面就是经典的R-CNN系类的三部曲。
当时后面的对于检测而言,除了准确率意外,把注意力更多的转移到了效率上来。就有了YOLO (You Only Look Once: Unified, Real-Time Object Detection)

YOLO

(1) 给个一个输入图像,首先将图像划分成7*7的网格
(2) 对于每个网格,我们都预测边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
B Boxes: 4 coordinates + confidence
Class scores: C numbers
(3) 根据上一步可以预测出7 x 7 x (5 * B + C) 个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。(NMS,非最大抑制,一种冗余窗口的融合算法)
网络的操作过程大致如图:

Paste_Image.png

这就是我对这节课程的自己的一点总结,借鉴了很多网上大牛的观点,从中学习了很多,但是由于第一次写,写得也比较匆忙,所以还有很多不到位,不清楚的地方,希望大家多多指出,以便改正。



作者:咨诹善道
链接:https://www.jianshu.com/p/d7cec49726f8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/weixin_41718085/article/details/80389965
今日推荐