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

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

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

相关文章

继续引爆!5天连出2个里程碑成果,离子阱量子计算机嗨翻天!

5月30日&#xff0c;清华大学的一项成果被Nature审稿人称为“量子模拟领域的巨大进步”&#xff01;“值得关注的里程碑”&#xff01;该成果就是中国科学院院士、清华大学交叉信息研究院教授段路明带领研究组在量子模拟计算领域取得的重要突破。段路明研究组首次实现512离子二…

LeetCode62不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条不同的路径&#xff1f; …

Amesim示例篇-案例2:液体循环回路

前文已完成流体库常用的元件参数与使用方法简单的介绍。本文将对液体回路系统管路的压降标定仿真方法与注意事项进行讨论。首先&#xff0c;本案例应用到的元件有膨胀水壶、水泵、阻力管、常规管路等元件。将上述元件进行串联组成液冷循环回路。 图1 膨胀水壶 图2 水泵 1…

哈希经典题目(C++)

文章目录 前言一、两数之和1.题目解析2.算法原理3.代码编写 二、判定是否互为字符重排1.题目解析2.算法原理3.代码编写 三、 字⺟异位词分组1.题目解析2.算法原理3.代码编写 总结 前言 哈希表是一个存储数据的容器&#xff0c;我们如果想要快速查找某个元素&#xff0c;就可以…

空间搜索geohash概述

概述 通常在一些2C业务场景中会根据用户的位置来搜索一些内容。通常提供位置搜索的都是直接通过redis/mongodb/es等中间件实现的。 但是这些中间件又是怎么实现位置搜索的呢&#xff1b; 查了一番资料&#xff0c;发现背后一个公共的算法Geohash。 Geohash 经度和纬度是2个…

BL104网关钡铼技术多协议设备互操作简单一键接入

在工业环境中&#xff0c;设备之间的通信和互操作性是实现智能化生产的关键。为了满足这一需求&#xff0c;钡铼技术推出了PLC物联网关BL104&#xff0c;一款专为工业环境设计的多协议设备&#xff0c;简化了设备互操作的复杂性&#xff0c;实现了一键接入的便捷性。 PLC物联网…

Git介绍及应用

1.简介 Git是一个分布式版本控制器&#xff0c;通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件&#xff0c;Git仓库分为两种&#xff1a; 本地仓库:开发人员自己电脑上的Git仓库远程仓库:远程服务器上的Git仓库 2.执行流程 3.Git代码托管服务…

New Work-flow of Circuit Bootstrapping

参考文献&#xff1a; [CGGI17] Chillotti I, Gama N, Georgieva M, et al. Faster packed homomorphic operations and efficient circuit bootstrapping for TFHE. ASIACRYPT 2017 (1): 377-408.[CDKS21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion be…

计算机组成结构—IO接口(IO控制器)

目录 一、I/O 接口的功能 二、I/O 接口的基本结构 1. 总线连接的数据通路 2. I/O 接口的基本组成 三、I/O 端口及其编址 1. 统一编址 2. 不统一编址 四、I/O 接口的类型 两个系统或两个部件之间的交接部分&#xff0c;一般就称为 接口。接口可以是硬件上两种设备间的连…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:医疗健康智能服务

作为国产运动医学的领导者&#xff0c;致力于提供运动医学的整体临床解决方案&#xff0c;公司坐落于北京经济技术开发区。应用于肩关节、膝关节、足/踝关节、髋关节、肘关节、手/腕关节的运动医学设备、植入物和手术器械共计300多个品规通过NMPA的批准&#xff0c;临床应用于国…

docker构建java项目镜像

资料参考 参考自黑马教程&#xff1a;10.Docker基础-自定义镜像_哔哩哔哩_bilibili 初步准备 打包好java项目jar包&#xff0c;和Dockerfile文件一起放到指定目录下&#xff0c;后续操作都是在该目录下操作&#xff0c; 我这边是&#xff1a;/usr/local/src/train-ticket/ …

React -- memo允许你的组件在 props 没有改变的情况下跳过重新渲染。

memo(Component, arePropsEqual?) 使用 memo 将组件包装起来&#xff0c;以获得该组件的一个 记忆化 版本。通常情况下&#xff0c;只要该组件的 props 没有改变&#xff0c;这个记忆化版本就不会在其父组件重新渲染时重新渲染。但 React 仍可能会重新渲染它&#xff1a;记忆化…

vue3路由详解,从0开始手动配置路由(vite,vue-router)

创建一个不含路由的vue项目 &#xff08;查看路由配置可以直接跳过这一段&#xff09; 输入npm指令&#xff0c;然后写一个项目名称&#xff0c;之后一路回车即可 npm create vuelatest 注意这里我们不选引入vue router&#xff0c;成功后可以 查看目录 然后按提示信息输入指…

PLC通过Profinet转Modbus网关与流量计通讯案例

1、案例背景 在工业自动化系统中&#xff0c;PLC(可编程逻辑控制器)与流量计之间的通信是保证以后设备生产数据准确传输和实现控制功能的关键。但是&#xff0c;由于PLC和流量计可能使用不同的通信协议(如Profinet和Modbus)&#xff0c;因此需要一种转换机制来实现它们之间的通…

Telnet发邮件的功能如何实现?有哪些限制?

Telnet发邮件有哪些步骤&#xff1f;使用Telnet发送邮件安全吗&#xff1f; 虽然大多数人使用图形化的电子邮件客户端发送和接收邮件&#xff0c;但了解如何通过Telnet发邮件依然是有益的。AokSend将详细介绍Telnet发邮件的功能如何实现&#xff0c;帮助读者掌握这种基础但有用…

问题:材料题请点击右侧查看材料问题 查看材料 #学习方法#经验分享#学习方法

问题&#xff1a;材料题请点击右侧查看材料问题 查看材料 A.Colleges may reduce their enrollment. B.Top universities become increasingly competitive. C.Universities become selective in student admission. D.Colleges invest less in academy and infrastructure…

模拟超市收银系统

题目 模拟超市收银系统 内容要求&#xff1a;使用文本命令行窗口设计模拟超市收银系统。要求由收银员输入顾客的会员卡卡号&#xff08;若有卡&#xff09;、所购商品的货号等。从文件中取出有关价格信息&#xff0c;再把这些信息返回给收银台。同时把该收银台的销售总量和有…

「动态规划」如何求地下城游戏中,最低初始健康点数是多少?

174. 地下城游戏https://leetcode.cn/problems/dungeon-game/description/ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由m x n个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。骑士…

Node.js环境搭建

背景 想接触下node开发, 打算做个node环境 一、安装包获取 我喜欢使用压缩包解压然后配置的方式进行 地址为: Index of /download/release/ ,可按需选择自己的版本,我选择了如下版本 二、解压配置 将压缩包解压只自己想要安装的文件加下,配置环境变量,解压如下所示: …

Polar Web【中等】写shell

Polar Web【中等】写shell Contents Polar Web【中等】写shell思路&探索EXP运行&总结 思路&探索 初看题目&#xff0c;预测需要对站点写入木马&#xff0c;具体操作需要在过程中逐步实现。 打开站点(见下图)&#xff0c;出现 file_put_contents 函数&#xff0c;其…