问题定义

借助数学公式,我们可以将通用目标检测问题正式表达如下:

设计某种算法,使之可以针对给定的图像 xx ,检测出其中出现的所有视觉物体 {Oi}i=1N\{O_i\}_{i=1}^N

这里,每一个视觉物体 OiO_i 都是一个三元组 (si,ci,Li)(s_i, c_i, L_i) 。其中,si(0,1)s_i \in (0,1) 为置信度,表示检测算法给出这个检测结果的自信程度;ciCc_i \in \mathcal{C} 表示物体的类别;LiL_i 表示物体的位置,通常由物体在图像中左、上、下、右四个边界的坐标值表示,即 Li=(li,ti,ri,di)L_i = (l_i, t_i, r_i, d_i) ,由这四个边界所组成的矩形框也称为边界框(bounding box)。

在下图中,每一个绿色的矩形都是一个边界框,代表算法检测出的一个视觉物体,并在左上角标出了对应的类别。

另外,我们还可以用物体所覆盖的像素的集合表示物体的精确位置。此时, Li{0,1}H×WL_i \in \{0,1\}^{H\times W} 是与图像大小相同的像素蒙版,满足

(Li)xy={1,if object oi cover pixel (x,y)0,if not(L_i)_{xy} = \begin{cases} 1, & \text{if object } o_i \text{ cover pixel } (x,y) \\ 0, & \text{if not} \end{cases}

将物体的定位精确到像素是一个更为复杂的问题,称为实例分割(instance segmentation)。

目标检测看起来和图像定位问题(Image classification & localization)有些类似。在这两个问题中,我们都要求算法能预测图像中物体的类别,并以边界框的形式给出物体的精确位置。但事实上二者有着本质的不同。在图像定位问题中,我们已知图像中有且只有一个物体,并且该物体占据了图像的主要面积,因而这是一个受限环境下的问题。而目标检测面对的问题就要开放得多,图像中可能恰好有一个物体,也可能有多个物体,也可能没有物体,物体的大小也没有任何限制。在一些特定的场景下,算法还需要处理物体之间的关系,如遮挡等。

为了处理这些复杂的问题,目标检测算法通常包含若干个模块,分别处理位置、尺度、模式分类、位置关系等具体问题。这些模块通过某种方式组合在一起,输出最终结果。因而目标检测也是计算机视觉中最复杂的一类算法。在深度学习出现之前,特征金字塔和滑窗检测器是检测算法所采用的主流技术。 最为先进的 DPM (Deformable part model) 模型还引入了部件模型,对组件之间的位置关系进行建模。

近年来,随着深度学习技术日趋成熟,基于深度学习的新一代检测算法早已在性能上远远超越传统算法,成为目标检测算法的主流。受益于深度学习模型强大的拟合能力、出色的特征表达以及自由的构建方式,目标检测框架也朝着更为简洁统一的方向发展。

Last updated