目标检测算法的思想和方法

摘自与:https://mp.weixin.qq.com/s/4B_hwVq_1tP6_DrI_n4OfA
选自jeremyjordan.me

作者:Jeremy Jordan

机器之心编译

参与:Panda

目标检测是计算机视觉领域的基本研究问题之一,当前最常用的技术是卷积神经网络。机器学习工程师 Jeremy Jordan 近日发表了一篇博文,介绍了用于目标检测的单级式方法(包括 YOLO 和 SSD)。
在这篇文章中,将概述用于基于卷积神经网络(CNN)的目标检测的深度学习技术。
总体而言,目标检测包含两大类方法——要么是在网格上进行固定数量的预测(单级式);要么是先使用一个提议网络寻找目标,然后再使用另一个网络来微调这些提议并输出最终预测结果(两级式)。

目标检测任务

目标检测的目标是识别一个预定义的目标类别集(比如 {人, 汽车, 自行车, 动物})的实例并使用一个边界框描述图像中每个被检测出的目标。

目标检测算法的思想和方法
我们一般使用矩形描述每个目标的位置,由于目标形状千差万别,所以定位结果可能并不完美。另一种可用方法是图像分割,这能提供像素级的定位。

直接目标预测

将主要关注单级式地直接预测图像中的目标边界框的模型架构。换句话说,其中没有必须执行的中间任务(我们后面会介绍的区域提议方案就有中间任务),就能得到输出结果。这种模型架构更简单、速度更快,但有时候并不能足够灵活地适应任意任务(比如掩码预测)。

基于网格的预测

为了理解图像中存在什么事物,我们将会将输入馈送通过一个标准的卷积神经网络以构建出原始图像的丰富特征表示。我们将这部分架构称为「骨干(backbone)」网络,这通常以图像分类器的形式进行了预训练,可以更便宜地学习从图像中提取特征的方式。这么做的原因是用于图像分类的数据更易于标准(因此成本更低),因为其仅需单个标签,而不需要为每张图像都定义边界框标注。因此,我们可以在一个非常大的有标注数据集(比如 ImageNet)上进行训练,以获得优良的特征表示。

YOLO:You Only Look Once

骨干网络

最早的 YOLO 网络使用了一个经过修改的 GoogLeNet 作为骨干网络。之后,Redmond 又创建了一个名为 DarkNet-19 的新模型,其遵循了 3×3 过滤器的一般设计,而将每个池化步骤的通道数量翻了一倍;整个网络中也使用了 1×1 过滤器来周期性压缩特征表示。他最新的论文又引入了一个更大的新模型 DarkNet-53,具有更优的性能表现。

所有这些模型都首先是作为图像分类器而进行预训练,之后再针对检测任务进行调整。在 YOLO 模型的第二个迭代版本中,Redmond 发现在分类预训练结束时使用更高分辨率的图像能够提升检测表现,因此也就采用这一操作方法。

将分类网络调整为检测网络只需要移除网络的最后几层,然后添加一个带有 B(5+C) 个过滤器的卷积层,以得出 N×N×B 的边界框预测。