【深度学习】目标检测的全面回顾

一、说明

        随着自动驾驶汽车、智能视频监控、面部检测和各种人数统计应用的兴起,对快速准确的物体检测系统的需求也在不断增长。这些系统不仅涉及识别和分类图像中的每个对象,还涉及通过在图像周围绘制适当的边界框来定位每个对象。这使得对象检测比其传统的计算机视觉前身图像分类更难完成。

        然而,幸运的是,目前最成功的对象检测方法是图像分类模型的扩展。几个月前,谷歌发布了一个新的Tensorflow对象检测API。此版本附带了一些特定模型的预构建架构和权重:

  • 带移动网络的单次多盒探测器 (SSD)
  • 带有 Inception V2 的固态硬盘
  • 采用 Resnet 101 的基于区域的全卷积网络 (R-FCN)
  • 更快的RCNN与Resnet 101
  • 更快的RCNN与Inception Resnet v2

        在我的上一篇博客文章中,我介绍了上面列出的三种基本网络架构背后的直觉:MobileNets,Inception和ResNet。这一次,我想对Tensorflow的对象检测模型做同样的事情:更快的R-CNN,R-FCN,和SSD。在这篇文章的最后,我们希望已经了解深度学习如何应用于对象检测,以及这些对象检测模型如何相互启发和发散。

二、更快的 R-CNN

        Faster R-CNN现在是基于深度学习的对象检测的规范模型。它帮助激发了之后的许多检测和分割模型,包括我们今天要研究的另外两个模型。不幸的是,如果不了解Faster R-CNN的前身R-CNN和Fast R-CNN,我们就无法真正开始理解它,所以让我们快速了解一下它的祖先。

2.1 R-CNN

        R-CNN是Faster R-CNN的祖父。换句话说,R-CNN真的启动了事情。

        R-CNN,或基于Region的Convolutional N eural Network,由3个简单的步骤组成:

  1. 使用称为选择性搜索的算法扫描输入图像以查找可能的对象,生成~2000个区域建议
  2. 在每个区域提案之上运行卷积神经网络 (CNN)
  3. 获取每个CNN的输出并将其馈送到a)SVM中以对区域进行分类,b)线性回归器以收紧对象的边界框(如果存在此类对象)。

下图说明了这 3 个步骤:

换句话说,我们首先提出区域,然后提取特征,然后根据其特征对这些区域进行分类。从本质上讲,我们已经将对象检测变成了图像分类问题。R-CNN非常直观,但非常慢。

2.2 fast R-CNN

        R-CNN的直系后代是Fast-R-CNN。Fast R-CNN在许多方面与原版相似,但通过两个主要增强提高了检测速度:

  1. 在提出区域之前对图像执行特征提取,因此在整个图像上只运行一个CNN,而不是2000个CNN的2000多个重叠区域
  2. 用softmax层替换SVM,从而扩展神经网络以进行预测,而不是创建新模型

新模型看起来像这样:

        正如我们从图像中看到的,我们现在基于网络的最后一个特征图生成区域建议,而不是从原始图像本身。因此,我们可以只为整个图像训练一个CNN。

        此外,与其训练许多不同的 SVM 来对每个对象类进行分类,不如使用单个 softmax 层直接输出类概率。现在我们只有一个神经网络需要训练,而不是一个神经网络和许多SVM。

        Fast R-CNN在速度方面表现得更好。只剩下一个大瓶颈:用于生成区域提案的选择性搜索算法。

2.3 faster R-CNN

        在这一点上,我们回到了最初的目标:更快的R-CNN。Faster R-CNN的主要见解是用快速神经网络取代慢速选择性搜索算法。具体而言,它引入了区域提案网络(RPN)。

