点击上方“视学算法”,选择加"星标"或“置顶

重磅干货,第一时间送达

来源丨CV技术指南

编辑丨极市平台

导读

anchor是一个晦涩难懂的东西,没有在哪篇论文中有明确的定义,也没有详细介绍它到底是什么,很多人在初次接触时非常头疼。在本文将详细介绍一下anchor。

前言

在本文将详细介绍一下anchor,主要包括以下内容:

What:anchor是什么?

Where:如何以及在何处对图像生成anchor以用于目标检测训练?

When:何时可以生成anchor?

Why:为什么要学习偏移而不是实际值?

How:如何在训练过程中修正选定的anchor以实现训练目标检测模型?

前几年主流的SOTA目标检测都基于anchor来设计,这方面的研究有 YOLO、SSD、R-CNN、Fast-RCNN、Faster-RCNN、Mask-RCNN 和 RetinaNet等,anchor是一个晦涩难懂的东西,没有在哪篇论文中有明确的定义,也没有详细介绍它到底是什么,很多人在初次接触时非常头疼。

在本文将,主要包括以下内容:

  • What:anchor是什么?

  • Where:如何以及在何处对图像生成anchor以用于目标检测训练?

  • When:何时可以生成anchor?

  • Why:为什么要学习偏移而不是实际值?

  • How:如何在训练过程中修正选定的anchor以实现训练目标检测模型?

anchor是什么

术语anchor boxes是指预定义的框集合,其宽度和高度被选择以匹配数据集中目标的宽度和高度。提议的anchor boxes包含可以在数据集中找到的目标大小的可能组合。这自然应该包括数据中存在的不同纵横比和比例。通常选择 4-10 个anchor boxes作为图像中不同位置的提议。
在计算机视觉领域,深度学习神经网络在图像分类和目标检测方面表现出色。首先是滑动窗口检测器,可以在前向传递中定位单个目标。滑动窗口检测器已被单次和两级检测器取代,它们能够处理整个图像并输出多个检测。这些目标检测器严重依赖anchor boxes的概念来优化滑动窗口检测的速度和效率。这是因为滑动窗口检测器需要大量的前向传递来处理图像,而许多前向传递只处理背景像素。有关滑动窗口检测器的说明,请参见下面的图 1。

图 1:滑动窗口检测器

训练目标检测网络的典型任务包括提出anchor boxes或使用传统计算机视觉技术搜索潜在锚、将提议的锚与可能的ground truth 框配对、将其余的分配给背景类别并训练以纠正输入提案框。需要注意的是,anchor boxes的概念可以用于预测固定数量的框。

anchor在图像上如何以及在哪里提出?

从本质上讲,提出anchors是关于确定可以适合数据中大多数目标的适当框的集合,将假设的、均匀间隔的框放置在图像上,并创建一个规则将卷积特征图的输出映射到每个位置在图像中。

要了解anchor boxes是如何提出的,请考虑包含小目标的 256px x 256px 图像的目标检测数据集,其中大多数目标位于 40px X 40px 或 80px X 40px 之间。额外的数据整理可能表明,ground truth 框大多是宽高比为 1:1 的正方形或宽高比为 2:1 的矩形。

鉴于此,应至少考虑两个纵横比(1:1 和 2:1)来提议此示例数据集的anchor boxes。这些目标的比例将指目标的长度或宽度(以像素为单位)占其包含图像的总长度或宽度(以像素为单位)的比例。

例如,考虑一个图像的宽度 = 256px = 1 个单位,那么一个 40px 宽的目标占据 40px / 256px = 0.15625 个单位的宽度——该目标占据总图像宽度的 15.62%。

为了选择一组最能代表数据的尺度,我们可以考虑具有最极端值的目标侧度量,即数据集中所有目标的所有宽度和高度之间的最小最小值和最大最大值。如果示例数据集中的最大和最小尺度是 0.15625 和 0.3125,并且我们要为anchor boxes提议选择三个尺度,那么三个潜在尺度可能是 0.15625、0.234375 和 0.3125。

