【AI】目标检测第一话:R-CNN和SPP-Net

【AI】目标检测第一话:R-CNN和SPP-Net

编者按

由于Alex-Net和VGG等深度网络在分类任务领域的成功应用,更多的深度网络被应用于检测任务中。今天小编为大家准备的两篇文章分别是CVPR2014中R-CNN在目标检测中的应用以及CVPR2015中SPP-Net针对R-CNN进行的改进。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

文章作者:TeddyZhang
责任编辑:晋杰
文章发表于微信公众号【运筹OR帷幄】:【AI】目标检测第一话:R-CNN和SPP-Net
欢迎原链接转发,转载请私信 @运筹OR帷幄 获取信息,盗版必究。
敬请关注和扩散本专栏及同名公众号,会邀请全球知名学者发布运筹学、人工智能中优化理论等相关干货、知乎Live及行业动态:『运筹OR帷幄』大数据人工智能时代的运筹学

文章摘要:本文对CVPR2014和CVPR2015中两篇文章进行解读,首先分析了R-CNN网络结构、算法流程及优缺点;针对R-CNN缺点介绍了其改进方法:SSP-Net的网络结构、算法以及其对R-CNN改进的详细介绍。

R-CNN(使用CNN提取特征)

这是一篇CVPR2014的文章,由于Alex-Net和VGG等深度网络在分类任务的成功应用,大家逐渐发现,深度网络自主提取的特征要比传统的手工方式提取的特征更加丰富,于是开始尝试在检测任务中使用深度网络来提取特征。其中R-CNN(Regions with CNN feature)就是一个比较好的例子。众所周知,检测任务不仅仅是分类问题,还包括边框区域确定。因此,对目标所在框的位置进行确定是一个需要研究的问题。

1. 算法总览

Region proposals : 候选区域,也就是预先找到的目标可能存在的区域。

  1. 输入测试图片
  2. 利用selective search算法从图像中提取2k左右个region proposals
  3. 将每一个region proposals缩放成227x227的大小并输入CNN网络,在最后一层全连接输出图像特征
  4. 把每个region proposal的CNN特征输入到SVM进行分类处理
  5. 对SVM分类好的region proposal进行边框回归处理,使得预测框和真实框更加吻合


2. 网络结构

我们可以看到,每个region proposal在输入CNN网络之前都会缩放至227x227,这是因为R-CNN的网络结构中存在有全连接层(fc),需要输入图像的尺寸保持一致。


3. 类别判断

类别判断过程中使用SVM分类器进行分类,一个region proposal经过CNN网络输出4096维的特征,然后用SVM进行二分类,判断是否属于此类。其中SVM存在的缺点是:只能分阶段来进行,不能进行端到端的训练。

在提取候选框的过程中,传统算法一般都会使用滑框的方式来处理,但存在缺点,如滑框信息的大量重复以及无法处理多尺寸的目标。而R-CNN采用了更加高效的方式来生成候选框,具体算法如下:

  1. 生成原始的区域集R(利用felzenszwalb算法)
  2. 计算R中每个区域与相邻区域的相似度S={s1, s2, ...}
  3. 找出相似度最高的两个区域,将其合并成新集并添加到R中
  4. 从s中删除与步骤3中的两个子集有关的所有相似度
  5. 计算新集与所有子集的相似度St
  6. 跳至步骤3,不断循环,直到S为空

其中相似度的计算,作者对颜色,纹理,尺度,填充这四个相似度进行加权处理,然后得到最终的相似度。


4. BoundingBox Regression(边框回归)

虽然已经使用了selective search来最大限度地提取目标的候选框,但有些候选框与真实框依旧有很大差距,因此使用一个线性方程来实现位置的精确定位,其中真实框为

,而这四个元素的位移量为

,根据参数间的关系建立方程关组:

然后通过真实框的标签与预测输出的loss去优化网络的可学习权重:

其中*代表x, y, w, h, 而w为网络的可训练权重。t* 的计算公式为:


5. 算法总结

优点:

  • 精度显著提高,PASCAL VOC2010从35.1%到53.7%
  • 将CNN网络应用于目标检测领域并实现了图像特征自动提取

