Faster R-CNN:端到端的目标检测网络

本文回顾了由微软研究人员开发的 Faster R-CNN 模型。Faster R-CNN 是一种用于物体检测的深度卷积网络,在用户看来,它是一个单一的、端到端的统一网络。该网络可以准确快速地预测不同物体的位置。为了真正理解 Faster R-CNN,我们还必须快速概述一下它所进化的网络,即 R-CNN 和 Fast R-CNN。

本文首先快速回顾了基于区域的 CNN (R-CNN),这是首次尝试构建使用预训练 CNN 提取特征的物体检测模型。接下来,快速回顾了 Fast R-CNN,它比 R-CNN 更快,但不幸的是它忽略了区域提案的生成方式。Faster R-CNN 后来解决了这个问题,它构建了一个区域提案网络,可以生成区域提案,并将其输入到检测模型 (Fast R-CNN) 以检查物体。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、对象检测流程概述 

传统的对象检测技术遵循下图给出的 3 个主要步骤。第一步涉及生成多个区域提案。这些区域提案是可能包含对象的候选区域。这些区域的数量通常为几千个,例如 2,000 个或更多。一些生成区域提案的算法的示例是选择性搜索和 EdgeBox。

从每个区域提案中,使用各种图像描述符(例如方向梯度直方图 (HOG))提取固定长度的特征向量。该特征向量对于对象检测器的成功至关重要。即使对象由于某些变换(例如缩放或平移)而发生变化,该向量也应该充分描述对象。

然后使用特征向量将每个区域提案分配给背景类或对象类之一。随着类别数量的增加,构建可以区分所有这些对象的模型的复杂性也会增加。用于对区域提案进行分类的流行模型之一是支持向量机 (SVM)。

这个快速概述足以理解基于区域的卷积神经网络 (R-CNN) 的基础知识。

2、R-CNN 快速概览

2014 年,加州大学伯克利分校的一组研究人员开发了一种名为 R-CNN(基于区域的卷积神经网络的缩写)的深度卷积网络,它可以检测图像中的 80 种不同类型的物体。

与上图所示的物体检测技术的通用流程相比,R-CNN 的主要贡献只是基于卷积神经网络 (CNN) 提取特征。除此之外,一切都与通用物体检测流程相似。下图显示了 R-CNN 模型的工作原理。

R-CNN 由 3 个主要模块组成:

  • 第一个模块使用选择性搜索算法生成 2,000 个区域提案。
  • 在调整为固定的预定义大小后,第二个模块从每个区域提案中提取长度为 4,096 的特征向量。
  • 第三个模块使用预训练的 SVM 算法将区域提案分类为背景或对象类之一。

R-CNN 模型有一些缺点:

  • 它是一个多阶段模型,其中每个阶段都是一个独立的组件。因此,它无法进行端到端训练。
  • 它将从预训练的 CNN 中提取的特征缓存在磁盘上,以便稍后训练 SVM。这需要数百 GB 的存储空间。
  • R-CNN 依赖于选择性搜索算法来生成区域提案,这需要大量时间。此外,该算法无法针对检测问题进行定制。
  • 每个区域提案都独立地输入到 CNN 进行特征提取。这使得无法实时运行 R-CNN。

作为 R-CNN 模型的扩展,提出了 Fast R-CNN 模型以克服一些局限性。下一节将简要概述 Fast R-CNN。

3、Fast R-CNN 快速概览

Fast R-CNN是一种由 Facebook AI 研究员、前微软研究员 Ross Girshick 独自开发的物体检测器。Fast R-CNN 克服了 R-CNN 中的几个问题。顾名思义,Fast R-CNN 相对于 R-CNN 的一个优势是速度。

以下是Fast R-CNN中主要贡献的摘要:

  • 提出了一个名为 ROI Pooling 的新层,可从同一图像中的所有提案(即 ROI)中提取等长特征向量。
  • 与具有多个阶段(区域提案生成、特征提取和使用 SVM 进行分类)的 R-CNN 相比,Faster R-CNN 构建的网络只有一个阶段。
  • Faster R-CNN 在所有提案(即 ROI)之间共享计算(即卷积层计算),而不是独立进行每个提案的计算。这是通过使用新的 ROI Pooling 层来实现的,这使得 Fast R-CNN 比 R-CNN 更快。
  • Fast R-CNN 不会缓存提取的特征,因此与需要数百 GB 的 R-CNN 相比,它不需要那么多磁盘存储。
  • Fast R-CNN 比 R-CNN 更准确。