以下是 RPN 的工作原理:

  • 在初始CNN的最后一层,一个3x3的滑动窗口在特征图上移动,并将其映射到较低的维度(例如256-d)。
  • 对于每个滑动窗口位置,它基于 k 个固定比率锚框(默认边界)生成多个可能的区域
  • 每个区域提案包括 a) 该区域的“客观性”分数和 b) 代表区域边界框的 4 个坐标

换句话说,我们查看上一个特征图中的每个位置,并考虑以它为中心的k个不同的框:一个高框,一个宽框,一个大框等。对于这些盒子中的每一个,我们输出我们是否认为它包含一个对象,以及该盒子的坐标是什么。这是它在一个滑动窗口位置的外观:

2 k 分数表示每个 k 边界框位于“对象”上的 softmax 概率。请注意,尽管 RPN 输出边界框坐标,但它不会尝试对任何潜在对象进行分类:它的唯一工作仍然是建议对象区域。如果锚框的“客观性”分数高于某个阈值,则该框的坐标将作为区域建议向前传递。

一旦我们有了我们的区域提案,我们就直接将它们输入到本质上是快速R-CNN的东西中。我们添加一个池化层,一些全连接层,最后添加一个softmax分类层和边界框回归器。从某种意义上说,更快的R-CNN = RPN + Fast R-CNN。

总而言之,Faster R-CNN实现了更好的速度和最先进的准确性。值得注意的是,尽管未来的模型在提高检测速度方面做了很多工作,但很少有模型能够显着优于Faster R-CNN。换句话说,Faster R-CNN可能不是最简单或最快的目标检测方法,但它仍然是性能最好的方法之一。举个例子,Tensorflow的Faster R-CNN和Inception ResNet是他们最慢但最准确的模型。

归根结底,Faster R-CNN 可能看起来很复杂,但其核心设计与原始 R-CNN 相同:假设对象区域,然后对其进行分类。现在,这是许多对象检测模型的主要管道,包括我们的下一个模型。

三、R-FCN里程碑

        还记得 Fast R-CNN 如何通过跨所有区域提案共享单个 CNN 计算来提高原始检测速度吗?这种想法也是R-FCN背后的动机:通过最大化共享计算来提高速度。

        R-FCN,或基于Region的Fully C卷积Net,在每个输出中共享100%的计算。由于是完全卷积的,它在模型设计中遇到了一个独特的问题。

        一方面,在对对象进行分类时,我们想学习模型中的位置不变性:无论猫出现在图像中的哪个位置,我们都想将其归类为猫。另一方面,在对物体进行检测时,我们要学习位置方差:如果猫在左上角,我们想在左上角画一个框。因此,如果我们试图在100%的网络中共享卷积计算,我们如何在位置不变性和位置方差之间做出妥协?

        R-FCN的解决方案:位置敏感的分数图

        每个位置敏感分数图表示一个对象类的一个相对位置。例如,一个分数地图可能会在检测到右上角时激活。另一个分数地图可能会激活它看到汽车下角的位置。你明白了。从本质上讲,这些分数图是卷积特征图,经过训练以识别每个对象的某些部分