如果使用上面提到的两个纵横比(1:1 和 2:1)和这三个尺度(0.15625、0.234375 和 0.3125)为这个示例数据集提出anchor boxes,我们将总共有六个anchor boxes来提出多个在任何输入图像中的位置。

下图显示了图像上均匀间隔的 8×8 网格。可以在每个单元中心上提出一个边界框。在每个位置提出 6 个框,总共 384 个。在每个位置,我们可以为长宽比和比例的每个组合提出一个框,每个网格中心/位置总共有六个框。在每个位置都提出了不同纵横比和比例的框,以涵盖所有可能性。

图 2:上面有 8×8 网格的图像

为了获得对图 2 中网格中每个位置的卷积神经网络预测,考虑一个 4 通道 8×8 特征图,其中每个通道输出每个位置一个框的 x、y、宽度和高度坐标。对于每个位置的六个框,考虑一个 4*6 通道的 8*8 特征图。使用anchor boxes的 SOTA 架构通常包含维度为 8 倍数的特征图。这是可能的,因为卷积神经网络本质上对输入进行下采样,同时通过 2D 卷积和池化操作保留重要的空间特征,并且完全卷积层输出密集的特征图如图 3 所示。

图 3:显示下采样如何发生以及每个渐进特征图如何变小的卷积层。

现在来谈谈检测小于网格单元大小的目标——当提议网格如此自然以至于有包含多个小目标的单个单元格时。这可以通过提出更精细的网格并相应地调整特征图输出形状来解决。更好的是,可以使用多个网格并将它们映射到卷积层次结构中的不同卷积层,就像 SSD 和 RetinaNet 预测器头使用的特征金字塔网络一样。

在下一节中,我们将讨论在生成ground truth批次或在推理时解释预测时如何需要在不同位置的图像上提出anchors的概念。

什么时候在图像上提出anchor?

检测器不预测框,而是为每个提议的边界框预测一组值,主要是每个正在学习的类别的anchor boxes坐标偏移和置信度分数。这意味着将始终在每个图像上提出相同的anchors,并且将使用前向传递的预测偏移量来纠正这些提议。网络没有将特征图坐标与图像内的位置匹配的概念,也没有将其输出对应于anchor boxes直到输出被解释的概念。

从理论上讲,由于每张图像将始终与同一组固定anchors提议相关联,并且训练过程中ground truth不会改变,因此实际上没有必要多次提议anchors或将它们与ground truth或背景类别匹配。提案和ground truth匹配通常都发生在批处理生成器中。有时,提案生成层会添加到实际网络中,以将锚数据添加到网络的输出张量中,但在批处理生成器中生成和平铺图像上的提案的逻辑应该是相同的。

知道了这一点,就很容易理解ancor需要初始化,并将此数据结构存储在内存中,以供实际使用时,如:在训练中与ground ruth匹配,在推断时将预测的偏移量应用于anchor。

为什么学习偏移量而不是实际值?

从理论上讲,如果卷积滤波器将其感受野照射在同一类型的目标上两次,则无论滤波器在图像中的哪个位置照射其感受野,它都应该输出大致相同的值两次。

这意味着,如果图像包含两辆车并且输出特征图包含绝对坐标,那么网络将预测两辆车的坐标大致相同。

学习anchors偏移量允许特征图输出与这两辆车的偏移量输出相似,但偏移量应用于可映射到输入图像中不同位置的anchors。这是在绑定框回归期间学习anchor boxes偏移背后的主要原因。

ground truth——匹配anchors并生成批次

ground truth批次必须包含要学习的目标偏移量,并且应包含建议的anchors。后者在训练期间不使用,但避免了在推理时将anchors与偏移预测与附加数据结构和随附代码相关联。目标偏移量应该是将建议精确移动到匹配的ground truth框或零(如果它是背景框的ground truth)所需的精确量,因为背景框不需要校正。

