目标检测是什么?既要认出是什么,又要找到在哪
目标检测(Object Detection)是在图像或视频中找出物体并标明位置的计算机视觉任务。它不仅要回答“图里有什么”,还要回答“在哪里”:对每个物体,给出类别(人、车、猫)和一个框住它的矩形边界框。图像分类只给整张图一个标签,目标检测则要处理一张图里的多个、不同大小的物体。
传统方法
深度学习之前,目标检测主要靠滑动窗口:用不同大小的窗口在图上逐个位置扫描,每个窗口用人工设计的特征(比如 Haar 特征、HOG 特征)加分类器判断里面有没有目标。经典的人脸检测算法就是这样工作的。这类方法计算量大,对复杂场景的适应能力也有限。
深度学习带来的突破
2014 年,加州大学伯克利分校的 Ross Girshick 等人提出了 R-CNN。它先用算法从图中挑出约两千个可能有物体的候选区域,再用卷积神经网络对每个区域提取特征并分类。在经典的 PASCAL VOC 2012 数据集上,它把平均精度(mAP)提升到 53.3%,比之前的最好成绩相对提高了 30% 以上。论文的另一个关键洞见是:数据少的时候,可以先在大规模图像分类数据上预训练,再针对检测任务微调,这个思路后来成为深度学习的标准做法。
此后的演进主要沿两条路线:一是两阶段方法,先找候选区域再识别,从 R-CNN 发展到 Fast R-CNN、Faster R-CNN,精度高;二是单阶段方法,一次前向计算直接输出所有框和类别,代表是 YOLO 和 SSD,速度快,适合实时场景。再后来,基于 Transformer 的 DETR 去掉了很多手工设计的组件,开放词汇检测则让模型可以检测训练时没见过的类别,只需要用文字描述。
应用
自动驾驶识别行人、车辆和交通标志;安防监控检测异常行为;工业生产线检测零件缺陷;零售货架识别商品;医学影像定位病灶;无人机巡检。目标检测也是很多更复杂任务的基础,比如目标跟踪、实例分割和姿态估计。