rcnn解决了目标检测中的两个关键问题:
1、目标检测速度
这篇文章通过预先定义的提取一系列的可能的候选区域后,
仅在这些候选区域上提取特征进行目标判断,大大提高网络目标检测的速度(之前都是通过卷积在输入图形上提取特征)
2、训练集
解决了如何在小规模的标注数据集上进行大规模网络的训练的问题
R-CNN:突破了传统的目标检测算法的思想,为深度学在目标领域的首次成功突破:
该算法主要包括区域提名、归一化处理、特征提取、分类及回归等步骤。
R-CNN相对于传统算法有了质的提升,
但是也有缺点:候选框的数量众多,导致需要大量的运算、效率低、占用硬盘空间大、svm模型仍然需要优化等
Fast-RCNN和Faster-RCNN采用了自适应尺度池化对整个网络进行优化,从而规避了R-CNN中冗余的特征提取操作,提高了网络识别的准确率,未来的研究方向将是无需要预先提取候选框区域,这种方法更加迅速,其代表方法为YOLO和SSD
学习R-CNN的预备知识:
CNN:了解全连接层的原理,以及CNN网络中各个层的功能及结构
*NMS:了解非极大值一直的原理和目的
非极大值抑制举例:先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。
(1)从最大概率矩形框F开始,分别判断A-E中与F的重叠度IOU是否大于某个设定的阈值;
(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
就这样一直重复,找到所有被保留下来的矩形框。
*HOG:了解HOG特征的概念,掌握滑动窗口用法的用途
SVM:了解SVM的思想,了解支持向量机等分类算法
由于组合了region proposals和CNNs,所以将该方法称为R-CNN:带有CNN特性的regions
知识点:
Selective search:一种从原始图片中提取bounding box(边界框)的方法,主要思想:
- 使用Efficient Graph-Based Image Segmentation获取原始图片分割区域
- 根据各跟个区域的颜色、大小、纹理、吻合等方面的额相似度合并分割区域
NMS(non max suppression):本质是搜索局部极大值,抑制非极大值元素
物体检测中应用NMS算法的主要目的是消除冗余(框中区域IoU大于某个值,且置信度confidence小于最大置信度的某个大框)的框,找到最佳物体检测位置。
Hard negative mining method:
Hard mining就像是准备的错题集,错题集不会是每次所有做错的题目你都往上放。放上去的都是你没有掌握好的那些知识点(错的最多的),而这部分的学习对你是最有帮助的。
具体来说,假设要在一张厨房的图像里判断一致蜘蛛,由于厨房的图像里objects(负样本)可能有很多,蜘蛛(正样本)样本很少。这时候hard mining的意义就是选出那些对网络有帮助的负样本部分,而不是所有的负样本来训练网络。比如说,training过程中,被当前模型误判为蜘蛛最厉害的那些负样本会被挑出来参与loss运算和back propagation
R-CNN目标检测
- 选取一个网络训练一个分类模型(比如AlexNet),在大数据集上预训练
- 对模型在小数据及上做finetune:将分类数目从1000改为20、去掉最后一个全连接层
- 特征提取:使用ss提取所有的候选框,对于每一个区域,修正区域大小(resize)以适合cnn的输入(227*227),做一次前行运算,将第五个池化层输出存到硬盘(也就是候选框提取到的特征)
- 训练一个svm分类器来判断候选框里的物体的类别,bbox回归:每个类别对应一个svm,判断是不是属于这个分类,也就是positive,反之为negative
R-CNN目标检测包含三个模块
- Ss:选取不同大小的框,让框出现在不同的位置,得到这个框的判定得分,然后选出其中得分最高的那个框作为目标位置的预测
- cnn网络进行特征提取
- 类别相关的线性svm
Fine-tune说明:Cnn的主要表达能力主要来自卷积层,而不是更大更密集的全连接层。底层学习到的特征是通用的,在它之上的层大部分提升主要来自于学习特定领域的非线性分类器。
总结:
- R-CNN采用AlexNet,
- R-CNN采用ss技术进行region proposal
- R-CNN在ImageNet上进行预训练之后,利用成熟的权重参数在PASCAL VOC数据集上进行fine-tune
- R-CNN用CNN提取特战,然后用一系列的SVM做类别预测
- R-CNN的bbox位置回归基于DPM的灵感,自己训练一个线性回归模型
- R-CNN的语义分割采用CMPC生成Region