Fast R-CNN 的一般架构如下所示。与 R-CNN 中的 3 个阶段相比,该模型由一个阶段组成。它只接受图像作为输入并返回检测到的对象的类概率和边界框。

最后一个卷积层的特征图被馈送到 ROI Pooling 层。原因是从每个区域提案中提取固定长度的特征向量。下面的 GIF 显示了 ROI Pooling 层的工作原理。

简而言之,ROI Pooling 层的工作原理是将每个区域提案拆分成一个单元格网格。最大池化操作应用于网格中的每个单元格以返回单个值。所有单元格的所有值都代表特征向量。如果网格大小为 2×2,则特征向量长度为​​ 4。

有关 ROI Pooling 层的更多信息,请查看这篇文章。

然后,使用 ROI Pooling 提取的特征向量被传递到一些 FC 层。最后一个 FC 层的输出分为 2 个分支:

  • Softmax 层用于预测类别得分
  • FC 层用于预测检测到的对象的边界框

在 R-CNN 中,每个区域提案都独立于其他区域提案输入到模型中。这意味着如果处理单个区域需要 S 秒,则 N 个区域需要 S*N 秒。Fast R-CNN 比 R-CNN 更快,因为它在多个提案之间共享计算。

R-CNN 从每幅图像中采样单个 ROI,而 Fast R-CNN 则从同一幅图像中采样多个 ROI。例如,R-CNN 从 128 张不同的图像中选择一批 128 个区域。因此,总处理时间为 128*S 秒。

对于 Faster R-CNN,可以从仅 2 张图像(每幅图像 64 个区域)中选择一批 128 个区域。当从同一幅图像中采样区域时,它们的卷积层计算是共享的,这减少了时间。因此,处理时间降至 2*S。但是,从同一幅图像中采样多个区域会降低性能,因为所有区域都是相关的。

尽管 Fast R-CNN 模型具有优势,但它有一个关键的缺点,因为它依赖于耗时的选择性搜索算法来生成区域提议。选择性搜索方法无法针对特定的对象检测任务进行定制。因此,它可能不足以准确检测数据集中的所有目标对象。

在下一节中,我们将介绍 Faster R-CNN。Faster R-CNN 构建了一个用于生成区域提议的网络。

4、Faster R-CNN

Faster R-CNN 是 Fast R-CNN 的扩展。顾名思义,Faster R-CNN 比 Fast R-CNN 更快,这要归功于区域提议网络 (RPN)。

本文的主要贡献是:

  • 提出区域提议网络 (RPN),这是一个完全卷积网络,可生成具有各种尺度和长宽比的提议。RPN 实现了注意神经网络的术语,以告诉对象检测 (Fast R-CNN) 在哪里查看。
  • 本文没有使用图像金字塔(即图像的多个实例但尺度不同)或过滤器金字塔(即具有不同大小的多个过滤器),而是引入了锚框的概念。锚框是具有特定尺度和长宽比的参考框。有了多个参考锚框,单个区域就会存在多个尺度和长宽比。这可以被认为是参考锚框的金字塔。然后将每个区域映射到每个参考锚框,从而检测不同尺度和长宽比的对象。
  • 卷积计算由 RPN 和 Fast R-CNN 共享。这减少了计算时间。

下图显示了 Faster R-CNN 的架构。它由 2 个模块组成:

  • RPN:用于生成区域提议。
  • Fast R-CNN:用于检测提议区域中的对象

RPN 模块负责生成区域提议。它应用了神经网络中的注意力概念,因此它指导 Fast R-CNN 检测模块在图像中寻找对象的位置。

请注意,卷积层(例如计算)是如何在 RPN 和 Fast R-CNN 模块之间共享的。

Faster R-CNN 的工作原理如下:

  • RPN 生成区域提案。
  • 对于图像中的所有区域提案,使用 ROI Pooling 层从每个区域中提取固定长度的特征向量。
  • 然后使用 Fast R-CNN 对提取的特征向量进行分类。
  • 除了返回边界框外,还返回检测到的对象的类别分数。

5、区域提议网络 (RPN)

