目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN

在深度学习出现之前,传统的目标检测方法大概分为区域选择(滑窗)、特征提取(SIFT、HOG等)、分类器(SVM、Adaboost等)三个部分,其主要问题有两方面:一方面滑窗选择策略没有针对性、时间复杂度高,窗口冗余;另一方面手工设计的特征鲁棒性较差。

自深度学习出现之后,目标检测取得了巨大的突破,最瞩目的两个方向有:1 以RCNN为代表的基于Region Proposal的深度学习目标检测算法(RCNN,SPP-NET,Fast-RCNN,Faster-RCNN等);2 以YOLO为代表的基于回归方法的深度学习目标检测算法(YOLO,SSD等)。

这次对基于Region Proposal的深度学习目标检测算法进行介绍,作为知识储备。

RCNN

2014年,RBG(Ross B. Girshick)使用Region Proposal + CNN代替传统目标检测使用的滑动窗口+手工设计特征,设计了R-CNN框架,使得目标检测取得巨大突破,并开启了基于深度学习目标检测的热潮。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第1张图片
流程框图:
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第2张图片
R-CNN的简要步骤如下

(1) 输入测试图像

(2) 利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal

(3) 因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征

(4) 将每个Region Proposal提取到的CNN特征输入到SVM进行分类

具体步骤则如下

步骤一:训练(或者下载)一个分类模型(比如AlexNet)
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第3张图片
步骤二:对该模型做fine-tuning
  • 将分类数从1000改为20,比如20个物体类别 + 1个背景
  • 去掉最后一个全连接层
  目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第4张图片
步骤三:特征提取
  • 提取图像的所有候选框(选择性搜索Selective Search)
  • 对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘
  目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第5张图片
步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别
每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative。

比如下图,就是狗分类的SVM
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第6张图片
步骤五:使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第7张图片

算法特点

1 使用Selective Search提取Proposes,然后利用CNN等识别技术进行分类。

2 使用识别库进行预训练,而后用检测库调优参数。

3 使用SVM代替了CNN网络中最后的Softmax,同时用CNN输出的4096维向量进行Bounding Box回归。

4 流程前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用;同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。

存在问题
1 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器。

2 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件。

3 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。

有没有方法提速呢?答案是有的,这2000个region proposal不都是图像的一部分吗,那么我们完全可以对图像提一次卷积层特征,然后只需要将region proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个region proposal的卷积层特征输入到全连接层做后续操作。

但现在的问题是每个region proposal的尺度不一样,而全连接层输入必须是固定的长度,所以直接这样输入全连接层肯定是不行的。SPP Net恰好可以解决这个问题。

SPP-Net

SPP:Spatial Pyramid Pooling(空间金字塔池化)

SPP-Net是出自2015年发表在IEEE上的论文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》。

众所周知,CNN一般都含有卷积部分和全连接部分,其中,卷积层不需要固定尺寸的图像,而全连接层是需要固定大小的输入。

所以当全连接层面对各种尺寸的输入数据时,就需要对输入数据进行crop(crop就是从一个大图扣出网络输入大小的patch,比如227×227),或warp(把一个边界框bounding box的内容resize成227×227)等一系列操作以统一图片的尺寸大小,比如224 * 224(ImageNet)、32 * 32(LenNet)、96 * 96等。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第8张图片
所以才如你在上文中看到的,在R-CNN中,“因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN”。

但warp/crop这种预处理,导致的问题要么被拉伸变形、要么物体不全,限制了识别精确度。没太明白?说句人话就是,一张16:9比例的图片你硬是要Resize成1:1的图片,你说图片失真不?

SPP Net的作者Kaiming He等人逆向思考,既然由于全连接FC层的存在,普通的CNN需要通过固定输入图片的大小来使得全连接层的输入固定。那借鉴卷积层可以适应任何尺寸,为何不能在卷积层的最后加入某种结构,使得后面全连接层得到的输入变成固定的呢?

流程框图
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第9张图片
算法特点

1 通过Spatial Pyramid Pooling解决了深度网络固定输入层尺寸的这个限制,使得网络可以享受不限制输入尺寸带来的好处。

SPP Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。

换句话说,在普通的CNN结构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。

简言之,CNN原本只能固定输入、固定输出,CNN加上SSP之后,便能任意输入、固定输出。神奇吧?

ROI池化层一般跟在卷积层后面,此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出则是固定维数的向量,然后给到全连接FC层。
在这里插入图片描述

2 解决了RCNN速度慢的问题,不需要对每个Proposal(2000个左右)进行Wrap或Crop输入CNN提取Feature Map,只需要对整图提一次Feature Map,然后将Proposal区域映射到卷积特征层得到全链接层的输入特征。

在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。

而SPP Net根据这个缺点做了优化:只对原图进行一次卷积计算,便得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层,完成特征提取工作。

如此这般,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次卷积,从而节省了大量的计算时间,比R-CNN有一百倍左右的提速。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第10张图片

几个要点

一、ROI的在特征图上的对应的特征区域的维度不满足全连接层的输入要求怎么办?

作者使用Spatial Pyramid Pooling解决了该问题。如下图所示,假设原图输入是224x224,对于conv5出来后的输出是13x13x256的,可以理解成有256个这样的Filter,每个Filter对应一张13x13的Reponse Map。如果像上图那样将Reponse Map分成1x1(金字塔底座),2x2(金字塔中间),4x4(金字塔顶座)三张子图,分别做Max Pooling后,出来的特征就是(16+4+1)x256 维度。如果原图的输入不是224x224,出来的特征依然是(16+4+1)x256维度。这样就实现了不管图像尺寸如何池化n的输出永远是 (16+4+1)x256 维度。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第11张图片

二、原始图像的ROI如何映射到特征图(一系列卷积层的最后输出)

要搞定这个问题,需要首先清楚感受野等概念和计算方法。下面从感受野、感受野上面的坐标映射及原始图像的ROI如何映射三方面阐述。

1 感受野

① 概念

在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图(Feature Map)上的像素点在原始图像上映射的区域大小。

② 如何计算
o u t p u t f i e l d s i z e = ( i n p u t f i e l d s i z e − k e r n e l s i z e + 2 ∗ p a d d i n g ) / s t r i d e + 1 output field size=( input field size - kernel size + 2*padding ) / stride + 1 outputfieldsize=(inputfieldsizekernelsize+2padding)/stride+1

其中output field size 是卷积层的输出,input field size 是卷积层的输入,反过来卷积层的输入(也即前一层的感受野) = ?答案必然是:

i n p u t f i e l d s i z e = ( o u t p u t f i e l d s i z e − 1 ) ∗ s t r i d e − 2 ∗ p a d d i n g + k e r n e l s i z e input field size = (output field size - 1)* stride - 2*padding + kernel size inputfieldsize=outputfieldsize1stride2padding+kernelsize

2 感受野上的坐标映射

① 计算公式

对于Convolution/Pooling Layer:

p i = s i ⋅ p i + 1 + [ ( k i − 1 ) / 2 − p a d d i n g ] p_i=s_i \cdot p_{i+1}+[(k_i-1)/2-padding] pi=sipi+1+[(ki1)/2padding]

对于Neuronlayer(ReLU/Sigmoid/…):

p i = p i + 1 p_i=p_{i+1} pi=pi+1

其中 p i p_i pi为第i层感受野上的坐标, s i s_i si为Stride的大小, k i k_i ki为感受野的大小。

② 例子

上面是计算任意一个Layer输入输出的坐标映射关系,如果是计算任意Feature Map之间的关系,只需要用简单的组合就可以得到,下图是一个简单的例子:
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第12张图片

Fast-RCNN

SPP Net真是个好方法,R-CNN的进阶版Fast R-CNN就是在R-CNN的基础上采纳了SPP Net方法,对R-CNN作了改进,使得性能进一步提高。

R-CNN与Fast R-CNN的区别有哪些呢?

先说R-CNN的缺点:即使使用了Selective Search等预处理步骤来提取潜在的bounding box作为输入,但是R-CNN仍会有严重的速度瓶颈,原因也很明显,就是计算机对所有region进行特征提取时会有重复计算,Fast-RCNN正是为了解决这个问题诞生的。

流程框图
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第13张图片
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第14张图片
与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归Bounding Box Regression直接加入到CNN网络中训练.

(1) ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7 * 7 * 512维度的特征向量作为全连接层的输入。

换言之,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量,而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。

(2) R-CNN训练过程分为了三个阶段,而Fast R-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去Region Proposal提取阶段)。

也就是说,之前R-CNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast R-CNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。

所以,Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal + CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster R-CNN做下了铺垫。

算法特点

1 Fast-RCNN直接使用Softmax替代了RCNN中SVM进行分类,同时在网络中加入了多任务函数边框回归,实现了端到端的训练(除SS Region Proposal阶段)。

2 借鉴SPP-NET,提出了一个ROI层。ROI Pooling Layer实际上是SPP-NET的一个精简版,SPP-NET对每个Proposal使用了不同大小的金字塔映射,而ROI Pooling Layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有Region Proposal对应了一个7 * 7 * 512维度的特征向量作为全连接层的输入。

