Rich feature hierarchies for accurate object detection and semantic segmentation
检测问题的一个特点是,我们不仅需要知道一张图片中是否包含目标对象,而且需要知道目标对象所处位置,有几种方式,一种是回归图中检测框的位置[38],但是准确率很低,一种是用滑动窗口的方法将图片切割成很多小块,再对小块做分析,但是对于CNN来说,每经过一层pooling,感受野就会变小,RCNN采用了一个五层卷积的结构,要求输入至少是195x195的尺寸,用滑窗不能保证这个输入大小。
Selective search是一种比较好的数据筛选方式,首先对图像进行过分割切成很多很多小块,然后根据小块之间的颜色直方图、梯度直方图、面积和位置等基本特征,把相近的相邻对象进行拼接,从而选出画面中有一定语义的区域。关于Selective Search的更多信息可以查阅这篇论文:Recognition using Regions(CVPR2009)
非极大值抑制(NMS)顾名思义就是抑制不是极大值的元素,搜索局部的极大值。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的NMS算法,而是用于在目标检测中用于提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。(转自知乎专栏:晓雷的机器学习笔记)
附录B中解释,其实一开始RBG他们是用SVM的正负样本定义来Fine tune CNN的,发现效果很差。SVM可以在小样本上就达到比较好的效果,但CNN不行,所以需要用上更多的数据来Fine tune,重叠率大于0.5的Region Proposals的数据作为正样本,可以带来30倍的数据,但是加入这些不精准的数据的代价是,检测时位置不够准确了(因为位置有些偏差的样本也被当做了正样本)。于是会有一个很自然的想法,如果有很多的精确数据,是不是可以直接用CNN加softmax输出21个分类,不用SVM做分类?RBG他们直接在这个分类方式上fine tune,发现这样做的准确率也很高(50.9%),但是不如用SVM做分类的结果(54.2%),一方面是因为正样本不够精确,另一方面是因为负样本没有经过hard mining,但至少证明,是有可能直接通过训练CNN来达到比较好的检测效果的,可以加快训练速度,并且也更加简洁优雅。
至此,整个训练和测试过程就介绍完毕了。