Press "Enter" to skip to content

Anchor Boxes——目标检测质量的关键

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

随着计算机视觉技术逐年火热,利用计算机图像处理技术对目标进行实时跟踪的研究越来越热门。那幺如何提高目标检测的质量?Anders Christiansen 认为,正确地调整 可以大大提高模型检测某些未知大小和形状的对象的能力。下面是他的观点,

 

在学习用于目标检测的卷积神经网络时,Anchor Boxes 是最难掌握的概念之一。它还是你在提高数据集的性能的时候,能够调优的最重要的参数之一。事实上,如果 Anchor Boxes 没有正确地调整,你的神经网络将永远不会知道某些小的、大的或不规则对象的存在,并且永远不会有机会检测它们。幸运的是,你可以采取一些简单的步骤来确保你不会掉进这个陷阱。

 

当你使用像 YOLO 或 SDD 这样的神经网络来检测一幅图像中的多个对象时,这个网络实际上正在进行数千个检测,并且只显示出它确定为一个对象的那些检测结果。多个检测以以下格式输出:

 

1:(x,y,高度,宽度),类

 

 

预测~(80000):(x,y,高度,宽度),类

 

其中,(X,Y,高度,宽度) 被称为「bounding box」。该框和对象类由人类注释人员手动标记。

 

在一个极其简化的示例中,假设我们有一个模型,该模型具有两个预测并接收以下图像:

 

 

我们需要告诉我们的网络,它的每一个预测是否正确,以便它能够学习。但是我们应该告诉神经网络它的预测类是什幺呢?预测类应该是:

 

预测 1:梨

 

预测 2:

 

或者是:

 

预测 1:苹果

 

预测 2:梨

 

如果网络预测为:

 

预测 1:苹果

 

预测 2:苹果

 

我们需要我们网络的两个预测器能够分辨出梨和苹果,这是它们的工作。要做到这一点,有几个工具。预测器可以专门用于特定大小的对象、具有一定纵横比(高和宽)的对象,或者图像上不同部分的对象。大多数网络使用所有三个标准。在我们的梨/苹果图像的示例中,我们可以使用 Prediction 1 表示左侧的对象,使用 Prediction 2 表示右侧的对象。然后我们就可以回答网络应该预测什幺:

 

预测 1:梨

 

预测 2:苹果

 

目前最先进的物体检测系统如下:

 

 

为每个预测器创建数千个「bounding box」或「prior boxes」,它们表示它专门用于预测对象的理想位置、形状和大小。

 

对于每个 bounding boxes,计算哪个对象的 bounding boxes 具有最高的重叠除以非重叠。这被称为交叉或联合。

 

如果最高 IOU 大于 50%,则告诉 anchor box 它应该检测出最高 IOU 的对象。

 

否则,如果 IOU 大于 40%,则告诉神经网络,真正的检测是模糊的,不要从该示例中学习。

 

如果最高 IOU 小于 40%,那幺 anchor box 应该预测为没有对象。

 

 

这个方法在实践中表现得很好,并且数千个预测器在判断它们的对象类型是否出现在图像中这方面做得非常好。看一下 RetinaNet 的开源实现,它是一个最先进的对象检测器,我们可以可视化 anchor box。有太多对象时不能同时可视化,但是这里只有 1% 个:

 

 

使用默认 anchor box 配置可以创建过于专用的预测器,并且图像中出现的对象可能无法使用任何 anchor box 获得 50% 的 IOU。在这种情况下,神经网络将永远不会知道这些对象的存在,也永远不会学习预测它们。我们可以调整我们的 anchor box 使它变得小得多,比如这 1% 个样本:

 

 

在视网膜网配置中,最小锚盒大小为 32×32。这意味着许多比这个小的物体都不会被检测到。这里是来自 WiderFace 数据集的一个示例,我们在其中将边界框匹配到它们各自的锚定框,但有些则陷入了裂缝中。数据集的网址为:

 

http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/

 

 

在这种情况下,只有四个地面真值边界框与任何 anchor boxs 重叠。神经网络永远也学不会预测其他人脸。我们可以通过更改默认的 anchor box 配置来修复这个问题。

 

因为我们有非常小的面部,其预测依赖于其周围的像素(如果存在手臂和腿,则更有可能是面部),所以我们减小了最小的 anchor box 大小,同时保持了用于预测 32×32 对象的相同接收字段。使用我们的新配置,所有的面与至少一个 anchor box 排列,我们的神经网络可以学习如何检测它们!

 

 

作为一般规则,在开始训练模型之前,您应该问自己关于数据集的下列问题:

 

 

我想检测的最小尺寸的 box 是什幺?

 

我想要检测的最大尺寸的 box 是什幺?

 

box 和检测区域之间的比例应该是多少?即,每个 bounding box 在预测时有多少依赖于它周围的数据?

 

这个 box 能做什幺形状?例如,汽车检测器可能具有短而宽的 anchor boxes,只要汽车或照相机没有机会侧转。

 

 

您可以通过实际计算数据集中最极端的大小和长宽比来粗略估计这些参数。另一个对象检测器 YOLO v3 使用 K-means 来估计理想的 bounding boxes。另一个选择是学习 anchor box 配置。然而,重要的是要记住,您不仅希望优化对象到 anchor boxs 的映射。您还必须考虑需要多少来自周围像素的信息才能正确检测对象。例如,检测一个小小的脸部,你需要依赖于对整个人体的检测。

 

一旦你仔细考虑过这些问题,你就可以开始设计你的 anchor boxs 了。一定要通过编码你的实际参考标准来测试它们,然后解码,它们太多了。你应该能够恢复 bounding boxes。

 

此外,请记住,如果 bounding boxes 和 anchor boxs 的中心不同,这将降低 IOU。即使你有小 anchor boxs,如果 anchor boxs 之间的距离很大,你可能会错过一些符合标准的检测对象。改善这一点的一种方法是将 IOU 阈值从 50% 降低到 40%。

 

要了解为什幺 anchor boxs 如此重要,请参阅 David Pacassi Torrico 的文章,比较当前人脸检测的 API 实现方法和效果。你可以看到,除了检测小脸部,这些算法效果不错。下面是一些照片,其中没有检测到一张脸。David Pacassi Torrico 的文章地址为:

 

https://www.liip.ch/en/blog/face-detection-an-overview-and-comparison-of-different-solutions-part1

 

 

 

 

这是我们新模型对相同图片的检测效果:

 

 

 

 

更多关于 anchor boxs 的知识,您可以参考 Andrew Ng 的 Deep Learning Specialization

 

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注