回顾一下,基于锚的批处理生成器构建了一个学习目标,其中在训练期间将考虑图像的每个提议的锚,无论它是否已分配到前景或背景类别。按照我们的示例,一批将从 64 个位置的 6 个anchors开始,总共 384 个anchors框。每个提议的anchors都可能通过以下或这些基本步骤的变体与ground truth框匹配:

对于每个anchors,找到哪个ground truth框具有最高的联合交集(IOU)分数

  • IOU 大于 50% 的anchors匹配到相应的ground truth框

  • IOU 大于 40% 的anchors被认为是不明确的并被忽略

  • IOU 小于 40% 的anchors被分配到背景类别

重新梳理一遍这个过程。从所有提议的anchors(在示例中为 384 个)的集合开始,与ground truth框匹配的框将包含其类别和更新的偏移量以纠正或移动该anchors。对背景和模糊/忽略框的偏移保持在它们的初始零偏移值。同样,这些偏移量是我们想要用神经网络来近似的值。这些是在边界框回归任务中学习的实际值。决定权重优化将考虑哪些背景偏移并丢弃不匹配的框通常发生在损失函数中。

如何在训练期间修正anchor boxes

损失计算不会对anchor boxes应用偏移量。在这一点上,批处理生成器已经编码了将anchors准确地“移动”到ground truth所在的位置所需的偏移量,并且如上所述,这是与ground truth框匹配或不匹配的每个建议框的位置学习目标。不匹配的anchor boxes不应造成损失,通常会被忽略。

回想一下,网络在每个特征图位置预测所有提议的偏移量。这意味着ground truth数据包含与ground truth框匹配的anchors的真实偏移量,而背景框的ground truth偏移量保持为零。这是因为anchors内的像素空间完全被认为是背景,提议的anchors就不需要坐标调整。

此外,这些零值将被忽略,因为背景anchors偏移确实会导致回归损失。这是因为目标检测是关于学习寻找前景目标,并且边界框回归损失(预测偏移量和正确偏移量之间)通常仅针对前景目标最小化。换句话说,由于分配给背景类别的anchors根本不应该被移动或校正,因此没有要预测的偏移量,也没有可以代表边界框回归损失中的背景框的重要值。

通常使用ground truth中存在的总背景框的子集来最小化分类损失来处理类不平衡。在示例中,每个位置有 6 个框,总共 384 个提案, 其中大部分将是背景框,这会造成严重的类不平衡。这种类别不平衡问题的流行解决方案被称为hard negative mining——根据预定比例(通常为 1:3;前景:背景)选择哪些背景框将对损失产生影响。在分类损失中处理类别不平衡的另一种流行方法涉及降低易于分类示例的损失贡献。RetinaNet 的 Focal Loss 就是这种情况。

为了获得最终的一组目标检测,网络的预测偏移量被应用于它们相应的anchor boxes。可能有成百上千个提议的框,但最终,当前的 SOTA 检测器忽略所有预测为背景的框,保留通过某些标准的前景检测,并应用非最大抑制来纠正同一目标的重叠预测。

正如本文开头提到的,理解SOTA目标检测的飞跃通常会变得令人生畏和晦涩,但是一旦了解了anchor boxes的作用,目标检测就会具有全新的意义。

原文链接:
https://www.wovenware.com/blog/2020/06/anchor-boxes-in-object-detection-when-where-and-how-to-propose-them-for-deep-learning-apps/#.YYCcrZ5BxhE*

如果觉得有用,就请分享到朋友圈吧!

点个在看 paper不断!

