1.3. SVM分类
通过上述卷积神经网络获取候选区域的特征向量,进一步使用SVM进行物体分类,关键知识点如下:
使用了一个SVM进行分类:向SVM输入特征向量,输出类别得分
用于训练多个SVM的数据集是ImageNet数据
将2000×4096维特征(2000个候选框,每个候选框获得4096的特征向量)与20个SVM组成的权值矩阵4096×20相乘(20种分类,SVM是二分类器,每个种类训练一个SVM,则有20个SVM),获得2000×20维矩阵表示每个建议框是某个物体类别的得分

分别对上述2000×20维矩阵中每列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些候选框;
SVM训练:
样本:

由于SVM是二分类器,需要为每个类别训练单独的SVM;
SVM训练时,输入正负样本是在AlexNet CNN网络输出的4096维特征向量,输出为该类的得分
由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本
1.4 边框修正
使用一个回归器进行边框回归:输入为卷积神经网络pool5层的4096维特征向量,输出为x、y方向的缩放和平移,实现边框的修正。在进行测试前仍需回归器进行训练。 回归器训练
样本:

在2014年R-CNN横空出世的时候,颠覆了以往的目标检测方案,精度大大提升。对于R-CNN的贡献,可以主要分为两个方面: 1) 使用了卷积神经网络进行特征提取 2) 使用bounding box regression进行目标包围框的修正 但是,我们来看一下,R-CNN有什么问题: 1) 耗时的selective search,对一张图像,需要花费2s 2) 耗时的串行式CNN前向传播,对于每一个候选框,都需经过一个AlexNet提取特征,为所有的候选框提取特征大约花费47s 3) 三个模块(CNN特征提取、SVM分类和边框修正)是分别训练的,并且在训练的时候,对于存储空间的消耗很大
2. Fast R-CNN
面对R-CNN的缺陷,Ross在2015年提出的Fast R-CNN进行了改进,下面我们来概述一下Fast R-CNN的解决方案:

首先还是采用selective search提取2000个候选框RoI
使用一个卷积神经网络对全图进行特征提取
使用一个RoI Pooling Layer在全图特征上摘取每一个RoI对应的特征
分别经过为21和84维的全连接层(并列的,前者是分类输出,后者是回归输出) Fast R-CNN通过CNN直接获取整张图像的特征图,再使用RoI Pooling Layer在特征图上获取对应每个候选框的特征,避免了R-CNN中的对每个候选框串行进行卷积(耗时较长)。
2.1 RoI Pooling Layer
对于每个RoI而言,需要从共享卷积层获取的特征图上提取对应的特征,并且送入全连接层进行分类。因此,RoI Pooling主要做了两件事,第一件是为每个RoI选取对应的特征,第二件事是为了满足全连接层的输入需求,将每个RoI对应的特征的维度转化成某个定值。RoI Pooling示意图如下所示:

如上图所示,对于每一个RoI,RoI Pooling Layer将其映射到特征图对应位置,获取对应特征。另外,由于每一个RoI的尺度各不相同,所以提取出来的特征向量region proposal维度也不尽相同,因此需要某种特殊的技术来做保证输入后续全连接层的特征向量维度相同。ROI Pooling的提出便是为了解决这一问题的。其思路如下:
将region proposal划分为目标H×W大小的分块
对每一个分块中做MaxPooling(每个分块中含有多个网格,每个分块获取一个特征值)
将所有输出值组合起来便形成固定大小为H×W的feature map

Fast R-CNN的贡献可以主要分为两个方面:
取代R-CNN的串行特征提取方式,直接采用一个CNN对全图提取特征(这也是为什么需要RoI Pooling的原因)。
除了selective search,其他部分都可以合在一起训练。 Fast R-CNN也有缺点,体现在耗时的selective search还是依旧存在。

