二、目标检测算法之R-CNN
1、R—CNN发展过程和各自的优缺点
1.1 R-CNN
(1)R-CNN原理
通过滑动窗口来检测不同的目标类型(从左到右、从上到下滑动窗口,利用分类识别目标),我们使用不同大小和宽高比的窗口。
这样就变成每张子图片输出类别以及位置,变成分类问题。但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应的框不一样,所以需要提前设定K个窗口(为了物体适应框不一样,所以这k个窗口大小是不一样的),每个窗口滑动提取M个,总共K x M 个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入 CNN 分类器中,
提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。
简而言之,当一张图片中存在多个目标时,我们需要想办法将其转变成多张固定大小的子图片,然后通过CNN提取特征,再进行类别分类(识别)和边框回归(后面会说)。这样,一个多目标的检测问题,就转变成了机器学习常见的多分类问题。
(2)R-CNN缺点
- 1、训练阶段多:步骤繁琐: 微调网络+训练SVM+训练边框回归器。
- 2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件。(VOC数据集的检测结果,因为SVM的存在)
- 3、处理速度慢: 使用GPU, VGG16模型处理一张图像需要47s。
- 4、图片形状变化:候选区域要经过crop/warp进行固定大小,无法保证图片不变形
1.2 Fast R-CNN
(1)Fast R-CNN原理
使用特征提取器(CNN)先提取整个图像的特征,然后将创建候选区域的方法直接应用到提取到的特征图上, 这些关注区域随后会结合对应的特征图以裁剪为特征图块,并用于目标检测任务中。我们使用 ROI 池化将特征图块转换为固定的大小,并馈送到全连接层进行分类和定位。
(2)Fast R-CNN优缺点
优点:
因为 Fast-RCNN 不会重复提取特征,因此它能显著地减少处理时间。
Fast R-CNN 最重要的一点就是包含特征提取器、分类器和边界框回归器在内的整个网络能通过多任务损失函数进行端到端的训练,这种多任务损失即结合了分类损失和定位损失的方法,大大提升了模型准确度
缺点:
Fast R-CNN 依赖于外部候选区域方法,如选择性搜索。但这些算法在 CPU 上运行且速度很慢。在测试中,Fast R-CNN 需要 2.3 秒来进行预测,其中 2 秒用于生成 2000 个 ROI。
1.2 Faster R-CNN
(1)Faster R-CNN原理
Faster R-CNN在Fast R-CNN的基础上用内部深层网络代替了候选区域方法。
(2)Faster R-CNN优缺点
优点:新的候选区域网络(RPN)在生成 ROI 时效率更高,并且以每幅图像 10 毫秒的速度运行。
拓展:
ROI 池化:
因为 Fast R-CNN 使用全连接层,全连接层同一批图像的输入必须是同一大小的,所以我们应用 ROI 池化将不同大小的 ROI 转换为固定大小。
(他会先对特征图分成好几个小块,然后对每个小块取最大值的出一个新的维度的特征值。)
2、R-CNN算法原理
2.1R-CNN步骤
步骤(以AlexNet网络为基准)
1.找出图片中可能存在目标的侯选区域region proposal
2.进行图片大小调整为了适应AlexNet网络的输入图像的大小227×227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成2000×4096维矩阵
3.将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000×20维矩阵
4.分别对2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum suppression)剔除重叠建议框,得到该列即该类中得分最高的一些建议框
5.修正bbox,对bbox做回归微调
2.2 候选区域
选择性搜索(SelectiveSearch,SS)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。
SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。 而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。
2.3 特征向量训练分类器SVM
假设原图片有2000个候选区,将其输入进一个CNN中(进行卷积、池化...得到各种抽象的特征),输出2000x4096的特征向量。此时找到N个(需要分类多少个找多少个,如分为20类)SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,即2000x4094的特征向量分别与N个不同类的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,,这样得出[2000, N]的得分矩阵,
每个SVM分类器做的事情
- 判断2000个候选区域是某类别,还是背景
2.3 非最大抑制(NMS)
NMS首先会对检测宽概率值进行排序,选出得分最高的,然后再计算LU面积大(也就是重叠率高)那些框进行删除。面对还有一些没有处理过的检测框再重新进行排序,然后选出得分最高的的,然后再计算这个同其他检测框的的LU面积,然后将LU面积大于某些预值的框进行删除,不断迭代,直到所有框都被处理过,输出最终框。
NMS改进的算法soft-NMS:认为直接通过采用预值进行判断太粗暴,变成了检测框位置的调整,对于低检测率的也能保证物体的性能。
2.4 R-CNN测试过程
- 输入一张图像,利用selective search得到2000个region proposal。
- 对所有region proposal变换到固定尺寸并作为已训练好的CNN网络的输入,每个候选框得到的4096维特征
- 采用已训练好的每个类别的svm分类器对提取到的特征打分,所以SVM的weight matrix(权重矩阵)是4096xN,N是类别数,这里一共有20个SVM,得分矩阵是2000x20
- 采用non-maximun suppression(NMS)去掉候选框
- 得到region proposal(oU超过某个阈值且IOU最大)进行边框回归。