现在,R-FCN的工作原理如下:

  1. 在输入图像上运行CNN(在本例中为ResNet)
  2. 添加一个完全卷积层以生成上述“位置敏感分数图”的分数库。应该有 k²(C+1) 分数图,其中 k² 表示划分对象的相对位置数(例如 3² 表示 3 x 3 网格),C+1 表示类数加上背景。
  3. 运行完全卷积区域建议网络 (RPN) 以生成感兴趣区域 (RoI)
  4. 对于每个投资回报率,将其划分为与分数图相同的k²“箱”或子区域
  5. 对于每个箱,检查记分库以查看该箱是否与某个对象的相应位置匹配。例如,如果我在“左上”箱上,我将抓取与对象的“左上角”对应的分数图,并在 RoI 区域中平均这些值。对每个类重复此过程。
  6. 一旦每个 k² 条柱都有每个类的“对象匹配”值,平均箱以获得每个类的单个分数。
  7. 在剩余的 C+1 维向量上使用软最大值对 RoI 进行分类

        总的来说,R-FCN看起来像这样,RPN生成了RoI:

        即使有解释和图像,您可能仍然对此模型的工作原理感到有些困惑。老实说,当您可以可视化R-FCN正在做什么时,它更容易理解。以下是R-FCN在实践中检测婴儿的一个这样的例子:

        简单地说,R-FCN考虑每个区域提案,将其划分为子区域,并迭代子区域,询问:“这看起来像婴儿的左上角吗?”,“这看起来像婴儿的顶部中心吗?“这看起来像婴儿的右上角吗?”等。它对所有可能的类重复此操作。如果有足够多的子区域说“是的,我与婴儿的那部分相匹配!”,那么在所有类别的softmax之后,RoI将被归类为婴儿。

        通过此设置,R-FCN能够通过提出不同的对象区域来同时解决位置方差问题,并通过让每个区域提案引用相同的分数图库来同时解决位置不变性问题。这些分数图应该学会将猫归类为猫,无论猫出现在哪里。最重要的是,它是完全卷积的,这意味着所有的计算都在整个网络中共享。

        因此,R-FCN比Faster R-CNN快几倍,并且达到了相当的精度。

四、SSD里程碑

        我们的最终型号是SSD,代表S ingle-S hot Detector。与R-FCN一样,它比Faster R-CNN提供了巨大的速度提升,但方式明显不同。

        我们的前两个模型分两个单独的步骤执行区域建议和区域分类。首先,他们使用区域提案网络来生成感兴趣的区域;接下来,他们使用全连接层或位置敏感的卷积层对这些区域进行分类。SSD 在“单次拍摄”中完成这两个操作,在处理图像时同时预测边界框和类。

具体来说,给定一个输入图像和一组真实标签,SSD 执行以下操作:

  1. 将图像通过一系列卷积层,产生几组不同比例的特征图(例如 10x10,然后是 6x6,然后是 3x3 等)
  2. 对于每个特征映射中的每个位置,请使用 3x3 卷积筛选器来评估一小组默认边界框。这些默认边界框基本上等同于 Faster R-CNN 的锚框。
  3. 对于每个框,同时预测 a) 边界框偏移量和 b) 类概率
  4. 在训练期间,将地面实况框与基于 IoU 的这些预测框进行匹配。最佳预测框将与所有其他具有 IoU 且真值为 >0.5 的框一起标记为“正数”。

        SSD听起来很简单,但训练它有一个独特的挑战。使用前两个模型,区域提案网络确保我们试图分类的所有内容都具有成为“对象”的最小概率。但是,对于SSD,我们跳过了该过滤步骤。我们从图像中的每个位置对边界框进行分类和绘制,使用多个不同的形状,在几个不同的比例下。因此,我们生成的边界框数量比其他模型多得多,而且几乎所有边界框都是否定示例。

        为了解决这种不平衡,SSD做了两件事。首先,它使用非极大值抑制将高度重叠的盒子组合成一个盒子。换句话说,如果四个形状、大小等相似的盒子。包含同一只狗,NMS 将保留置信度最高的那只并丢弃其余的狗。其次,该模型使用一种称为硬负挖掘的技术来平衡训练期间的类。在硬负挖掘中,每次训练迭代中仅使用具有最高训练损失(即误报)的负示例的子集。SSD 保持 3:1 的负负与正之比。

        它的架构如下所示:

        正如我上面提到的,最后有“额外的要素图层”可以缩小大小。这些不同大小的特征图有助于捕获不同大小的对象。例如,以下是 SSD 的实际应用:

        在较小的特征图(例如4x4)中,每个单元格覆盖图像的较大区域,使它们能够检测较大的物体。区域建议和分类同时执行:给定 p 个对象类,每个边界框都与一个 (4+p) 维向量相关联,该向量输出 4 个框偏移坐标和 p 类概率。在最后一步中,softmax再次用于对对象进行分类。

        最终,SSD与前两种型号没有太大区别。它只是跳过“区域建议”步骤,而是同时考虑图像每个位置的每个边界框及其分类。由于SSD可以一次性完成所有操作,因此它是三种型号中最快的,并且性能仍然相当可比。

