点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:opencv学堂

导读

给大家再次解释一下Anchors在物体检测中的作用。

今天,我将讨论在物体检测器中引入的一个优雅的概念 —— Anchors,它是如何帮助检测图像中的物体,以及它们与传统的两阶段检测器中的Anchor有何不同。

像往常一样,让我们看看在哪些问题中,anchors被引入作为解决方案。

在开始使用anchors之前,让我们看看两阶段物体检测器是如何工作的,以及它们实际上是如何促进单阶段检测器的发展的。

两阶段物体检测器:传统的两阶段物体检测器检测图像中的物体分两阶段进行:

  1. 第一阶段:第一阶段遍历输入图像和物体可能出现的输出区域(称为建议区域或感兴趣的区域)。这个过程可以通过外部算法(例如:selective search)或者神经网络来完成。

  2. 第二阶段:第二阶段是一个神经网络,它接受这些感兴趣的区域,并将其分类到一个目标物体类中。

为了简单起见,我会介绍一个著名的两级探测器 —— Faster-RCNN。两个阶段都包含了一个神经网络。

  1. 第一个神经网络预测一个物体可能出现的位置(也称为objectness得分)。它基本上就是一个对前景(物体)和背景的分类。这个网络被称为区域建议网络,又名RPN。

  2. 提取区域建议后,对输入图像中对应的位置进行裁剪,送入下一个神经网络进行分类,假设有N个目标类。这个网络预测在那个位置上存在什么物体。

步骤2看起来非常简单,因为它可以归结为图像分类,即将目标物体分成N个类别中的一个。

让我们深入研究第1步。

(a) 这个神经网络如何预测这些目标的位置?

(b) 如果可以训练神经网络进行前景和背景的分类,那么为什么不训练它一次预测所有N个类呢?

(a) 的解决方案就是anchors,(b)的答案是肯定的,我们可以用一个单一的网络来执行N-way目标检测,这样的网络就是众所周知的单阶段目标检测器。单阶段检测器与Faster-RCNN中第一个阶段的网络几乎相同。

我说SSD和RPN几乎是一样的,因为它们在概念上是相同的,但是在体系结构上有不同

问题:神经网络如何检测图像中的物体?

解决方案(1) —— 单目标检测:让我们使用最简单的情况,在一个图像中找到一个单一的物体。给定一个图像,神经网络必须输出物体的类以及它的边界框在图像中的坐标。所以网络必须输出4+C个数字,其中C是类别的数量。

可以直接将输入图像通过一组卷积层然后将最后的卷积输出转换为一个4+C维的向量,其中,前4个数字表示物体的位置(比如minx, miny, maxx, maxy),后面的C个数字表示类别概率的得分。

解决方案(2) —— 多目标检测:这可以通过将上述方法扩展为N个物体来实现。因此,网络现在输出的不是4+C的数字,而是*N*(4+C)*数字。

取一个大小为H x W x 3的输入图像让它通过一组卷积层得到一个大小为H x W x d的卷积体,d是通道的深度或数量。

将图像通过ConvNet得到输出的特征图

考虑上面的输出卷积 volume。假设volume大小为7×7×512。使用N个大小为3 x 3 x 512的滤波器,stride=2, padding=1,产生大小为4 x 4 x N的输出volume。

我们取这个大小为4 x 4 x N的输出试着推断它的含义。

在输出的特征图中有16个cells,我们可以说,每个cell都有一个接收域(或感受野),对应到原始图像中的某个点。每个这样的cell都有N个与之相关的数字。正如我前面指出的,N是类别的数量,我们可以说,每个cell都有关于在feature map中对应位置上出现的物体的信息。以同样的方式,还有另一个并行的conv头,其中有4个大小为3 x 3 x 512的滤波器,应用在同一个conv volume上,以获得另一个大小为4 x 4 x 4的输出 —— 这对应边界框的偏移量。

现在我们知道如何用一个神经网络来预测多个目标。但是等一下,我们如何计算这个输出为4x4xn的cell的损失呢?

现在让我们深入到输出层使用的N个滤波器中。从N个滤波器中取出一个,看看它是如何通过对feature map进行卷积得到输出的。

3 x 3 滤波器在7 x 7的特征图上进行卷积,stride = 2

这个3x3的滤波器可以在7x7的网格上移动16个不一样的位置,并做出预测(如前所述),这是非常明显的。

我们知道,网格中的16个cell对应于它之前的层中的一个特定位置。请看下面的图表。输出网格中的第一个cell有一个大小为3x3的参考框。

第一个cell可以与输入图像中的特定位置相关联,从该位置进行预测。

类似地,输出中的每个cell都可以与输入图像中的特定位置相关联,从该位置进行预测。

因此有16个这样的参考位置(大小为3x3) —— 每个位置都有自己相对于输入图像的坐标。现在通过这些参考位置,我们可以实现两个目标:

  1. 分类损失:如果N个物体中有一个落在这16个参考位置,即与ground truth的包围框的IOU≥某个阈值,那么我们就知道要匹配哪个ground truth了。

  2. 回归损失:为什么我们需要这个?假设一个物体落在其中一个参考框中,我们可以简单地输出这些参考位置相对于输入图像的实际坐标。原因是物体不必是方形的。因此,我们不是天真地输出一组固定的框坐标,而是通过输出4个偏移值来调整这些参考位置的默认坐标。现在我们已经知道了ground truth box坐标和相应的参考位置坐标,我们可以简单地使用L1/L2距离来计算回归损失。

与图像分类的任务中只有输出向量要匹配不同,这里我们有16个参考位置要匹配。这意味着该网络可以一次性预测16个物体。要预测的物体数量可以通过对多特征图层次进行预测或通过增加特征图上所谓的参考位置来增加。