R-CNN 和 Fast R-CNN 模型依赖于选择性搜索算法来生成区域提议。每个提议都被输入到预先训练的 CNN 中进行分类。本文提出了一种称为区域提议网络 (RPN) 的网络,它可以生成区域提议。这有一些优点:

  • 现在使用可以根据检测任务进行训练和定制的网络来生成区域提议。
  • 由于提议是使用网络生成的,因此可以对其进行端到端训练以针对检测任务进行定制。因此,与选择性搜索和 EdgeBoxes 等通用方法相比,它可以生成更好的区域提议。
  • RPN 使用与 Fast R-CNN 检测网络中使用的相同卷积层来处理图像。因此,与选择性搜索等算法相比,RPN 不需要额外的时间来生成提议。
    由于共享相同的卷积层,RPN 和 Fast R-CNN 可以合并/统一为单个网络。因此,训练只需进行一次。

RPN 处理与 Fast R-CNN 共享的最后一个卷积层返回的输出特征图。如下图所示。基于大小为 nxn 的矩形窗口,滑动窗口穿过特征图。对​​于每个窗口,都会生成多个候选区域提案。这些提案不是最终提案,因为它们将根据其“对象性得分”(如下所述)进行筛选。

6、锚点

根据下图,最后一个共享卷积层的特征图通过大小为 nxn 的矩形滑动窗口,其中对于 VGG-16 网络,n=3。对于每个窗口,生成 K 个区域提案。每个提案都根据称为锚点框的参考框进行参数化。锚点框的 2 个参数是:

  • 缩放比例
  • 长宽比

通常,有 3 个比例和 3 个长宽比,因此总共有 K=9 个锚点框。但 K 可能不同于 9。换句话说,每个区域提案都会生成 K 个区域,其中 K 个区域中的每一个在比例或长宽比上都有所不同。下图显示了一些锚点变化。

使用参考锚点(即锚框),使用单一尺度的单一图像,同时能够提供尺度不变的物体检测器,因为锚点存在于不同的尺度上。这避免了使用多个图像或过滤器。多尺度锚点是跨 RPN 和 Fast R-CNN 检测网络共享特征的关键。

对于每个 nxn 区域提议,提取一个特征向量(ZF 网络的长度为 256,VGG-16 网络的长度为 512)。然后,将该向量馈送到 2 个兄弟全连接层:

  • 第一个 FC 层名为 cls,表示一个二元分类器,为每个区域提议生成对象性分数(即该区域是否包含对象,或是否是背景的一部分)。
  • 第二个 FC 层名为 reg,它返回一个定义区域边界框的 4-D 向量。

第一个 FC 层(即二元分类器)有 2 个输出。第一个用于将该区域分类为背景,第二个用于将该区域分类为对象。下一节将讨论如何将对象性分数分配给每个锚点以及如何使用它来生成分类标签。

7、对象性得分

cls 层为每个区域提案输出一个包含 2 个元素的向量。如果第一个元素为 1,第二个元素为 0,则区域提案被归类为背景。如果第二个元素为 1,第一个元素为 0,则该区域表示对象。

为了训练 RPN,每个锚点都会根据交并比 (IoU) 获得正或负的对象性得分。

IoU 是锚点框与真实框的交集面积与 2 个框的并集面积之比。 IoU 的范围从 0.0 到 1.0。当没有交集时,IoU 为 0.0。随着 2 个框彼此靠近,IoU 会增加,直到达到 1.0(当 2 个框 100% 相同时)。

接下来的 4 个条件使用 IoU 来确定为锚点分配正或负的客观性得分:

  • 与任何真实框的 IoU 重叠度高于 0.7 的锚点将被赋予正的客观性标签。
  • 如果没有 IoU 重叠度高于 0.7 的锚点,则为与真实框具有最高 IoU 重叠度的锚点分配正标签。
  • 当所有真实框的 IoU 重叠度小于 0.3 时,将负的客观性得分分配给非正的锚点
  • 负的客观性得分意味着锚点被归类为背景。

既不是正的也不是负的锚点对训练目标没有贡献。

我第一次阅读这篇论文时,对第二和第三个条件感到困惑。所以,让我们进一步澄清一下。

假设有 3 个区域提案与 3 个锚点相关联,它们与 3 个真实框的 IoU 分数如下所示。因为有一个锚点的 IoU 分数为 0.9,高于 0.7,所以它与该真实框的 IoU 分数为正,与所有其他框的 IoU 分数为负。

0.9, 0.55, 0.1

这是对锚点进行分类的结果:

positive, negative, negative