五、结论

        更快的 R-CNN、R-FCN 和 SSD 是目前最好和最广泛使用的三种对象检测模型。其他流行的模型往往与这三个模型非常相似,都依赖于深度CNN(阅读:ResNet,Inception等)来完成最初的繁重工作,并且在很大程度上遵循相同的提案/分类管道。

        在这一点上,使用这些模型只需要了解Tensorflow的API。Tensorflow在这里有一个关于使用这些模型的入门教程。试一试,祝黑客愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/2153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端 mock 数据的几种方式

目录 接口demo Better-mock just mock koa webpack Charles 总结 具体需求开发前,后端往往只提供接口文档,对于前端,最简单的方式就是把想要的数据写死在代码里进行开发,但这样的坏处就是和后端联调前还需要再把写死的数据…

spring5源码篇(10)——spring-aop代理过程

spring-framework 版本:v5.3.19 文章目录 1、ProxyFactory1.1、createAopProxy() 创建AopProxy1.2、getProxy() 创建代理对象1.3、JdkDynamicAopProxy#invoke 代理逻辑1.3.1、advised.getInterceptorsAndDynamicInterceptionAdvice() 匹配添加的advisor并转化成所需…

基于51单片机和proteus的电流采集系统

此系统是基于51单片机和proteus的仿真设计,功能如下: 1. LCD1602实时显示获取到电流值及设定值。 2. 按键可调整电流设定值。 3. 电流值过高则蜂鸣器报警。 4. 指示灯指示电流及系统状态。 5. 系统信息可通过串口实时更新。 功能框图如下&#xff1…

<C语言> 自定义类型

1.结构体 结构体是一种用户自定义的数据类型,允许将不同类型的数据项组合在一起,形成一个更大的数据结构。结构体可以包含多个成员变量,每个成员变量可以是不同的数据类型,如整数、字符、浮点数等,甚至可以包含其他结构…

用html+javascript打造公文一键排版系统5:二级标题排版

公文中二级标题的一般以(X)标注(其中X为由"一二三四五六七八九十"中的字符组成的字符串),用楷体字加粗。 首先我们要判断一段文字是否包含二级标题,最简单的方法 就是判断文字中的头一个字符是否…

Unity中指定物体的模型面数分析

给定一架飞机模型,需要分析该模型中,各个3D物体的面数和三角形数,目的是用于观察哪些物体面数过多,需要减面。 一、模型面数分析 二、脚本代码 using System.Collections; using System.Collections.Generic; using UnityEngine…

ROS:action通信

目录 一、前言二、概念三、作用四、实际案例4.1需求4.2action通信自定义action文件4.2.1定义action文件4.2.2编辑配置文件4.2.3编译 4.3action通信自定义action文件调用(C)4.3.1流程4.3.2vscode配置4.3.3服务端4.3.4客户端4.3.5编译配置文件4.3.6执行 4.4action通信自定义actio…

字节跳动面试挂在2面,复盘后,决定二战.....

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了&#xf…

EXCEl——移除单元格中换行符

方法一:使用清除格式功能 步骤如下: 1.选中需要取消换行的单元格 2.在“开始"选项卡中找到"清除”功能,点击下拉菜单中的“清除格式" 3.这时单元格的换行就被取消了。 清除前效果图 清除后效果图 方法一:使用函数功能 步骤…

K8s入门

K8s入门 目录 K8s入门namespacepoddeployment多版本扩缩容治愈能力滚动更新版本回退 serviceClusterIPNodePort ingress域名访问路径重写流量限制 存储抽象PV&PVCConfigMapSecret namespace kubectl get ns # 获取命名空间 kubectl create ns 名字 # 创建命名空间 ku…