缺点:

  • 训练分阶段,步骤繁琐:微调网络+训练SVM+边框回归
  • 每个region proposal都需要经过CNN网络进行提取特征,产生大量特征文件,占用过多物理内存
  • 由于每个region proposal都需要需要经过CNN网络进行提取特征,导致运行速度慢(GPU条件下,测试一张图片需要47s)
  • 由于使用SVM进行分类,无法实现端到端的训练


SPP-Net(改进R-CNN)

既然我们已经清楚了R-CNN的缺点,那么如何去改进它呢?SPP-Net给出了它的解决方案,接下来我们就来看看凯明大佬的SPP-Net。因为R-CNN的网络结构中有全连接层,造成CNN网络输入时图像尺寸一致,但是region proposal的尺寸是不一致的,这是作者文章想要解决的一个问题;另外由于每个region proposal都需要进行正向传播,导致R-CNN的运行速度慢,这也是作者想要解决的一个问题。

1. 算法总览

SPP-Net解决尺度统一的问题如上图所示。

尺度问题:由于CNN网络中存在全连接层,所以在输入全连接层前要进行裁剪或缩放处理,这是由既定的全连接层结构决定的;这样处理的缺点是会丢失一些信息。所以作者在全连接层前面,加入一个空间金字塔结构,如下图:

可以看到,不同尺寸的region proposal经过前面卷积层生成feature map的大小也不相同,假设大小为W * H * C,而在SPP结构中,我们以不同大小的块来提取特征,分别是4*4, 2*2, 1*1, 然后把这三个网格对应到feature map中,就可以得到16+4+1=21个不同的spatial bin,其中每一块都提取一个特征,可以得到固定的21 * C的特征向量,而与feature map的尺寸无关了,这样可以从多尺度的图像中提取固定的特征向量。如最大池化时,就可以在每一个小网格的区域里面提取一个最大的特征来代表整个小网格,或者取平均等其他策略。

速度问题:R-CNN速度慢的原因是有很多region proposals要经过CNN网络计算特征,消耗过多时间,并且特征文件的储存也需要大量存储空间,于是作者考虑共享特征信息。在特征提取阶段,SPP-Net直接对一整张图片进行特征提取,得到feature map,然后在feature map中找到region proposals的区域,并通过空间金字塔池化提取固定的特征向量,使运算速度大大提升,并且特征文件的储存空间大大减少!


2. 网络结构

作者使用的ZF-5包含5个卷积层,经过空间金字塔池化层后变成固定特征,然后连接两个全连接层。作者使用SPP结构在ImageNet上做了对比实验,实验结果表明准确率有了一定的提高!


3. 映射问题

在SPP-Net中,作者将整张图片输入到CNN网络中进行提取特征,但是如何在最后的feature map中对应region proposals的区域呢?论文的Appendix A中给出了解释,作者在对这个网络进行实验时,为了简化映射问题,对每一层的feature map都进行了

的padding,其中 P是卷积核大小,这样可以得到映射关系:

其中 x,y对应的是输入原图,而 S 代表网络中所有的stride的乘积。作者文章中, ZF-5网络中的S=16,Overfeat-5/7中 S=12。然后在映射的时候,投影左(上)边界时

(向下取整),而投影到右(下)边界时

(向上取整)。


4.算法总结

总结来说,SPP-Net对R-CNN做了速度和精度上的改进,在达到R-CNN精度的同时,其速度是R-CNN的24-102倍,在运算速度方面有了很大提高,但仍满足不了实时的需求。

优点:

引入了空间金字塔,适应各种不同尺寸的特征图

对整张图进行一次特征提取,加速运算速度,并提出了权重共享的策略

缺点:

分类器使用SVM,不能端到端训练

进行分阶段训练,训练步骤复杂


总结与分析

通过这篇文章,了解R-CNN相对于传统视觉算法的优点和不足,而SPP-Net通过共享卷积运算提高了整个网络的速度,一定程度弥补了R-CNN的不足,但是仍然有自己的缺点,关于这些问题的解决方法,我们下篇文章再接着分析~~


参考文献:

arxiv.org/abs/1311.2524

arxiv.org/abs/1406.4729


文章来源声明:文章由作者授权『运筹OR帷幄』原创发布

可以在 本公众号后台 回复关键词:“目标检测”获取代码链接,如果觉得有用, 请勿吝啬你的留言和赞哦!~


扫二维码关注『运筹OR帷幄』公众号:

点击查看『运筹OR帷幄』志愿者招募介绍及加入方式

编辑于 2019-01-06

文章被以下专栏收录