第二个条件意味着当没有锚点的 IoU 重叠分数高于 0.7 时,则搜索具有最高 IoU 的锚点并为其分配正的客体性分数。预计最大 IoU 分数小于或等于 0.7,但令人困惑的是,论文中没有提到 IoU 分数的最小值。

预计最小值应为 0.5。因此,如果锚点框的 IoU 分数大于 0.5 但小于或等于 0.7,则为其分配正的客体性分数。

假设锚点的 IoU 分数如下所示。因为最高的 IoU 分数是第二个,其值为 0.55,所以它符合第二个条件。因此,它被分配了一个正的 objectness 分数。

0.2, 0.55, 0.1

以下是对锚点进行分类的结果:

negative, positive, negative

第三个条件规定,当一个锚点与所有真实框的 IoU 分数小于 0.3 时,则为该锚点分配一个负的 objectness 分数。对于接下来的 IoU 分数,由于所有 IoU 分数都小于 0.3,因此在 3 种情况下为该锚点分配一个负分数。

0.2, 0.25, 0.1

以下是对锚点进行分类的结果:

negative, negative, negative

根据第四个条件,当一个锚点的 IoU 分数大于或等于 0.3 但小于或等于 0.5 时,它既不被分类为正也不被分类为负。此锚点不用于训练分类器。

对于以下 IoU 分数,锚点未分配任何标签,因为所有分数都在 0.3 和 0.5 之间(含)。

0.4, 0.43, 0.45

下一个等式总结了这 4 个条件。

请注意,第一个条件(0.7 < IoU)通常足以将一个锚点标记为正(即包含一个对象),但作者更喜欢提及第二个条件(0.5 < IoU <= 0.7),因为在极少数情况下不存在 IoU 为 0.7 的区域。

8、RPN 和 Fast R-CNN 之间的特征共享

Fast R-CNN 架构中的 2 个模块,即 RPN 和 Fast R-CNN,是独立的网络。它们每个都可以单独训练。相比之下,对于 Faster R-CNN,可以构建一个统一的网络,其中 RPN 和 Fast R-CNN 可以同时训练。

核心思想是 RPN 和 Fast R-CNN 共享相同的卷积层。这些层仅存在一次,但在 2 个网络中使用。可以称之为层共享或特征共享。请记住,锚点使得 Faster R-CNN 中的 2 个模块之间可以共享特征/层。

9、训练 Faster R-CNN

Faster R-CNN 论文提到了在共享卷积层的同时训练 RPN 和 Fast R-CNN 的 3 种不同方法:

  • 交替训练
  • 近似联合训练
  • 非近似联合训练

9.1 交替训练

第一种方法称为交替训练,其中首先训练 RPN 以生成区域提案。共享卷积层的权重基于 ImageNet 上的预训练模型进行初始化。RPN 的其他权重随机初始化。

在 RPN 生成区域提案的框后,RPN 和共享卷积层的权重都会进行调整。

RPN 生成的提案用于训练 Fast R-CNN 模块。在这种情况下,共享卷积层的权重使用 RPN 调整后的权重进行初始化。其他 Fast R-CNN 权重随机初始化。在训练 Fast R-CNN 时,Fast R-CNN 和共享层的权重都会进行调整。共享层中调整后的权重再次用于训练 RPN,并重复该过程。

根据论文,交替训练是训练这两个模块的首选方式,并应用于所有实验。

9.2 近似联合训练

第二种方法称为近似联合训练,其中 RPN 和 Fast R-CNN 都被视为单个网络,而不是两个单独的模块。在这种情况下,区域提案由 RPN 生成。

不更新 RPN 或共享层的权重,提案直接输入 Fast R-CNN,后者检测对象的位置。只有在 Fast R-CNN 产生输出后,Faster R-CNN 中的权重才会调整。

由于在生成区域提案后不更新 RPN 和共享层的权重,因此会忽略相对于区域提案的权重梯度。与第一种方法相比,这会降低该方法的准确性(即使结果接近)。另一方面,训练时间减少了约 25-50%。

9.3 非近似联合训练

在近似联合训练方法中,使用 RoI Warping 层来计算相对于建议边界框的权重梯度。

9.4 缺点

Faster R-CNN 的一个缺点是,RPN 的训练方式是,所有 256 个小批量的锚点都是从一张图像中提取的。由于一张图像中的所有样本可能相关(即它们的特征相似),因此网络可能需要很长时间才能达到收敛。

10、Mask R-CNN

作为 Faster R-CNN 的扩展,Mask R-CNN 模型包含另一个分支,该分支为每个检测到的对象返回一个掩码。

11、结束语

本文回顾了一种用于对象检测的深度卷积神经网络 Faster R-CNN,它可以准确地检测和分类图像中的对象。

本文首先回顾了任何对象检测模型的通用步骤。然后,它快速回顾了 R-CNN 和 Fast R-CNN 模型的工作原理,以便了解 Faster R-CNN 正在克服哪些挑战。

Faster R-CNN 是一个端到端训练的单阶段模型。它使用一种新颖的区域提议网络 (RPN) 来生成区域提议,与传统算法(如选择性搜索)相比,这节省了时间。它使用 ROI 池化层从每个区域提议中提取固定长度的特征向量。

我们看到的 Faster R-CNN 的一个缺点是,对于 RPN,小批量中的所有锚点都是从单个图像中提取的。由于来自单个图像的所有样本可能存在相关性(即它们的特征相似),因此网络可能需要很长时间才能达到收敛。

话虽如此,Faster R-CNN 是一种最先进的物体检测模型。此后,Mask R-CNN 已基于 Faster R-CNN 构建,以返回每个检测到的物体的物体掩码。


原文链接:Faster R-CNN快速指南 - BimAnt

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

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

相关文章

《接口自动化测试框架》代码片段 - 接口请求封装

抛砖引玉 requests模块是Python中发送HTTP请求的强大工具&#xff0c;它以其直观易用的API和人性化的设计赢得了广泛赞誉。 这个模块不仅提供了丰富的功能来定制HTTP请求&#xff0c;如设置请求头、传递URL参数等&#xff0c;还能够自动处理许多底层细节&#xff0c;如Cookie管…

重庆公司记账代理,打造专业财务管理解决方案的领先企业

重庆公司记账代理&#xff0c;作为专业的财务管理服务提供商&#xff0c;我们的目标是为公司的经营管理和决策提供科学、准确的财务数据支持&#xff0c;我们通过长期的专业经验和对市场的深入理解&#xff0c;为您提供一站式的记账服务和财务咨询。 专业团队 我们拥有一支由经…

如何移动 hiberfil.sys 文件来减少C盘空间

如何移动 hiberfil.sys 文件来减少C盘空间 hiberfil.sys 文件是什么&#xff1f; hiberfil.sys 文件是 Windows 系统在开启休眠功能后自动生成的内存镜像文件。这个文件保存了系统休眠时的内存内容&#xff0c;以便我们唤醒电脑之后可以快速恢复到休眠前的状态。这个文件通常…

基于JSP技术的师生交流平台

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;Myeclipse、B/S架构 系统展示 首页 管理员登录界面 学生信息管理…

Qwen2开源发布,各方位全面升级!

今天&#xff0c;通义千问团队带来了Qwen2系列模型&#xff0c;Qwen2系列模型是Qwen1.5系列模型的重大升级。包括了&#xff1a; 5个尺⼨的预训练和指令微调模型, 包括Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B以及Qwen2-72B&#xff1b; 在中⽂英语的基础上&#xf…

Thermal-BST自动化工具在Flotherm建模中的应用与优势

引言 随着科技的不断发展&#xff0c;电子领域的需求也越来越广泛和多样化。然而&#xff0c;PCB板及其上的器件建模问题一直是电子工程师在设计过程中面临的重要挑战之一。软件中原有的PCB建模工具&#xff0c;转换出来的模型复杂&#xff0c;影响后期的网格划分&#xff0c;…

选择云桌面必看:影响云桌面性能的一些重要因素

当云桌面发展的如火如荼并被越来越多的人所追捧的时候&#xff0c;偶然在网上看到有人评论说云桌面太坑&#xff0c;说好的免维护和节省成本好像与想象中的还是不一样。云桌面真的太坑&#xff1f;那是因为你没做好这几点。 选择云桌面你该关注哪些指标&#xff1f; 其实从云…

查询SQL03:大的国家

问题描述 如果一个国家满足下述两个条件之一&#xff0c;则认为该国是 大国 &#xff1a; 面积至少为 300 万平方公里&#xff08;即&#xff0c;3000000 km2&#xff09;&#xff0c;或者 人口至少为 2500 万&#xff08;即 25000000&#xff09; 编写解决方案找出 大国 的国…

亚马逊测评自养号技术全攻略:一站式解决方案

在跨境电商这行&#xff0c;产品测评可是个大问题。如果你的商品销量少&#xff0c;评价也不多&#xff0c;那买家就很难注意到你的产品&#xff0c;更别提下单购买了。毕竟&#xff0c;大家都喜欢跟风买那些已经有很多人好评的产品&#xff0c;而不是冒险尝试一个全新的。 我们…

替代UCC28250抗干扰支持预偏置启动|支持半桥全桥|增强型驱动器

1. 产品特性(替代UCC28250) ➢ 支持预偏置启动 ➢ 死区时间可调的同步整流输出 ➢ 支持电压模控制和电流模控制 ➢ 支持源边控制和副边控制 ➢ 5V&#xff0c;精度3%电压输出 ➢ 软启动和打嗝恢复时间可调 ➢ 同步整流软启动阈值和时间可调 ➢ 斜坡补偿信号斜率可调 ➢…

2009年408真题解析

2009年408真题解析 【2009.1】为解决计算机主机与打印机之间速度不匹配问题&#xff0c;通常设置一个打印数据缓冲区&#xff0c;主机将要输出的数据依次写入该缓冲区&#xff0c;而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是。 A.栈 B.队列 C.树 D.图 …

【单调栈讲解】

单调栈 考察单调栈。 我们需要维护一个递增的单调栈&#xff0c;同时要给下标入栈&#xff0c;而不是元素入栈。 给i位置入栈的时候&#xff0c;发现右指针i1位置元素一定小&#xff0c;而左指针i-1位置元素也一定小&#xff0c;所以当前i位置元素出栈对应的答案为&#xff0…

干货分享:如何做好采购和供应链管理工作?

简单来说&#xff0c;采购是企业获取所需货物和材料的过程&#xff0c;而供应链管理是将这些货物转化为产品并尽可能高效地分发给客户。 但做好采购和供应链管理的关键是实现采购和供应商的协同管理。为什么这么说呢&#xff1f; 在成本方面&#xff0c;采供协同管理使得企业…

[Vue3:Vite构建项目]:安装router实现登录页面路由跳转

文章目录 一&#xff1a;前置依赖查看依赖安装vite npm create vitelatest sys-instruction-0607 --template vue-ts安装路由&#xff1a;npm install vue-router4安装elementUI&#xff1a;npm install element-plus --save 二&#xff1a;配置文件&#xff1a;views&#xff…

hot100_62不同路径

不同路径 题目思路、代码1.排列组合2.动态规划 题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff0…

YOLOv5改进 | 注意力机制 | 在主干网络中添加SOCA模块【原理+附完整代码】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 现有的基于CNN的SISR方法主要关注更宽或更深的架构设计&#xff0c;忽视了探索中间层的特征相关性&#xff0c;因此阻碍了CNN的表达能力。为…

nginx c++模块编译

不论是c还是c&#xff0c;nginx的第三方模块编写没什么太区别&#xff0c;但是提供给nginx调用的&#xff0c;必须是纯c的接口。 先说下为什么不能使用c编译nginx&#xff0c;nginx是纯c写的&#xff0c;而且c是兼容c的&#xff0c;但是用c(g)编译nginx的框架&#xff0c;就会出…

VRRP----虚拟路由器冗余协议(技术专题)

目录 一、VRRP的基本原理 1.1 技术背景 1.2 VRRP带来了什么 1.2.1 VRRP的作用 1.2.2 VRRP工作的过程 1.2.3 VRRP报文: 1.3 VRRP术语 1.3.1 虚拟IP地址、MAC地址 1.3.2 Master、Backup路由器 二、VRRP的基础配置 实例一 需求 配置 一、VRRP的基本原理 1.1 技术背景…

docker 拉取镜像报错: error pulling image configuration:(kafka)

一、问题描述 docker 拉取镜像报错: error pulling image configuration:&#xff08;kafka&#xff09; ERROR: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/a6/a692873757c06a38279b61…

idea debug时提示”Method breakpoints may dramatically slow down debugging“的解决办法

问题现象 今天同事喊我过去看一个问题&#xff0c;项目正常启动的时候没问题&#xff0c;debug模式就卡住了&#xff0c;很久不动。我推测是哪个断点导致的&#xff0c;一看断点果然有情况。在方法上打了断点。 解决方式(Android Studio一样的解决&#xff09; 1、View Brea…