自动收小麦机(牛客2023萌新)

题目链接 示例1 输入 复制 4 1 2 1 1 4 5 2 2 2 3 4 输出 复制 10 说明 在第4格放出水流后,水流会流向第3格,由于第3格高度比第4格低,所以水流继续向左流向第2格,因为平地水流只能流2格,所以到达第2格后水流停…

【Fiddler】Fiddler实现mock测试(模拟接口数据)

软件接口测试过程中,经常会遇后端接口还没有开发完成,领导就让先介入测试,然后缩短项目时间,有的人肯定会懵,接口还没开发好,怎么介入测试,其实这就涉及到了我们要说的mock了。 一、mock原理 m…

【ArcGIS Pro二次开发】(49):村规数据入库【福建省】

之前用Arcpy脚本工具做了一个村规数据入库和主要图纸生成工具。 在使用过程中,感觉对电脑环境比较高,换电脑用经常会一些莫名其妙的错误,bug修得很累。近来随着ArcGIS Pro SDK的熟悉,就有了移植的想法。 这里先把村规数据入库工…

QT学习—【属于自己的】串口调试助手

文章目录 一、功能简介二、串口助手实现2.1 创建UI2.2 扫描可用串口2.3 配置波特率2.4 配置数据位2.5 配置停止位2.6 配置校验位2.7 打开/关闭串口2.8 刷新串口2.9 发送新行2.10 串口发送2.11 串口接收显示2.12 清空接收窗口2.13 定时发送2.14 固定窗口大小 三、总结3.1 将信号…

本地前端项目使用gitee仓库外链图片加载失败

错误&#xff1a;本地的前端项目&#xff0c;比如vue&#xff0c;纯html使用<img/>标签加载gitee保存的图片文件的时候&#xff0c;浏览器加载失败。 但是gitee可以正常访问图片 解决办法&#xff1a; 在index.html中加入meta标签就可以完美解决 <meta name"r…

centos升级龙蜥

centos升级龙蜥 龙蜥简介龙蜥官方社区centos升级龙蜥首先确认自己的centos版本下载迁移镜像源安装epel源迁移工具安装i686包查看执行迁移脚本结果查看重启机器查看系统信息 龙蜥简介 2021年10月19日的大会上&#xff0c;阿里云发布全新操作系统“龙蜥”并宣布开源。龙蜥操作系…

python 批量下载图片(协程)

要下载的图片网站 1、总共多少页&#xff0c;得到每页的 url 列表 2、每页的图片详情的 ulr 列表&#xff08;因为该高清大图在图片详情页&#xff0c;因此需要去图片详情页拿图片的url) ​​​​​​​ 3、进入图片详情页&#xff0c;获取到图片url 然后下载。 完整代码如下&…

涂鸦智能打造专业家庭智能生活助手,实现人机交互升级

近年来&#xff0c;智能家居设备的品类不断拓展&#xff0c;同时&#xff0c;人们对AI与智能家居的联动愈发憧憬。自然语言交互是未来人机交互的主要趋势之一&#xff0c;其关键在于使AI具备主动理解信息的能力&#xff0c;让用户的交互更轻松。如何将智能场景的交互变得更“善…

SpringBoot中通过自定义Jackson注解实现接口返回数据脱敏

场景 SpringBoot中整合Sharding Sphere实现数据加解密/数据脱敏/数据库密文&#xff0c;查询明文&#xff1a; SpringBoot中整合Sharding Sphere实现数据加解密/数据脱敏/数据库密文&#xff0c;查询明文_霸道流氓气质的博客-CSDN博客 上面讲的是数据库中存储密文&#xff0…

HTML+CSS+JavaScript:渲染柱形统计图

一、需求 用户输入四个季度的数据&#xff0c;根据数据生成柱形统计图&#xff0c;浏览器预览效果如下 二、完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…