目标检测基础知识(2)–R-CNN
本文是目标检测基础知识相关的第2次学习记录,主要记录R-CNN算法相关的知识。
目录
0.参考博客
1.背景
对于存在多个目标的检测问题,不能确定图片中具体有多少个物体,所以不能设置一个超参数来限定每次输出多少个物体以及物体的位置信息,所以提出了一种目标检测的Overfeat模型。
2.滑动窗口
通过设置滑动窗口模型,用窗口从左到右,从上到下,对原始图像进行遍历,并对每个窗口中的图像类别进行判定,是否属于某种类别,通过这种方式,将图像中的目标检测问题转化成了图像的分类问题。使用滑动窗口的步骤表述为:
- 首先定义若干个窗口的大小,为K个;
- K个窗口分别对图像进行滑动遍历,每个窗口需要在图片上滑动M次;
- 一幅图需要滑动K×M次。
滑动窗口是一种采用暴力破解的方法,计算代价较大。
3.R-CNN模型
2014年的CVPR会议中提出,论文链接:Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation,可参照博文:目标检测R-CNN模型。不适用暴力方法,而是采用候选区域方法(region proposal model),实现20个类别的物体分类。
R-CNN模型的实现步骤(以AlexNet网络为基准):
- 对于一张图片,找出默认2000个候选区域;
- 2000个候选区域做大小变换,输入AlexNet当中,得到特征向量,大小为2000×4096;
- 经过20个类别的SVM分类器,对于2000个候选区域做判断,得到一个[2000,20]的得分矩阵;
- 对于2000个候选区域做NMS(非极大值抑制),去处不好的、重叠度较高的一些候选区域,得到剩下的分数高的、结果好的区域。
- 修正候选框,做bbox的回归微调。
4.候选区域选择
候选区域也可以成为是感兴趣区(Region of Interest, ROI),通过选择性搜索(selective search)的方法在一张图片上提取出来约2000个候选区域,由于候选区域的长宽各不相同,不能直接输入到AlexNet中,所以要对2000个候选区做大小变换,将候选区大小都调整成为227×227的尺寸。
R-CNN选用SVM进行二分类,假设检测20个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000,20]的得分矩阵。
5.非极大值抑制(NMS)
NMS目的:筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框。
RCNN预测2000个候选框,得到3个(比如有3个ground truth)比较准确的候选框。
非极大值抑制的过程:
- 对于所有的2000个候选区域得分进行概率筛选;
- 然后对剩余的候选框,每个类别进行IoU(交并比)>= 0.5 筛选;
- 假设现在滑动窗口有:A、B、C、D、E 5个候选框,
- 第一轮:假设B是得分最高的,与B的IoU>0.5删除。现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果;
- 第二轮:AC中,A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果;
- 最终结果为在这个5个中检测出了两个目标为A和B。
6.修正候选区域(边框回归)
通过非最大抑制筛选出来的候选框不一定就非常准确怎么办?R-CNN提供了这样的方法,建立一个bbox regressor回归用于修正筛选后的候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了,使用边框回归的方法进行修正的过程可以表示为下图(线性回归):
7.目标检测评估指标
对目标检测的评估指标主要有2个,分别是IOU(Intersection over Union, 交并比)和平均精确率(mean average precision, map)。
- IOU交并比:计算公式为IOU = (Area of Overlap)/(Area of Union) ,并且IOU的取值范围在0~1。
- 平均精确率:是物体分类准确度的考量标准,定义为多个分类任务的AP的平均值,计算方法为:map=所有类别的AP之和/类别的总个数,以20个类别的检测为例,map=(AP1+AP2+AP3+…+AP20)/20,对于每个类别计算其AP值。
8.R-CNN过程总结
对整个R-CNN过程进行总结如下: