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

一、说明

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

        然而,幸运的是,目前最成功的对象检测方法是图像分类模型的扩展。几个月前,谷歌发布了一个新的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在这里有一个关于使用这些模型的入门教程。试一试,祝黑客愉快!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css基本样式的使用

1、高度和宽度 .c1{height: 300px;width: 500px; }注意事项: 宽度,支持百分比行内标签,默认无效块级标签,默认有效(即使右侧空白,也不给你占用) 块级和行内标签 css样式 标签: di…

【使用机器学习和深度学习对城市声音进行分类】基于两种技术(ML和DL)对音频数据(城市声音)进行分类(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

图片速览 DCN K-means-friendly Spaces: Simultaneous Deep Learning and Clustering

本文使用了一种交替更新网络参数和聚类中心的方法。在网络更新完成之后,对于固定的网络参数和 M,再更新当前样本的分配向量。然后根据新的分配结果如式子3.8更新聚类中心: 注:文中还有问题是否能进行凸优化的部分 CG https…

IDEA使用GIT提交代码中文日志(commit message)乱码

最近换了新的开发环境,导致提交gti中文注释乱码,遂记录一下解决方案 idea中查看git提交信息显示中文是正常的 gitee上显示乱码 本地显示也是乱码 一、命令修改编码格式 git 安装目录下执行 git config --global i18n.commitencoding utf-8git config …

SpringMvc配置静态资源访问路径

文章目录 1. 整体流程2. registry.addResourceHandler()2.1 函数分析2.2 结果演示 3. ResourceHandlerRegistration.addResourceLocations()3.1 函数分析3.2 结果演示 1. 整体流程 1. 写一个配置类继承WebMvcConfigurationSupport 2. 利用 registry.addResourceHandler("…

vscode 配置ssh 免密登录 多台服务器

0、下载vscode Visual Studio Code - Code Editing. Redefined 之前一直用pycharm 但是好像社区免费版本不能连接服务器,还要本地同步代码,比较繁琐,因此改用vscode。 1、添加ssh 添加后可以尝试登录,确认下账号密码&#xff0…

浅谈性能测试策略之银行测试

一、性能测试的四个方面 在一般的性能测试讨论中大家通常只围绕三个方面进行提问和总结:测试脚本如何编写,被测系统如何监控,性能瓶颈如何调优。大部分刚刚接触性能测试的人会纠结于脚本的编写,如何设置参数化、如何设置关联、何时…

结合ChatGPT制作PPT

今天看到圈友的一个AI分享,然后自己本身需要做一个分享的PPT。刚好那着帖子实战一下。先说下整体感受。 优点:制作成本确实会比较低,很熟练的话大概就是1分钟一个都有可能。整体流程是先找个第三方PPT制作网站,看下支不支持文本转…

C# 属性

文章目录 实例属性静态属性只读属性:内部只读属性:动态计算值的属性方式一:主动计算方式二:被动计算 快速生成属性的方法:输入propfull,按两下tab键,然后再按tab键一次修改有底纹的字段&#xf…

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

6.7Jmeter5.1,非GUI模式,通过命令行传递线程数

原创文章,谢绝转载。 一、前提 本次做性能测试,需求是需要在Linux下的非GUI模式下执行。但用命令行执行时,线程数需要改变,为了执行方便,不需要每次都在脚本中修改线程数,那么线程数都需要通过参数传递&…

使用docker的常见bug

BUG1:磁盘被占满导致docker无法使用 docker ps 【查看docker能否正常使用】 正常的话会打印下图信息: 不正常的话打印如下图信息: journalctl -u docker 【查看docker无法正常使用的原因】,本次测试中遇到下图bug,意思是/var/l…

Bard:一个可以描述图像的人工智能

Bard 是一个大型语言模型,可以对各种提示和问题进行交流和生成类似人类的文本。它接受了大量的文字和代码训练,可以生成文本、翻译语言、编写不同类型的创意内容,并以信息丰富的方式回答你的问题。 Bard 还可以识别图像。它可以识别图像中的…

libvirt 热迁移流程及参数介绍

01 热迁移基本原理 1.1 热迁移概念 热迁移也叫在线迁移,是指虚拟机在开机状态下,且不影响虚拟机内部业务正常运行的情况下,从一台宿主机迁移到另外一台宿主机上的过程。 1.2 虚拟机数据传输预拷贝和后拷贝 预拷贝(pre-copy): …

星火认知大模型,让我感受到了国产AI的崛起

文章目录 一、申请和测试代码二、实测GPT4.0和星火认知大模型的对比2.1 测试网站2.2 经典问题提问对比2.3 代码问题提问对比2.4 论文问题对比2.5 评价 一、申请和测试代码 在我之前的一篇文章中,我分享了如何申请星火认知大模型的内测,并提供了一份可以…

python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 🚀Haar分类器是一种基于机器学习的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的,可以用来描述目标的边缘、角落和线条等特征。 使用…

大模型开发(七):LLM提示工程(Prompt)与思维链(CoT)

全文共6500余字,预计阅读时间约13~20分钟 | 满满干货(附案例),建议收藏! 一、LLM模型的涌现能力 在GPT没有爆火之前,一直以来的共识都是:模型的规模越大,模型在下游任务上的能力越多、越强。 LLM原始训…

QT_Creator格式化工具使用

QT_Creator代码格式化工具使用 为了确保代码格式整齐统一,使用代码格式化工具会将写的代码自动格式化以保证格式统一 Astyle: A Free, Fast, and Small Automatic Formatter for C, C, C/CLI, Objective-C, C#, and Java Source Code 一、C和C代码格式化…

Ceph 服务的运用

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

【半监督医学图像分割 2023 CVPR】PatchCL

文章目录 【半监督医学图像分割 2023 CVPR】PatchCL摘要1. 简介2. 相关工作2.1 半监督学习2.2 对比学习 3. 方法3.1 类感知补丁采样3.2 伪标记引导对比损失3.3 总体学习目标3.4 伪标号生成与求精 4. 实验5. 结果 【半监督医学图像分割 2023 CVPR】PatchCL 论文题目:…