目录
1. 介绍
2. R-CNN
2.1 SS(Selective Search) 算法 生成候选框
2.2 CNN 提取特征
2.3 SVM 分类
非极大值抑制
2.4 回归器微调候选框
3. R-CNN 的缺点
1. 介绍
目标识别的发展历史如图
2. R-CNN
RCNN 是两阶段目标检测的鼻祖,类似于深度学习开山之作AlexNet那种地位
目标检测的可以分为两种:one-stage和two-stage
RCNN的算法流程为:
2.1 SS(Selective Search) 算法 生成候选框
因为RCNN是two-stage的算法,这种算法的特点是先生成候选框,然后根据生成的候选框去进一步的分类或者调整
这些候选框生成有很多的方法,比如根据聚类算法将类似灰度值的作为同一个区域,这样就可以产生一个阈值的效果。根据不同的区域,生成不同的候选框,RCNN总共生成2000个矩形候选框
2.2 CNN 提取特征
RCNN成功因素之一就是使用了深度网络进行特征提取,而不是传统的手工涉及特征的方法
当时深度学习的开山之作为AlexNet,因为当时的局限性,特征提取后的size是固定的,为了和全连接层保持一致,所以这里需要固定的输入大小。
这里用的是AlexNet 网络,所以输入图像的大小为227*227。而AlexNet特征提取层的输出为4096的向量,所以这里的输出为2000*4096
2.3 SVM 分类
CNN 提取的特征送入SVM进行类别的分类,SVM是一个二分类的分类器
这里的分类类别是20,所以最后会产生一个2000*20的输出。2000类似于batch,20为分类个数
矩阵的运算过程为:
非极大值抑制
经过SVM分类器后的输出维度是2000*20,意思是每个不同的类别都有2000个候选框,接下来进行非极大值抑制将无用的候选框去除
例如,假设第一列是cat这个类别,那么在2000个中寻找预测最准的那个框。然后将这个预测准的候选框与周围的候选框求iou,去除iou > 给定阈值的候选框
目标检测首先要检测的准,也就是分类的问题,所以在2000*20的每一列里面找到预测最准的候选框。既然这个候选框识别这么准了,就将周围的候选框框的较准的也去掉,因为周围候选框的识别准确率不够高,可以去除重叠的候选框。
2.4 回归器微调候选框
因为SS算法生成的候选框虽然可以根据类似聚类的算法产生,但还是具有一定的随机性
这里使用一个回归器对候选框进行微调
回归器可以理解为一个回归模型,会产生连续的预测值。
将生成的候选框和真实的标签框通过最小二乘算法,然后一直训练,回归器就可以尽可能的将产生好的候选框去拟合真实的标签框
3. R-CNN 的缺点
RCNN算法的流程如下
可以发现,RCNN的实现步骤很繁琐,而且相互之间的依赖程度很高,导致运行速度很慢。