理论部分
上图展示的应用场景,比如人体技术、工业上的缺陷检测、医学图像的病灶检测、智能座舱以及自动驾驶等都离不开目标检测。
因此,目标检测在计算机视觉中属于非常基础性的技术。
1. 基础知识
提到目标检测,不得不提到图像分类。
图像分类也是非常基础的工作,它是以一张图片作为输入,输出图片包含的物体类别以及分数。分数指有多大的置信度认为它是某一个类别。
目标检测任务相对于图像任务更进了一步,它会针对一个或者多个目标的图片,检测出其中目标的位置,分辨其类别并给出分数。
目标检测要训练模型首先要进行数据标注,标注出矩形框以及类别。矩形框一般使用左上+右下两个坐标的形式表示,即(x1,y1,x2,y2,class,score),class是类别,score是分数。有了标注之后,才能进行模型的训练。
目标检测模型的输入为一张图像,经过检测模型后,输出若干个物体的检测结果,结果主要包括:
- 检测框,形式为(x1,y1,x2,y2)
- 类别
- 分数
PASCAL VOC是目标检测常用的数据集,见证了目标检测从传统方法到深度学习方法发展的历程。该数据集包含20个常见类别,除了比较知名的目标检测以外,还提供了其他任务的标注。
MS COCO也是常用数据集,它见证了目标检测百花齐放的阶段,到目前为止仍然有很多主流方法在该数据集上进行测评。该数据集拥有30万+图片与250万+实例标注,提供了80个类别的目标。
上图下方是COCO与PASCAL VOC的对比,无论是类别的数量还是实例的数量,COCO都更胜一筹。
目标检测的重要操作包括:
① IoU(Intersection over Union):表示两个矩形框的重叠程度。计算公式如右上方所示,其分子是绿色矩形框与红色矩形框的交集,分母是两个矩形框的并集。重叠度越高,IoU越接近于1。
② NMS(Non-Maximum Suppression):非极大值抑制,目的为去掉多个重复的预测框。模检测模型预测一张图时的初次结果往往不理想,一个目标可能会预测出多个框,因此需要使用非极大值抑制去除冗余的框,最终得到上图左边图像。
NMS的具体流程可以概括为:设定一个IoU阈值,将每一个类别的预测框按照分数做降序排序,再根据矩形框的IoU进行抑制。如果比某个框分数更高的框的IoU大于阈值,则此框将被抑制。
比如右边图片中有两个人,共预测了5个框,上面三个框是骑马的人。假设三个框的分数是0.91、0.80与0.79,最高分0.91。如果分数较低的两个框的IoU超过阈值,则该两个框会被抑制。
上图列出了精度与速度上较常见的目标检测评价指标。
其中精度方面有:
- 准确率(Precision):检测出正确的框的数量/检测出所有框的数量。以骑马图为例,假设红色的框是标注框,蓝色与橙色框是预测出的两个框,分数分别为0.9和0.6。正确的框指与标注框的IoU相差超过一定的阈值,且其类别相同。因此,蓝色框符合正确的标准,它是正确的框,但橙色不是正确的框。因此,该示例准确率是1/2。
- 召回率(Recall):检测出的正确框的数量/标注的所有框数量。本示例中,标注的所有框是红色的框,数量为1。检测出的正确框是蓝色的框,因此召回率为1/1=1。
- lPR曲线:如上图右下角所示,其纵轴是准确率precision,横轴是recall,因此这条线被称为PR曲线。它由多个点构成,每个点是precision/recall值。此处将引入置信度分数阈值概念。以骑马图为例,假设将置信度分数的阈值设为0,则橙色框与蓝色框都是预测结果;但如果将分数阈值设为0.7,橙色框将被过滤。对于不同的分数阈值,预测结果会一直变化,因此算出的precision/recall也是变化的。
- AP(Average Precision):指PR曲线与坐标轴围成的面积。因为precision与recall都在0到1之间,因此AP最大为1。
- mAP:AP为针对单个类别,而mAP为多个类别时所有类别的平均AP,为检测中的常用指标。
2.代表性方法
上图为COCO上目标检测的部分方法。
对目标检测的方法做归类,如上图所示。
基础的网络分为CNN(卷积神经网络)与Transformer。CNN又可以分为二阶段目标检测与一阶段目标检测。
二阶段目标检测指在目标网络里存在一个候选框生成的阶段,被称为第一阶段;第二阶段进行候选框的微调与以及最终结果的预测。其中最具代表性的工作是Faster RCNN,针对此前非端到端的方法实现了端到端。基于该方法也产生了一系列二阶段的经典方法。
一阶段的方法从一开始的SSD到后来的YOLO也产生了一系列方法。
而Transformer最初在NLP领域应用较为广泛,将Transformer应用到目标检测主要是DETR。在DETR工作出现之后,也有了一系列对DETR的改进工作。
Fastern RCNN、YOLO以及DETR是三个分支里程碑式的工作。
传统的目标检测方法思路较为直接,采用滑动窗口,对原图像逐个设置一定的步长进行滑动,对每区域进行分类和定位。
以右图为例,蓝色的窗框是滑窗,可以沿着图像从左往右、从上到下进行滑动,每到一个区域都会判断该区域是背景或是前景的物体,并判断是否需要对其进行微调。
但传统方法存在一些问题:
- 效率较低,滑动的方式导致会对特征进行重复提取,计算资源或效率都非常低下。
- 精度较低,对尺寸以及光照的变化不鲁棒。
那么,二阶段Faster RCNN做了哪些改进?
Faster RCNN的流程为:一张图片进来之后,会有CNN网络负责对图片做特征提取,得到一张特征图像,由RPN生成候选框并提取;第二阶段检测头再根据生成的候选框进行位置的微调以及类别的判断,得到位置、类别以及分数的信息。
该方式的优势在于:
- 是首个端到端的方式,依靠CNN的训练进行优化。
- 特征提取的效率较高,使用CNN统一提取特征,因此不存在重复提取的情况
- 精度相对较高,使用两阶段提取proposal再到微调的方式,对尺寸与小物体相对较鲁棒。
不足在于:速度未达到30FPS实时的要求。为了解决速度问题,业界诞生了一阶段目标检测。
YOLO的思路为:取消了提取候选框的步骤,而是直接使用完整的CNN网络对图片特征进行一次提取,同时会将图片划分为s*s的网格,每个网格负责预测周边的框,进行目标的分类和回归,最后经过NMS等后处理得到最终的结果。
该方式的优势在于:
- 速度更快,不需要两阶段生成候选框。
- 网络更简洁,通用性也更高。
因此,YOLO系列一经推出即大受关注,前段时间已经推出V8版本。
其不足在于,单阶段导致精度有所下降,特别是对于较小的物体。
目标检测领域的新范式DETR引入了Transform结构,也使用了CNN做特征提取,区别在于会将图片进行一定的切分,将其组织为token的形式。CNN提取出的特征里面每一个像素是一个token。token作为encoder与decoder的输入,进行特征提取。
DETR的另一特点是引入了object query,基于query预测最终的目标。采用集合预测的思路,去除了NMS、候选框等以往检测的常用操作。
该方式作为目标检测新范式,优势为无需复杂的自定义操作,实现上更加简单和优雅。但不足为训练时间比较长,同时对小物体的检测精度较差。
3. 展望总结
前文主要了解了图像检测的基本知识,包括任务定义、数据集、评价指标等;也了解了图像检测的代表性方法,包括二阶段的Faster-RCNN、一阶段的YOLO以及基于Transformer的DETR。
本文介绍的目标检测只是非常小的一部分,未来我们期望从更细化的方向,比如长尾的问题、零样本、少样本、增量问题以及更通用的方向,比如最近提出的SAM、Grounded-SAM等进行普及。