3 使用了不同于SPP-NET的训练方式,训练时,把同张图片的Prososals作为一批进行学习,而Proposals的坐标直接映射到conv5层上,这样相当于一张图片的所有训练样本只卷积了一次。

4 论文在回归问题上并没有用很常见的2范数作为回归,而是使用所谓的Smooth_L1范数作为损失函数。

5 论文将比较大的全链接层用SVD分解了一下使得检测的时候更加迅速。

几个要点

一、联合训练

联合训练(Joint Training)指如何将分类和边框回归联合到一起在CNN阶段训练,主要难点是损失函数的设计。Fast-RCNN中,有两个输出层:第一个是针对每个ROI区域的分类概率预测 p = ( p 0 , p 1 , ⋯   , p K ) p=(p_0, p_1, \cdots, p_K) p=(p0,p1,,pK),;第二个则是针对每个ROI区域坐标的偏移优化, t k = ( t x k , t y k , t w k , t h k ) t^k = (t^k_x, t^k_y, t^k_w, t^k_h) tk=(txk,tyk,twk,thk) , 0 ≤ k ≤ K ,0 \le k \le K ,0kK是多类检测的类别序号。每个训练ROI都对应着真实类别u和边框回归目标 v = ( v x , v y , v w , v h ) v=(v_x,v_y,v_w,v_h) v=(vx,vy,vw,vh),对于类别u预测边框为 t u = ( t x u , t y u , t w u , t h u ) t^u=(t_x^u,t_y^u,t_w^u,t_h^u) tu=(txu,tyu,twu,thu)
,使用多任务损失L来定义ROI上分类和边框回归的损失:

L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u,t^u,v)=L_{cls}(p,u)+\lambda [u \ge 1]L_{loc}(t^u,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)

其中 L c l s ( p , u ) = − log ⁡ p u L_{cls}(p,u)=-\log p_u Lcls(p,u)=logpu,表示真实类别的log损失。当u≥1时,[u≥1]
的值为1,否则为0。下面将重点介绍多任务损失中的边框回归部分(对应坐标偏移优化部分)。

二、边框回归

假设对于类别u,在图片中标注的真实坐标和对应的预测值理论上两者越接近越好,相应的损失函数为:
L l o c ( t u , v ) = ∑ i ∈ x , y , w , h smooth L 1 ( t i u − v i ) L_{loc}(t^u, v) = \sum_{i \in {x, y, w, h}} \text{smooth}_{L_1}(t_i^u- v_i) Lloc(tu,v)=ix,y,w,hsmoothL1(tiuvi)

其中

