前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目标检测 RCNN, SPPNet, Fast RCNN, Faster RCNN 总结

目标检测 RCNN, SPPNet, Fast RCNN, Faster RCNN 总结

作者头像
用户1148525
发布2019-05-26 12:16:51
9560
发布2019-05-26 12:16:51
举报

RCNN CVPR 2014 Rich feature hierarchies for accurate object detection and semantic segmentation https://github.com/rbgirshick/rcnn

自从2012年 AlexNet 网络的提出,深度学习大行其道。一开始主要集中于 图像分类领域。RCNN的提出将卷积网络引入了目标检测领域,并在随后的2-3年迅速发展,检测的精度和速度提升都很大。

RCNN大致思路就是将图像检测问题转化为图像分类问题,从图像中把包含目标的图像区域提取出来,用一个矩形图像块表示,再对这个图像块使用 深度学习卷积网络来分类。

这里写图片描述
这里写图片描述

RCNN算法分为4个步骤 1) 一张图像生成1K~2K个候选区域 (图像分割算法例如 selective search) 2)对每个候选区域缩放到固定尺寸,使用深度网络提取特征 (CNN模型训练有两步组成:在 ImageNet上的预训练,在检测数据上的微调) 3) 特征送入每一类的SVM 分类器,判别是否属于该类 4) 使用回归器精细修正候选框位置

RCNN在目标检测中的地位犹如 AlexNet 在CNN网络模型中的地位。它给后面的研究指明了方向。大家在这个框架下面不断的完善。

SPPNet ECCV 2014 Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition https://github.com/ShaoqingRen/SPP_net

SPPNet 的算法流程: 1)提取候选区域,selective search 、 EdgeBox等 2)对整幅图像提取CNN卷积特征,可能有5个卷积层,这个输出对应是整幅的卷积特征 3)结合1)、2)结果使用 SPP layer (Spatial Pyramid Pooling Layer)提出每个候选区域对应固定尺寸的特征向量 这一步可以参考 SPP-Net 是怎么让 CNN 实现输入任意尺寸图像 文中指出如果用4级空间金字塔, (1×1, 2×2, 3×3, 6×6, totally 50 bins),会产生一个 12,800维 (256×50)向量 4)将上面固定尺寸的特征向量输入全连接网络层进行分类。 5)对每一类目标使用一个 binary linear SVM 分类器,SVM的输入为全连接层的输出 6)使用回归器精细修正候选框位置

这里写图片描述
这里写图片描述

SPPNet缺点:它的训练要经过多个阶段,特征也要存在磁盘中,另外,SPP中的微调只更新spp层后面的全连接层,对很深的网络这样肯定是不行的。

Fast RCNN https://github.com/ShaoqingRen/fast-rcnn https://github.com/rbgirshick/fast-rcnn

Fast RCNN 的算法流程: 1)用selective search在一张图片中生成约2000个object proposal,即RoI。 2)把整幅图像输入到全卷积的网络中(这里也可以缩放图片的scale,得到图像金字塔,将多尺度图像送入卷积网络提取卷积特征) 3)在最后一个卷积层上对每个ROI求映射关系, 并用一个RoI pooling layer提取一个固定维度的特征向量。 (这里是借鉴了SPPNet中的 SPP网络层,比SPP网络层简单,只用一个尺度) 4)继续经过两个全连接层(FC)得到特征向量,RoI feature vector。 5)特征向量兵分两路,经由各自的全连接层(FC),得到两个输出向量: 第一个是分类,使用softmax,第二个是每一类的bounding box回归。 (这是一个亮点,以前都是分为两个步骤进行,现在统一到一个网络中进行训练,后面大家都这么干了)

这里写图片描述
这里写图片描述

SPP-Net在实现上无法同时微调在SPP layer两边的卷积层和全连接层, Fast RCNN 解决了这个问题。这里对照原文说一下: The root cause is that back-propagation through the SPP layer is highly inefficient when each training sample (i.e.RoI) comes from a different image, which is exactly how R-CNN and SPPnet networks are trained. The inefficiency stems from the fact that each RoI may have a very large receptive field, often spanning the entire input image. Since the forward pass must process the entire receptive field, the training inputs are large (often the entire image).