这些参考位置就是anchor boxes或者default boxes。

在上面的例子中,只有一个anchor框,也就是每个滤波器位置只做了一个预测。

通常,在feature map中,每个filter位置都可以进行多次预测 —— 这意味着需要有多少预测就有多少个参考。

假设每个filter位置有3个参考。

每个filter位置有三个boxes —— 一个是3x3(橙色),一个是1x3(蓝色),另一个是3x1(绿色)

正如我们前面看到的,输出是anchor框的函数,因此如果参考/anchor的数量改变,输出的大小也会改变。因此,网络输出的不是1个anchor点的4x4xN(和4x4x4),而是由于anchor数=3,所以输出的是4x4x(N*3)。

一般来说,单阶段探测器的输出形状可以写成:

分类头的形状:HxWxNA

回归头的形状:HxWx4A

式中,A为使用anchrs的数量。

一个问题!

每个filter位置有多个anchors/参考框的意义是什么?

这使得网络能够在图像的给每个位置上预测多个不同大小的目标。

这种在末端使用卷积层来获得输出的单阶段检测器的变体称为SSD,而在末端使用全连接层来获得输出的变体称为YOLO。

我希望我已经把anchor的概念变得为大家容易理解。anchor总是一个难以把握的概念,在这个博客中仍然有一些关于anchor的未解问题。我想在接下来的文章中回答这些问题。到时候见:)

—END—

英文原文:https://towardsdatascience.com/neural-networks-intuitions-5-anchors-and-object-detection-fc9b12120830

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

干货 | 详解对象检测模型中的Anchors相关推荐

  1. 详解 Logit/Probit 模型中的 completely determined 问题

      原文链接: https://www.lianxh.cn/news/a03aa1b7e32e0.html

  2. logit回归模型_详解 Logit/Probit 模型中的 completely determined 问题

    NEW!连享会·推文专辑: Stata资源 | 数据处理 | Stata绘图 | Stata程序 结果输出 | 回归分析 | 时间序列 | 面板数据 | 离散数据 交乘调节 | DID | RDD   ...

  3. 详解Linux2.6内核中基于platform机制的驱动模型

    原文地址:详解Linux2.6内核中基于platform机制的驱动模型 作者:nacichan [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了P ...

  4. 干货|详解最新语音识别框架 深度全序列卷积神经网络

    原标题:干货|详解最新语音识别框架 深度全序列卷积神经网络 导读:目前最好的语音识别系统采用双向长短时记忆网络(LSTM,LongShort Term Memory),但是,这一系统存在训练复杂度高. ...

  5. OpenCV DNN支持的对象检测模型

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 引言 OpenCV DNN不光支持图像 ...

  6. 详解Java多线程编程中LockSupport类的线程阻塞用法

    转载自  详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际 ...

  7. 『论文阅读笔记』目标检测模型中的性能评价方式-IOU、precision/recall、mAP、PR、Fps!

    目标检测模型中的性能评估标准-IOU.precision/recall.mAP.PR.Fps! 文章目录 一.交并比IOU 二.精确率(precision)和召回率(recall) 三.P-R(pre ...

  8. 几行代码构建全功能的对象检测模型,他是如何做到的?

    作者 | Alan Bi 译者 | 武明利,责编 | Carol 出品 | AI科技大本营(ID:rgznai100) 如今,机器学习和计算机视觉已成为一种热潮.我们都看过关于自动驾驶汽车和面部识别的 ...

  9. 【OpenCV 4开发详解】颜色模型与转换

    通用模板 本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本Ope ...

最新文章

  1. 2016 ACM/ICPC Asia Regional Shenyang Online
  2. 大数据与智能算法(二-应用级技术)-SMU在线学习笔记
  3. 鉴机识变,面向未来|RocketMQ Summit 2022 即将来袭
  4. jquery ajax 删除数据,JQuery ajax 保存数据,删除数据
  5. winshark重要数据结构
  6. 基于SpringBoot的CodeGenerator
  7. 外设驱动库开发笔记31:S-Modlue远红外气体传感器驱动
  8. mysql表全连接_关于mysql 实现表连接(左,右,内,全连接)
  9. RHEL6/7 x86_64下cachefilesd占用cpu达到100%
  10. 区块链入门教程openzeppelin库详解
  11. 名校课程、计算机相关课程等网站连接
  12. default在php定义什么,default(T)的含义
  13. snmptrap发送消息到服务器,我试图通过snmptrap发送snmp消息
  14. Himawari-8葵花八HSD数据处理——几何校正
  15. 第一阶段✦第一章☞信息化知识
  16. 题目:离骚-原文和译文少了一行,你能写程序识别并找出来吗
  17. h2o.ai源码解析(1)—项目简介
  18. 《实用回归分析》 何晓群 第五章
  19. 初中计算机毕业测试,2019年初中信息技术毕业考试顺利结束
  20. ####好好好#####知识图谱上的双塔召回:阿里的IntentGC模型

热门文章

  1. 浙大首届AI专业本科生将于9月入学,纳入竺院图灵班
  2. 何恺明的GN之后,权重标准化新方法能超越GN、BN吗? | 技术头条
  3. 程序员老在改Bug,就不能一次改好吗?
  4. Arm 发布Mali多媒体套件,机器学习将不再是高端手机的专享
  5. 每一个开发人员都应该懂的 UML 规范
  6. 为什么老外不愿意用 MyBatis?
  7. SpringBoot第八篇:springboot整合mongodb
  8. 《如何高效学习》作者推荐!
  9. 导师:CV学的这么差,你别毕业了
  10. Facebook工程师教你什么是随机森林,就算零基础也可以看懂 | 干货