[深度学习]Object detection物体检测之概述

一、Object detection物体检测与其他计算机视觉问题的区别与联系
在这里。有必要解释一下几大计算机视觉问题的区别与联系。说起物体检测是,那是计算机视觉之中一个比较热门的问题。而它与图像识别classification的区别在于,图像识别classification提供了localization的定位操作,物体检测则是包括了定位和分类的两个任务。在现实世界中我们更多的能使用到物体检测的技术,因为拍摄的照片都是带有很高复杂性的,可能存在多个目标物体。而识别classification任务只能识别比较显著的一个,物体检测任务则能识别多个。从物体检测更进一步,我们不仅希望在图像中找到对象,而且还要找到每个检测到的对象每个的像素掩码,这个问题称为实例分割Instance Segmentation。

二、 Object detection物体检测的数据集
1. PASCAL Visual Object Classification (PASCAL VOC) 是一个比较老的数据集,从05年~12年PASCAL VOC数据集一直举办计算机视觉的比赛,分为八个不同类别的比赛,包括object detection, classification, segmentation等等。虽然只有二十个分类,它依然是object detection的重要参考数据。

2.自2013年以来,ImageNet发布了一个带有边界框的对象检测数据集。训练数据集由大约500 000个仅用于训练的图像和200个类别组成。这个数据集很少被使用因为需要很高的算力,而且太多的分类对detection任务不利。

3.另一方面, Common Objects in COntext (COCO) 数据集中的公共对象由Microsoft开发。该数据集用于多种挑战:字幕生成,对象检测,关键点检测和对象分割。COCO对象检测挑战,包括使用边界框本地化图像中的对象,并将它们中的每一个分类在80个类别之间。数据集每年都在变化,但通常由超过120,000张用于训练和验证的图像组成,还有超过40 000张图像用于测试。

三、 Object detection物体检测的性能指标
1. Intersection over Union (IoU) 交并比

简单点说,这个度量模型选择的候选框和实际框之间重叠的部分,也就代表了模型选择的候选框的精度,它是一个介于0~1的数值,通常在实际之中会设定一个阈值,把没有达到iou阈值的候选框舍去。最常用的阈值是0.5,即如果loU>0.5,则认为是真实的检测(true detection),否则认为是错误的检测(false detection)。

MAP=所有类别的平均精度求和除以所有类别 
即数据集中所有类的平均精度的平均值。下面是图解iou和公式。

2.mean Average Precision (mAP)
要知道什么是mAP,首先要对一些常见的分类指标有个初步的了解,比如precision和recall。在二进制分类中,平均精度(AP)度量是precision-recall曲线的摘要,而MAP=所有类别的平均精度求和除以所有类别,即数据集中所有类的平均精度的平均值。取平均意味着mAP避免了在某些类别检测很强,某些类别检测很弱。更详细的解释可以查看这里https://towardsdatascience.com/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models-1ea4f67a9dbd

通常针对固定的IoU计算mAP,但是大量的边界框可以增加候选框的数量。COCO挑战已经制定了一个官方指标,以避免过度生成候选框。它计算变量IoU值的mAP的平均值,以便惩罚具有错误分类的大量候选框。

三、Object detection物体检测的主要算法
1.传统的目标检测算法
Cascade + HOG/DPM + Haar/SVM以及上述方法的诸多改进、优化等等。

2.深度学习算法
目前主流的目标检测算法主要是基于深度学习模型,其可以分成两大类:

(1)two-stage检测算法
将检测问题划分为两个阶段,首先产生候选区域(region proposals),然后对候选区域分类(一般还需要对位置精修),这类算法的典型代表是基于region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;

(2)one-stage检测算法
不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,比较典型的算法如YOLO和SSD。

目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测要考虑物体的定位准确性,而不单单是分类准确度。一般情况下,two-stage算法在准确度上有优势,而one-stage算法在速度上有优势。不过,随着研究的发展,两类算法都在两个方面做改进。Google在2017年开源了TensorFlow Object Detection API,并对主流的Faster R-CNN,R-FCN及SSD三个算法在MS COCO数据集上的性能做了细致对比(见Huang et al. 2017),如下图所示。Facebook的FAIR也开源了基于Caffe2的目标检测平台Detectron,其实现了最新的Mask R-CNN,RetinaNet等检测算法,并且给出了这些算法的Baseline Results 。

参考文章:

Review of Deep Learning Algorithms for Object Detection 
Deep Learning for Object Detection: A Comprehensive Review
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD