Anchor Boxes:物体检测的关键

  • 时间:2018-12-25 22:45 作者:ronghuaiyang 来源:ronghuaiyang 阅读:875
  • 扫一扫,手机访问
摘要:作者:Anders Christiansen编译:ronghuaiyang在使用CNN做物体检测的时候,其中一个最难的概念就是anchor boxes。这也是能够在你自己的数据集上提升性能的其中一个最重要的参数。实际上,假如anchor boxes没有正确的设置,你的神经网络永远也不会知道小物体,大

作者:Anders Christiansen

编译:ronghuaiyang

在使用CNN做物体检测的时候,其中一个最难的概念就是anchor boxes。这也是能够在你自己的数据集上提升性能的其中一个最重要的参数。实际上,假如anchor boxes没有正确的设置,你的神经网络永远也不会知道小物体,大物体和不规则物体的存在,也永远不可能去检测他们。有几个步骤你可以做一下,确保你不会在这个上面栽跟头。

当你使用YOLO或者者SSD去在一张图像中检测多个物体的时候,网络实际上进行了几千个预测,而显示给你的只是那些确认是物体的。输出的多个预测具备下面的形式:

Prediction 1:(X, Y, Height, Width), Class

….

Prediction ~80,000: (X, Y, Height, Width), Class

其中,(X, Y, Height, Width)叫做“边界框”,或者者说包围这个物体的框。这个框和物体的类别时由人工标注的。

在最简单的例子中,想象一下我们有一个模型,输入下面的图像,输出两个预测:

我们需要告诉我们的网络,我们做的每个预测是不是正确的,这样网络才能学到东西。但是我们该怎么告诉网络,预测是什么呢?预测的类别该是这样吗?

预测1: 梨

预测2: 苹果

或者者应该是这样:

预测1: 苹果

预测2: 梨

假如网络的预测是这样的呢:

预测1: 苹果

预测2: 苹果

我们需要我们的网络的两个预测输出能够理解他们的任务是预测苹果还是梨。有几个工具可以这样做。可以给预测指定物体的尺寸,给物体指定物体的高和宽的比例,或者者物体在图像的不同的位置,大多数网络3个方法都用。在我们的苹果/梨的图像中,我们可以让预测1用来预测左边的物体,让预测2用来预测右边的物体。现在,我们可以知道预测应该是什么了:

预测1: 梨

预测2: 苹果

目前最先进的检测系统都是这么干的:

  1. 构建几千的“锚框”或者者说“先验框”,这些框表示了用来检测指定的不同的位置,形状和尺寸的物体。

  2. 对于每个锚框,计算哪个物体的边界框具备最高的归一化的重叠率,这个叫做交并比,IOU。

  3. 假如最高的IOU大于50%,就告诉这个锚框,你应该检测这个具备最高IOU的物体。

  4. 否则,假如IOU高于40%,告诉网络,这个检测不靠谱,不要从这个样本中学任何东西。

  5. 假如最大的IOU低于40%,告诉这个锚框应该预测这里没有物体。

这个在实际中工作的很好,这几千个预测对于决定他们类别的物体能否在图像中出现还是做得很好的。看看 kuangliu/pytorch-retinanet,一个最先进的物体检测器,我们可视化一下锚框,一次性可视化有非常多个锚框,而且还只是其中的1%。

使用默认的锚框设置构建出的预测太有针对性了,出现在图中的物体可能对于任何一个锚框都不满足IOU大于50%这个条件。这样的话,神经网络永远不可能知道这些物体的存在,也不可能学会预测它们。我们可以调整一下我们的锚框,变得更小一点,就像这样:

在RetinaNet的设置中,最小的锚框尺寸为32x32,这意味着许多小于这个尺寸的物体不会被检测到。这是一个来自WiderFace的例子,我们将边界框和对应的锚框进行匹配,但是有少量没有匹配上。

这种情况下,只有4个ground truth的边界框和其中的某个锚框重叠。网络永远也不会学习去预测其余的人脸。我们可以通过改变锚框的设置来处理这个问题。

因为我们有非常小的人脸,预测这些人脸需要依赖于附近的像素(比方胳膊,腿之类的),我们减小了最小的锚框的尺寸,但是保留了使用预测32x32尺寸物体时的感受野。使用了新的设置,所有的人脸都至少有了一个锚框,这些我们的网络可以学会如何检测它们了。

作为一个通用的法则,在训练模型之前,关于你的数据集,你应该问问自己下面的问题:

  1. 我想要检测的物体的最小尺寸是多少?

  2. 我想要检测的物体的最大尺寸是多少?

  3. 框和感受野的比例是什么样的?也就是说,预测边界框的时候,依赖附近多少的数据?

  4. 框的形状是什么?例如,车的检测器的锚框应该是宽比高要大,由于一般拍照时,不会横着拍。

你可以做一个粗略的计算,计算数据集中最极端的尺寸和对应的比例。YOLOv3,另外一个物体检测器,使用了K-means来预测正当的边界框。另外一个选择是,学习锚框的设置(MetaAnchor: Learning to Detect Objects with Customized Anchors)。还有个问题很重要,需要牢记,你不仅仅需要优化物体到锚框的映射,你还要考虑我需要多少附近的像从来纠正检测这个物体。例如,对于小人脸来说,需要依赖于整个的人的身体来进行检测。

一旦你想通了这些问题,你即可以开始设计你的锚框了。确保测试一下,通过编码你的ground truth边界框而后作为预测在解码。你应该可以覆盖你的ground truth的边界框。

同时,记住,假如边界框的中心点和锚框不一样,这个也会降低IOU。即便你有小的锚框,假如锚框之间的步长太大的话,你也会丢掉少量ground truth框。一个改善的方法就是讲IOU的阈值从50%降低到40%。

想理解为什么锚框这么重要,可以看看https://www.liip.ch/en/blog/face-detection-an-overview-and-comparison-of-different-solutions-part1,比照了当前的人脸检测API。你可以发现这些算法除了小的人脸,其余的检测都不错。这里有几个照片的例子,一个人脸也没检测出来。

下面是使用了我们的新模型的照片:

往期精彩回顾

1、最全的AI速查表|神经网络,机器学习,深度学习,大数据

2、深度学习论文阅读路线图

3、如何构建使用Python进行数据解决的肌肉记忆

4、Image-to-Image的论文汇总

5、我们从一阶段的物体检测器SSD,YOLOv3,FPN & Focal loss (RetinaNet)中学到了什么?

6、资源|10个机器学习和深度学习的必读免费课程

7、经验之谈|别再在CNN中使用Dropout了

8、我们从region based物体检测器 (Faster R-CNN, R-FCN, FPN)中能学到些什么?

9、非常好用的Python图像加强工具,适用多个框架

10、Kaggle竞赛详情: Home Credit default risk(一)

本文可以任意转载,转载时请注明作者及原文地址。

请长按或者扫描二维码关注我们

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|软件环境】梦幻仙域游戏攻略(2023-12-19 10:02)
【系统环境|软件环境】梦幻仙域游戏攻略(2023-12-19 10:02)
【系统环境|】卡帕部落揭秘潮玩新宠,探究玩法(2023-12-14 09:45)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】如何开发搭建卡帕部落模式源码(2023-12-12 10:44)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
手机二维码手机访问领取大礼包
返回顶部