全面理解目标检测中的anchor相关推荐

  1. anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾

    前段时间,YOLOv4&v5大火,很多人忽视了yolov5在anchor上的一些细节变化,因此,本文从Faster RCNN着手,逐步分析SSD.YOLOv4&v5的anchor机制. ...

  2. 目标检测中的Anchor

    前言: 在计算机视觉四大基本任务(检测.分类.定位.分割)中,图像的目标检测受到的了研究者们越来越多的关注.今天我们就来聊一聊在目标检测中一项重要的机制--Anchor.Anchor机制在凯明大神提出 ...

  3. 理解目标检测中的老大难:小目标检测

    文章一: Stitcher: Feedback-driven Data Provider for Object Detection ,该文发明了一种简单方法改进业界老大难:小目标检测问题. 该文作者来 ...

  4. 对于目标检测中mAP@0.5的理解

    文章目录 前言 mAP@0.5 AP是Precision-Recall Curve(PRC)下面的面积!!! 理一下思路 参考 前言 一直不是很理解目标检测中的mAP是如何的,今天具体来写一下,加深一 ...

  5. CVPR2020 | MAL:联合解决目标检测中的定位与分类问题,自动选择最佳anchor

    点击上方"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 本文是收录于CVPR2020的工作,其实文章在去年就挂在了网上,整体思路还算不错.具体来 ...

  6. 目标检测中Anchor的本质分析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨东林钟声@知乎 来源丨https://zhuanlan.zhihu.com/p/84398108 ...

  7. 关于目标检测中bounding box编码和解码时weight参数的理解

    关于目标检测中的Bounding box回归原理网上已经有很多解释的文章了,但是为了更好的阐述我的问题,一开始我还是先简单的过一下边框回归的基本原理,然后解释我在看源码时遇到的一点疑惑,最后分享一下在 ...

  8. 目标检测中Anchor如何映射到原图

    Anchor在目标检测中是比较常见的,引入Anchor主要是为了让检测更精准,当然现在有很多Anchor Free的方法也达到了较好的结果,但是最近项目中用的是基于Anchor的方法,但是置于Anch ...

  9. 目标检测中的anchor-based 和anchor free

    目标检测中的anchor-based 和anchor free anchor-free 和anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在单阶段检测 ...

最新文章

  1. MySQL数据库性能优化--SQL优化
  2. MATLAB-常见命令使用
  3. 鸟哥的Linux私房菜(基础篇)- 第二十五章、 Linux 备份策略
  4. 智能合约重构社会契约(8)以太坊分片
  5. 【Python基础】Python画王者荣耀英雄能力雷达图
  6. 教你写出可读性高的Python代码
  7. 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制
  8. Visual Studio 2005 插件编程(代码行数统计插件)之一
  9. excel趋势线公式导出_Java 添加、读取、删除Excel中的图表趋势线
  10. 排序(冒泡、选择、插入、希尔、快排、堆排、归并)
  11. DEDECMS给图集图片{dede:productimagelist}自动编号
  12. c语言列车调度 栈,这个用栈调度火车的程序到底是怎么回事?
  13. idea设置关键字颜色_IDEA字体颜色快速导入辅助工具设置
  14. 有关parent.frame.cols在firefox浏览器上不兼容的问题解决
  15. 【转】解决Navicat 报错:1130-host ... is not allowed to connect to this MySql server,MySQL不允许从远程访问的方法 .
  16. java 进销存源码_JAVA 进销存管理系统的源码 - 下载 - 搜珍网
  17. 【独行秀才】macOS Big Sur 11.5 Beta 1(20G5023d)原版镜像
  18. Adversarial Machine Learning 经典算法解读(FGSM, DeepFool)
  19. 现货黄金的点差费用是怎么收的
  20. 新房装修如何知道是否需要更换电线

热门文章

  1. Understanding SOAP
  2. INTERSECT/EXCEPT VS. IN/NOT IN
  3. 【青少年编程】黄羽恒:漫天飞雪
  4. 【怎样写代码】偷窥高手 -- 反射技术(一):前期准备
  5. 【数据结构】链式队列的实现(C语言)
  6. 一文读懂:GoogleNet的Inception从v1到v4的演变
  7. 高文、张钹、杨强隔空论道:AI精度与隐私的博弈
  8. “应付”大学作业,我花3小时写了一个“文本转手写”神器
  9. 中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍
  10. 加速点击控制应用中的边缘分析和机器学习部署 | 免费直播