一.RCNN -> Fast-RCNN -> Faster-RCNN的发展
在CNN之前,对象检测这一问题基本是遵循着“设计手工特征(Hand-crafted feature)+分类器”的思路,而且由于存在着区域搜索的步骤,所以可以认为是计算机用一个小的矩形窗口不断在图像上滑动、缩放,然后用分类器预测当前滑动窗口所在区域是否存在一个感兴趣的对象。
—> 使用CNN的特征,用深度神经网络做检测
RCNN算法的核心思想就是对每个区域通过CNN提取特征,然后接上一个分类器预测这个区域包含一个感兴趣对象的置信度。神经网络仅仅是一个图片分类的工具而已,只不过不是整图分类,而是ROI区域的分类。
RCNN处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression。
—> 解决RCNN的速度瓶颈(计算机对所有region进行特征提取时会有重复计算),把用selective search等proposal提取算法得到的输入box坐标,放到深度神经网络里然后进行一些优化。
Fast-RCNN提出了一个可以看做单层sppnet的网络层,叫做ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量。对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。
Fast-RCNN处理流程中把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,这两个任务能够共享卷积特征,并相互促进。
Fast-RCNN成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望。
—> 把region proposal部分从网络外边嵌入了网络里边,也放到GPU上
Faster-RCNN出现了一个end-to-end的CNN对象检测模型。作者提出,网络中的各个卷积层特征其实可以用来预测类别相关的region proposal,不需要事先执行诸如selective search之类的算法,把region proposal提取和Fast-RCNN部分融合进了一个网络模型 (区域生成网络 RPN层)。
二、RCNN算法介绍
1. 相关概念介绍
交并化IOU
IOU(intersection-over-union)简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。可以简单的理解为: 检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU。
bounding box的定位精度评价公式IOU:
IOU=(A∩B)/(A∪B)
非极大值抑制
RCNN算法会从一张图片中找出n多个可能是物体的矩形框,然后为每个矩形框为做类别分类概率。判别哪些矩形框是没用的方法使用的是非极大值抑制。
如定位一个车辆,先假设有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是保留下来的第二个矩形框。
就这样一直重复,找到所有被保留下来的矩形框。
2. 总体思路
首先输入一张图片,先定位出2000个物体候选框,然后采用CNN提取每个候选框中图片的特征向量,特征向量的维度为4096维,接着采用svm算法对各个候选框中的物体进行分类识别。也就是总个过程分为三个程序: