前言:
看很很多关于目标检测的论文,都没有做一个总结,近期要做一个全面的总结,也算是回顾一下。希望可以对自己有帮助。
一、基于R-CNN的目标检测
1.相关背景
本论文来源《Rich feature hierarchies for Accurate Object Detection and Segmentation》是2014年在CVPR上的经典论文。是物体检测领域曾经获得state-of-art精度的经典文献。又称R-CNN(Regions with Convolutional Neural Network Features)。
该论文的思想, 改变目标检测的常规思路,之后很多的文献关于深度学习的目标检测的算法,基本上都是基于R-CNN的思想,比如:ssp-net (《spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》深卷积网络中的空间金字塔汇聚用于视觉识别),所以学习R-CNN是学习目标检测的必经之路。
物体检测和图片分类的区别:图片分类不需要定位,而物体检测需要定位出物体的位置,也就是相当于把物体的bbox检测出来,还有一点物体检测是要把所有图片中的物体都识别定位出来。最开始的时候分不清楚检测和分类到底有什么区别。在R-CNN给出了答案。 详细理解如下图:
二、R-CNN的相关基础知识
1. 有监督和无监督学习
(1)无监督学习(Unsupervised learning)
无监督学习指我们事先没有任何训练数据样本,需要直接对数据进行建模。不需要人工标注数据。比如:远古时期,我们的祖先打猎吃肉,他们本身之前是没有经验而言的,当有人用很粗的石头去割动物的皮的时候,发现很难把皮隔开,但是又有人用很薄的石头去割,发现比别人更加容易的隔开动物的毛皮,于是,第二天、第三天、……,他们就知道了需要寻找比较薄的石头片来割。这些就是无监督学习的思想,外界没有经验和训练数据样本提供给它们,完全靠自己摸索。eg:栈式自编码、DBM
2)有监督预训练(Supervised learning)
通过已有的训练样本(即已知数据以及其对应的输出)来训练,从而得到一个最优模型,再利用这个模型将所有新的数据样本映射为相应的输出结果,对输出结果进行简单的判断从而实现分类的目的,那么这个最优模型也就具有了对未知数据进行分类的能力。上学的时候,老师教认字、数学公式啊、英语单词等等,我们在下次碰到的时候,也能区分开并识别它们。这就是监督学习。
在目标分类上,有监督的预训练,也可以叫做迁移学习,说的简单一点就是把一个任务训练好的参数,拿到另外一个任务,作为神经网络的初始参数值,这样相比于你直接采用随机初始化的方法,精度可以有很大的提高。图片分类标注好的训练数据非常多,但是物体检测的标注数据却很少,如何用少量的标注数据,训练高质量的模型,这就是文献最大的特点,这篇paper采用了迁移学习的思想。文献就先用了ILSVRC2012这个训练数据库(这是一个图片分类训练数据库),先进行网络的图片分类训练。这个数据库有大量的标注数据,共包含了1000种类别物体,因此预训练阶段cnn模型的输出是1000个神经元,或者我们也直接可以采用Alexnet训练好的模型参数。
2. IOU的定义与理解
3.非极大值抑制(Non-Maximum Suppression,NMS)
定义: 顾名思义就是抑制不是极大值得元素,可以理解为局部最大搜索。下面是NMS的示意图,大概流程如下:
因为一会儿讲RCNN算法,会从一张图片中找出n多个可能是物体的矩形框,然后为每个矩形框为做类别分类概率。
NMS 原理