smooth L 1 ( x ) = { 0.5 x 2 ∣ x ∣ ≤ 1 ∣ x ∣ − 0.5 otherwise \text{smooth}_{L_1}(x) = \left \{ \begin{aligned} & 0.5x^2 & |x| \le 1 \\ &|x|-0.5 & \text{otherwise}\end{aligned} \right. smoothL1(x)={0.5x2x0.5x1otherwise

Fast-RCNN在上面用到的鲁棒Smooth_L1函数对外点比RCNN和SPP-NET中用的L2函数更为鲁棒,该函数在(−1,1)之间为二次函数,其他区域为线性函数,函数直观图如下图所示。

目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第15张图片

存在问题

使用Selective Search提取Region Proposals,没有实现真正意义上的端对端,操作也十分耗时。

Faster-RCNN

Fast R-CNN存在的问题:存在瓶颈:选择性搜索,找出所有的候选框,这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢?

解决:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了。

所以,rgbd在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变化问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)。

具体做法:
  • 将RPN放在最后一个卷积层的后面
  • RPN直接训练得到候选区域

流程图
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第16张图片
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第17张图片

算法特点

1 提出了Region Proposal Network(RPN),将Proposal阶段和CNN分类融到了一起,实现了一个完全的End-To-End的CNN目标检测模型。RPN可以快速提取高质量的Proposal,不仅加快了目标检测速度,还提高了目标检测性能。

2 将Fast-RCNN和RPN放在同一个网络结构中训练,共享网络参数。

几个要点

一、Region Proposal Network

Region Proposal Network(RPN)的核心思想是使用卷积神经网络直接产生Region Proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,借助Anchor机制和边框回归可以得到多尺度多长宽比的Region Proposal。下图是RPN的网络结构图。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第18张图片

在ZF网络模型下,给定输入图像(假设分辨率为6001000),经过卷积操作得到最后一层的卷积特征图(大小约为4060)。在这个特征图上使用3 * 3的卷积核(滑动窗口)与特征图进行卷积,最后一层卷积层共有256个Feature Map,那么这个3 * 3的区域卷积后可以获得一个256维的特征向量,后边接Cls Layer和Reg Layer分别用于分类和边框回归(跟Fast RCNN类似,只不过这里的类别只有目标和背景两个类别)。3 * 3滑窗对应的每个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的Region Proposal,这种映射的机制称为Anchor。所以对于这个40*60的Feature Map,总共有约20000(40 * 60 * 9)个Anchor,也就是预测20000个Region Proposal。下图是51 * 39个Anchor中心,以及9种Anchor示例。

目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第19张图片

这样设计的好处是什么?虽然现在也是用的滑动窗口策略,但是,滑动窗口操作是在卷积层特征图上进行的,维度较原始图像降低了16*16倍(16如何得到的可参见前文);多尺度采用了9种Anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,所以即便是这9种Anchor外的窗口也能得到一个跟目标比较接近的Region Proposal。

二、RPN的损失函数

损失函数定义为:

L ( p i t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L({p_i}{t_i}) = \frac{1}{N_{cls}} \sum_i L_{cls}(p_i, p_i^*) +\lambda \frac{1}{N_{reg}} \sum_i p_i^* L_{reg}(t_i, t_i^*) L(piti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)

三、网络的训练

如果是分别训练两种不同任务的网络模型,即使它们的结构、参数完全一致,但各自的卷积层内的卷积核也会向着不同的方向改变,导致无法共享网络权重,Faster-RCNN提出了三种可能的方式:

1 Alternating Training:此方法其实就是一个不断迭代的训练过程,既然分别训练RPN和Fast-RCNN可能让网络朝不同的方向收敛,那么我们可以先独立训练RPN,然后用这个RPN的网络权重对Fast-RCNN网络进行初始化,并且用之前RPN输出Proposal作为此时Fast-RCNN的输入,之后不断迭代这个过程,即循环训练RPN、Fast-RCNN。

2 Approximate Joint Training:这里与前一种方法不同,不再是串行训练RPN和Fast-RCNN,而是尝试把二者融入到一个网络内,具体融合的网络结构如下图所示,可以看到,Proposals是由中间的RPN层输出的,而不是从网络外部得到。需要注意的一点,名字中的"Approximate"是因为“This solution ignores the derivative w.r.t. the proposal boxes’ coordinates that are also network responses”,也就是说,反向传播阶段RPN产生的Cls Score能够获得梯度用以更新参数,但是Proposal的坐标预测则直接把梯度舍弃了,这个设置可以使Backward时该网络层能得到一个解析解(Closed Results),并且相对于Alternating Traing减少了25-50%的训练时间。

3 Non-approximate Training:上面的Approximate Joint Training把Proposal的坐标预测梯度直接舍弃,所以被称作Approximate,那么理论上如果不舍弃是不是能更好的提升RPN部分网络的性能呢?作者把这种训练方式称为“ Non-approximate Joint Training”,但是此方法只是一笔带过,表示“This is a nontrivial problem and a solution can be given by an “RoI warping” layer as developed in [15], which is beyond the scope of this paper”。

作者没有用上面提到的三种可能方法,而是使用了4-Step Alternating Training,具体步骤如下。

1 用ImageNet模型初始化,独立训练一个RPN网络;

2 仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的Proposal作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;

3 使用第二步的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN、Fast-RCNN共享的那些卷积层的Learning Rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;

4 仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个Unified Network,继续训练,Fine Tune Fast-RCNN特有的网络层,此时,该网络已经实现我们设想的目标,即网络内部预测Proposal并实现检测的功能。

上述步骤图示如下。
目标检测之RCNN,SPPNet,Fast-RCNN,Faster-RCNN_第20张图片

最后总结一下各大算法的步骤:
RCNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置

Fast R-CNN
1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.对整张图片输进CNN,得到feature map
3.找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层
4.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
5.对于属于某一类别的候选框,用回归器进一步调整其位置

Faster R-CNN
1.对整张图片输进CNN,得到feature map
2.卷积特征输入到RPN,得到候选框的特征信息
3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框,用回归器进一步调整其位置

简言之,即如本文开头所列
R-CNN(Selective Search + CNN + SVM)
SPP-net(ROI Pooling)
Fast R-CNN(Selective Search + CNN + ROI)
Faster R-CNN(RPN + CNN + ROI)

总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于Region Proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。

你可能感兴趣的:(深度学习,目标检测与跟踪)