Fast RCNN 解决方法: We propose a more efficient training method that takes advantage of feature sharing during training. In Fast R-CNN training, stochastic gradient descent (SGD) mini-batches are sampled hierarchically, first by sampling N images and then by sampling R/N RoIs from each image. Critically, RoIs from the same image share computation and memory in the forward and backward passes. Making N small decreases mini-batch computation. For example, when using N = 2 and R = 128, the proposed training scheme is roughly 64× faster than sampling one RoI from 128 different images (i.e., the R-CNN and SPPnet strategy).

我们先来看看 Fast RCNN 是怎么做的,然后再回过头来看看 SPPNet又是怎么干的,这样一对比就比较容易理解。 在 Fast RCNN 训练中,每个mini-batches 是这样设计的,一共2张图像,从每张图像提取64个 RoI 候选区域,所以当我们完成一张图像卷积特征的提取,我们可以进行64次前向、后向计算,因为需要对每个RoI 进行学习。再来看看 R-CNN and SPPnet 是怎么做的,每个mini-batches 是这样设计的,一共128张不同图像,每个图像提取一个RoI 候选区域,所以当我们完成一张图像卷积特征的提取,我们可以进行1次前向、后向计算。所以要进行128个RoI训练,需要计算128张图像卷积特征。很明显 Fast RCNN 要比 R-CNN 和 SPPnet 快64倍。这里也可以看出 SPPnet 不能同时微调卷积和全连接层的参数主要是速度太慢。

Faster-R-CNN

Faster-R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

前面我们看到都有一个使用传统图像分割算法提取候选区域的步骤,从Fast RCNN 可以看出,候选区域的提取已经成为整个系统的计算瓶颈。于是提出了 Faster-R-CNN,使用了一个 Region Proposal Network (RPN) 完成了候选区域的提取,而且统一到整个网络中,可以进行端对端的训练和检测。

Faster-R-CNN算法由两大模块组成:1.PRN候选框提取模块 2.Fast R-CNN检测模块。其中,RPN是全卷积神经网络,用于提取候选框;Fast R-CNN基于RPN提取的proposal检测并识别proposal中的目标。

RPN网络的组成形式可以表示为VGG16+RPN,VGG16中用于特征提取的部分是13个卷积层(conv1_1—->conv5.3),不包括pool5及pool5后的网络层次结构。

RPN的实现方式:在conv5-3的卷积feature map上用一个n*n的滑窗(论文中作者选用了n=3,即3*3的滑窗)生成一个长度为256(对应于ZF网络)或512(对应于VGG网络)维长度的全连接特征。然后在这个256维或512维的特征后产生两个分支的全连接层:1.reg-layer,用于预测proposal的中心锚点对应的proposal的坐标x,y和宽高w,h;2.cls-layer,用于判定该proposal是前景还是背景。sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间。事实上,作者用全连接层实现方式介绍RPN层实现容易帮助我们理解这一过程,但在实现时作者选用了卷积层实现全连接层的功能。个人理解:全连接层本来就是特殊的卷积层,如果产生256或512维的fc特征,事实上可以用Num_out=256或512, kernel_size=3*3, stride=1的卷积层实现conv5-3到第一个全连接特征的映射。然后再用两个Num_out分别为2*9=18和4*9=36,kernel_size=1*1,stride=1的卷积层实现上一层特征到两个分支cls层和reg层的特征映射。注意:这里2*9中的2指cls层的分类结果包括前后背景两类,4*9的4表示一个Proposal的中心点坐标x,y和宽高w,h四个参数。采用卷积的方式实现全连接处理并不会减少参数的数量,但是使得输入图像的尺寸可以更加灵活。 (引用自 http://www.cnblogs.com/venus024/p/5717766.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档