目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中,需要对多个目标进行实时处理时,目标自动提取和识别就显得特别重要。
随着计算机技术的发展和计算机视觉原理的广泛应用,利用计算机图像处理技术对目标进行实时跟踪研究越来越热门,对目标进行动态实时跟踪定位在智能化交通系统、智能监控系统、军事目标检测及医学导航手术中手术器械定位等方面具有广泛的应用价值。
(图片来自网络)
传统的目标检测与识别方法主要可以表示为:目标特征提取->目标识别->目标定位。
这里所用到的特征都是认为设计的,例如SIFT (尺度不变特征变换匹配算法Scale Invariant Feature Transform), HOG(方向梯度直方图特征Histogram of Oriented Gradient), SURF( 加速稳健特征Speeded Up Robust Features),等。通过这些特征对目标进行识别,然后再结合相应的策略对目标进行定位。
如今,基于深度学习的目标检测与识别成为主流方法,主要可以表示为:图像的深度特征提取->基于深度神经网络的目标识别与定位,其中主要用到深度神经网络模型是卷积神经网络CNN。
目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类:
基于区域建议的目标检测与识别算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;
基于回归的目标检测与识别算法,如YOLO, SSD;
基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法。
目标检测的基本思路:同时解决定位(localization) + 识别(Recognition)。
多任务学习,带有两个输出分支。一个分支用于做图像分类,即全连接+softmax判断目标类别,和单纯图像分类区别在于这里还另外需要一个“背景”类。另一个分支用于判断目标位置,即完成回归任务输出四个数字标记包围盒位置(例如中心点横纵坐标和包围盒长宽),该分支输出结果只有在分类分支判断不为“背景”时才使用。详细结构如下图所示:
两阶段(Two Stages):首先由算法(algorithm)生成一系列作为样本的候选框,再通过卷积神经网络进行样本(Sample)分类。
常见的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。
一阶段(One Stage ):不需要产生候选框,直接将目标框定位的问题转化为回归(Regression)问题处理(Process)。
常见的算法有YOLO、SSD等等。
基于候选区域(Region Proposal)的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;
使用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)。在选择性搜索(selective search,SS)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,首先对较小的组进行分组。继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。
(图片来自网络)
端到端指的是输入是原始数据,输出是最后的结果,原来输入端不是直接的原始数据,而是在原始数据中提取的特征,这一点在图像问题上尤为突出,因为图像像素数太多,数据维度高,会产生维度灾难,所以原来一个思路是手工提取图像的一些关键特征,这实际就是就一个降维的过程。
端到端的目标检测算法
基于端到端(End-to-End),无需候选区域(Region Proposal)的,如YOLO、SSD。
对于一张图片中的c类目标
算法检测出来 T 个c类的目标
而真值是 TP+FN 个c类的目标
检测结果中有 TP 个结果和真值的 IOU 达到某个设定的阈值
对所有图片求平均得到Average Precision 的定义值:
对所有类求平均就得到mean Average Precision的定义值:
参考:《深度学习》 花书
复旦大学 《深度学习》