学习笔记——RegNet:Designing Network Design Spaces

RegNet:Designing Network Design Spaces

RegNet:设计一个网络设计空间

论文地址: https://arxiv.org/pdf/2003.13678

1、前言

在这项工作中,作者提出了一种新的网络设计范例。 作者的目标是帮助增进对网络设计的理解并发现跨设置通用的设计原则。 作者不是专注于设计单个网络实例,而是设计参数化网络群体的网络设计空间。 整个过程类似于经典的手动网络设计,但提升到了设计空间级别。 使用作者的方法,作者探索网络设计的结构方面,并得到一个由简单、规则的网络组成的低维设计空间,作者称之为 RegNet。  RegNet 参数化的核心见解出人意料地简单:良好网络的宽度和深度可以通过量化的线性函数来解释。 作者还分析了 RegNet 设计空间,并得出了与当前网络设计理念不相符的有趣发现。RegNet 设计了一个可以提供简单而快速的网络空间,在各种范围内的flops都有良好的表现。 在相当的训练设置和flops(每秒浮点运算次数)下,RegNet 模型的性能优于当前流行的 EfficientNet,同时在 GPU 上速度提高了5倍。

EfficientNet笔记在这:

EfficientNetV2笔记在这:

1.1NAS的局限

虽然手动网络设计带来了巨大的进步,但手动查找优化良好的网络可能具有挑战性,尤其是在设计选择数量增加的情况下。解决这个限制的一种流行方法是神经结构搜索(NAS)。给定一个的搜索空间,该空间包含若干不同的模型,NAS 会自动在搜索空间内找到一个好的模型。最近,NAS 受到了广泛的关注并表现出了优异的结果 。尽管 NAS 很有效,但该范式也有局限性。NAS搜索的结果是在特定场景下(例如硬件平台)经过不断调优得到单个网络模型。在某些情况下这已经足够了;然而,它无法发现网络设计原则,从而加深我们的理解并让我们推广到新的场景中。特别是,我们的目标是找到易于理解、构建和推广的简单网络模型。

1.2、本文工作贡献

在这项工作中,作者提出了一种新的网络设计范式,结合了手动设计和 NAS 的优点。作者不是专注于设计单个网络实例,而是设计一个对网络群体进行参数化的设计空间。就像手动设计一样,我们的目标是可解释性,并发现描述简单、运行良好且跨设置通用的网络的通用设计原则。与 NAS 一样,我们的目标是利用半自动化程序来帮助实现这些目标。

首先从一个相对不受约束的设计空间开始,包含大量初始模型,我们称之为 AnyNet(例如,宽度和深度在不同阶段自由变化),并不断简化得到一个由简单的“常规”网络组成的设计空间,我们称之为RegNet。RegNet 设计空间的核心很简单:阶段宽度和深度由一个量化线性函数确定。与AnyNet相比,RegNet设计空间模型更简单,更容易解释,并且优秀模型的集中度更高。

此外,设计空间设计的一个重要特性是它更具可解释性,并且可以带来我们可以学习的见解。我们分析了 RegNet 设计空间,并得出了与当前网络设计实践不相符的有趣发现。例如,我们发现最佳模型的深度在计算范围(20 个块)中是稳定的,并且最佳模型没有使用瓶颈块或反向瓶颈块

2、Design Space Design 设计一个设计空间

作者的目标是设计一个优秀的视觉识别网络空间(该空间包含大量优秀的网络模型),不是在特定的设置下设计或搜索单个最佳模型,而是研究一个模型群体的行为。 我们的目标是发现可应用于并改进整个模型群体的通用设计原则,这样的设计原则可以为网络设计提供见解,并且更有可能推广到新的场景。

大致流程是从设计空间中对模型进行采样,从而产生模型分布,并利用经典统计中的工具来分析设计空间。这与神经网络架构搜索NAS不同,架构搜索的目标是从空间中找到单个最佳模型。

在这项工作中,作者设计初始的、不受约束的设计空间的逐步简化版本,并将这个过程称为 Design Space Design。设计空间设计类似于手动网络设计,但提升到设计空间级别。具体来说,在设计过程的每个步骤中,输入是初始设计空间,输出是精炼设计空间,其中每个设计步骤的目的是为了发现产生更简单或性能更好的模型群体的设计原则。通过对模型进行采样并检查其误差分布来表征设计空间的质量。 例如,在下图中,从初始设计空间 A 开始,应用两个细化步骤来产生设计空间 B,然后再通过 B 得到 C。C ⊆ B ⊆A(左图),误差分布严格从 A 改进为 B 至 C(右图)。 可以发现,随着设计空间的不断精炼,模型群体的稳健性更强,误差分布更集中。

相对于 AnyNet 设计空间,RegNet 设计空间具有以下特点:

(1) 在其维度和允许的网络配置类型方面都进行了简化,(2) 包含更集中的最佳性能模型,(3) 更集中易于分析和解释。

2.1、Tools for Design Space Design 设计空间的评估和比较

为了评估和比较设计空间,作者通过从设计空间中采样一组模型并表征所得模型误差分布来量化设计空间的质量。通过设计网络空间找到的最佳模型与使用手动或自动搜索得到的最佳模型相比,前者的鲁棒性更强且具有更丰富的信息。

为了获得模型的分布,我们从设计空间中采样并训练 n 个模型。为了提高效率,我们主要在低计算量、低迭代次数的训练体系中进行。特别是,在本节中,我们使用 4 亿次 flops (400MF) 方案,并在 ImageNet 数据集上对每个采样模型训练 10 个周期。我们注意到,虽然我们训练了许多模型,但每次训练运行速度都很快:在 400MF 下训练 100 个采样模型 10 个 epoch 的flops大致相当于在 40亿次(4GF) 下训练单个 ResNet-50 模型 100 个 epoch。

下图是使用 n = 500 个采样模型计算的 AnyNetX 设计空间的统计数据。 左图:误差经验分布函数 (EDF) 是可视化设计空间质量的基本工具。 在图例中,我们报告最小误差和平均误差(对应于曲线下的面积)。 中图:网络深度 d(块数)与误差的分布。 右图:第四阶段 (w4) 的块宽度与误差的分布。 蓝色阴影区域是包含具有 95% 置信度的最佳模型的范围(使用经验引导法获得),黑色垂直线是最可能的最佳值。

总结一下

(1) 我们生成通过从设计空间采样和训练 n 个模型获得的模型分布

(2) 我们计算并绘制误差 EDF 以总结设计空间质量

(3) 我们可视化设计空间的各种属性(网络深度、通道宽度)并使用经验引导来获得洞察力

(4) 我们使用这些洞察力来完善设计空间。

2.2、The AnyNet Design Space   AnyNet 设计空间

接下来我们介绍最初的 AnyNet 设计空间。我们的重点是探索假设标准、固定网络块(例如残余瓶颈块)的神经网络结构。在我们的术语中,网络的结构包括块数量(即网络深度)、块宽度(即通道数量)以及其他的块参数(如瓶颈比率或分组宽度)。网络的结构决定了整个网络计算图中的计算、参数和内存的分布,并且是决定其准确性和效率的关键。

AnyNet 设计空间中网络的基本设计非常简单。给定输入图像,网络由一个简单的主干stem、执行大量计算的网络主体body以及预测输出类别的头部head组成,如下图a所示。我们保持主干和头部不变并尽可能简单,专注于网络主体的结构,它是决定模型计算度和准确性的核心。

主干stem由stride=2,kernel_size=3*3,output channels=32的卷积核构成。

头部head由平均池化+全连接层构成,预测 n 个输出类。

网络主体body由 4 个阶段stage构成,每一个stage都会降低输入特征的分辨率r,如下图b。

每个阶段stage都由一系列相同的块block组成,并且只有第一个块block1使用stride=2的卷积,如下图c。

总的来说,对于每个阶段stagei,自由度包括块数量 di、块宽度 wi 和任何其他块参数。虽然总体结构很简单,但 AnyNet 设计空间中可能的网络总数却是巨大的。

我们的大多数实验使用带有组卷积的标准残差瓶颈块,如下图所示,我们将其称为 X 块,并将其上构建的 AnyNet 设计空间称为 AnyNetX 。X 块有 3 个参数:宽度 wi、瓶颈比 bi 和分组宽度 gi。虽然 X 块相当简单基础,但当网络结构优化时,它非常有效。

AnyNetX 设计空间有16个参数选择,每个网络由4个阶段组成,每个阶段i有4个参数:块数di、块宽度wi、瓶颈比bi和分组宽度gi。 除非另有说明,我们固定输入分辨率 r = 224。为了获得有效的模型,我们限制di ≤ 16、wi ≤ 1024并且能被8整除、 bi ∈ {1, 2, 4}、以及 gi ∈ {1, 2, . . . , 32},然后计算复杂度范围在360MF 到 400MF之间,进行重复对数均匀采样,获得 n = 500 个模型,并对每个模型训练 10 个 epoch。AnyNetX 的基本统计数据如2.1节图所示。

AnyNetX 设计空间中有 (16·128·3·6)4 ≈ 1018 种可能的模型配置我们不是从这 1018 个配置中寻找单个最佳模型,而是探索是否存在可以帮助我们理解和完善这个设计空间的通用设计原则。 为此,我们应用了设计空间的方法。 在这种方法的每一步中,我们的目标是:1. 简化设计空间的结构, 2. 提高设计空间的可解释性, 3. 提高或保持设计空间质量, 4. 保持设计空间中的模型多样性。

AnyNetXA。我们将初始的、不受约束的 AnyNetX 设计空间称为 AnyNetXA 。

AnyNetXB。我们首先测试 AnyNetXA 设计空间的所有阶段 stagei 的共享瓶颈比率 bi = b,并将生成的设计空间称为 AnyNetXB 。和以前一样,在相同的设置下从 AnyNetXB 空间中采样并训练 500 个模型。EDF 几乎没有变化,这表明耦合 bi 时精度没有损失。

AnyNetXC。我们的第二个细化步骤紧随第一步。从 AnyNetXB 开始,额外在所有阶段使用共享组宽度 gi = g 来获得AnyNetXC 。 与之前一样,EDF 几乎没有变化。 总体而言,AnyNetXC 比 AnyNetXA 少了 6 个自由度(原来每个阶段4个参数,4个阶段,一共16个参数;现在每个阶段2个参数,4个阶段,最后再加共享瓶颈比率b和共享组宽度 g,一共10个),并将设计空间大小减少了近四个数量级。 有趣的是,作者发现 g > 1 是最好的。

下图中,AnyNetXB(左)和 AnyNetXC(中)分别引入共享瓶颈比率 bi = b 和共享组宽度 gi = g。 这简化了设计空间,同时误差 EDF 几乎没有变化。 并且AnyNetXB和AnyNetXC更易于分析。 对 b 和 g 应用经验引导,我们会看到趋势的出现,例如,在 95% 的置信度, b ≤ 2 的状态下是最好的(右)。

AnyNetXD。 接下来,作者从 AnyNetXC 中找出表现较好的网络和表现较坏的网络结构,发现优秀网络的宽度不断增加。 于是作者添加了 wi+1 ≥ wi 的设计原则,并将具有此约束的设计空间称为 AnyNetXD 。 在下图(左)中,可以发现这样做大大提高了 EDF。

AnyNetXE。 在进一步检查其他模型后,作者观察到另一个有趣的趋势。 除了阶段宽度 wi 随 i 增加之外,对于最佳模型,阶段深度 di 同样趋向于增加,尽管不一定在最后阶段。 尽管如此,我们还是测试了下图(右)中 di+1 ≥ di 的设计空间变体 AnyNetXE,并且发现它也改善了结果。 最后,我们注意到 wi 和 di 的约束各将设计空间减少了 4!,从AnyNetXE到AnyNetXA 的累积减少量为 O(107)。

AnyNetXD = AnyNetXC + wi+1 ≥ wi          AnyNetXE = AnyNetXD + di+1 ≥ di。

2.3、The RegNet Design Space  RegNet 设计空间(难点)

首先,引入块宽度的线性参数化

该参数化具有三个参数:网络深度 d、初始宽度 w0 > 0 和斜率 wa > 0,并为每个块 j(块的索引) < d生成不同的块宽度 uj。:

其次,uj 的量化

为了将这个连续的线性函数 uj 量化为分段常数函数(即每个块的宽度是离散的),引入了一个宽度倍增因子 wm > 0。wm 决定了从一个网络块到下一个块时,宽度如何按倍数增加。如果 wm =2,那么每个后续块的宽度将是前一个块的两倍。

通过 wm  的幂次 sj 来表示每个块的宽度。这里 sj 是一个未量化的连续值,用于将连续变化的网络块宽度 uj 转换成离散的、分段常数的宽度 wj。

然后,计算 sj 并对其量化

为了得到 sj ​,需要从 uj  反解出 sj,使得 uj 可以表示为 w0 ​ 和 wm ​ 的函数。然后通过四舍五入量化 sj(用 [sj] 表示)并通过以下方式计算经过量化后的每块宽度 wj

先得到sj =logwm (uj/w0)

最后,转换为分段常数函数:

通过统计具有相同量化宽度 wj 的块的数量,可以将每个阶段的宽度 wi 和块数 di 转换为分段常数函数的形式。

每个阶段 i 的宽度 wi  由具有相同 [sj] 值的块的宽度决定,块数 di  是具有相同 [sj] 值的块的数量。并且在考虑四阶段网络时,如果参数组合会导致不同的阶段数量,那么这些参数组合将会被忽略。

通过以上过程,能够将连续变化的网络宽度简化为具有一定规则的网络结构,这有助于设计出更简单、更高效的网络模型。这种设计方法使得网络结构更容易理解和分析,同时也能够发现一些普遍适用的网络设计原则。

为了进一步测试线性参数化的效果,作者通过 6 个参数指定网络结构:网络深度d、初始宽度w0、宽度斜率wa、宽度倍率因子wm(还有 共享瓶颈比率b、共享分组宽度g),设计了一个仅包含具有这种线性结构的模型的设计空间,称为 RegNet。鉴于这些,我们通过方程生成块宽度和深度。 作者像以前一样对 d < 64、w0wa< 256、1.5 ≤ wm≤ 3 以及 b 和 g 进行采样。

RegNetX 的误差 EDF 如下图(左)所示。  RegNetX 中的模型在保持最佳模型的同时具有比 AnyNetX 更好的平均误差。 如下图(中)所示,作者还测试了两个设计空间进一步的简化。 首先,使用 wm= 2(阶段之间的宽度加倍)稍微改善了 EDF,但作者注意到使用 wm≥ 2 性能更好。 其次,进一步测试设置 w0= wa 将线性参数化简化为 uj = wa · (j+1)。 有趣的是,这表现得更好。 然而为了保持模型的多样性,我们不施加任何限制。 最后,在下图(右)中,我们发现 RegNetX 的随机搜索效率要高得多;仅搜索 32 个随机模型就可能产生良好的模型。

下表显示了设计空间的大小(对于 RegNet,我们通过量化其连续参数来估计大小)。在设计RegNetX时,我们将原始AnyNetX设计空间的维度从16维减少到6维,大小相差10个数量级。 然而,我们注意到 RegNet 仍然包含多种模型,可以针对各种设置进行调整。

AnyNetRegNet、RegNetX 和 RegNetY 的区别

AnyNet 是一个相对未受限制的设计空间,它允许网络的各个阶段在宽度(即通道数)和深度(即块数)上自由变化。

RegNet 是通过从 AnyNet 设计空间中提炼出来的,它通过引入参数化和量化的方法,将网络设计简化为一系列规则化的模型。

RegNetX 进一步提炼,是一个基于量化线性参数化的网络设计空间,它使用简单的线性函数来确定网络中每个阶段的宽度和深度。

RegNetY 是在 RegNetX 的基础上增加了 Squeeze-and-Excitation (SE) 模块的网络设计空间,按照 RegNetX 的方法确定网络的基本结构,然后在每个块的 3x3 卷积层之后添加 SE 模块。SE 模块通过全局平均池化、全连接层、ReLU激活和再次全连接操作来重新加权特征图,增强网络对重要特征的关注。

2.4、Design Space Generalization 设计空间泛化

在下图中,我们将 RegNetX 设计空间与 AnyNetXA 和 AnyNetXE 在更大的flops、更大的epochs、5 个stage的网络以及各种块类型的场景下进行比较。 在所有情况下,设计空间的性能优劣顺序都是一致的,RegNetX > AnyNetXE > AnyNetXA。 换句话说,我们没有看到过度拟合的迹象。 这些结果大有前景,因为它们表明 RegNet 可以推广到新的场景设置中。5阶段的模型结果表明RegNet的规则结构可以推广到更多阶段。

3、Comparison to Existing Networks 与现有网络的比较

我们现在将具有不同复杂度的 RegNetX 和 RegNetY 设计空间的最优模型与 ImageNet 上的最新模型进行比较。

我们使用小写字母表示各个模型,例如 REGNETX;并添加了每秒浮点计算量flops的后缀,例如 400MF(四亿次)、1.6GF(16亿次)。

3.1、State-of-the-Art Comparison: Mobile Regime 最先进的比较:移动端

最近有关网络设计的大部分工作都集中在移动端(600MF)上。 在下表中,我们将 600MF 的 REGNET 模型与现有移动网络进行了比较。 通过实验观察到,REGNETS 模型效果显著优于通过手动设计和 NAS 寻找得到的移动网络。并且REGNET 模型只使用了基本的 100 epoch 迭代次数,除了权重衰减之外没有正则化,而大多数移动网络使用更长的迭代次数并进行各种数据增强,Cutout、DropPath 、AutoAugment等等

3.2EfficientNet Comparisons:与 EfficientNet 的比较

由下图可以发现RegNet系列效果优于EfficientNet。在低浮点运算次数下,EfficientNet 的性能优于 RegNetY。 在中等浮点运算次数上,RegNetY的性能优于 EfficientNet ,在高浮点运算次数上,RegNetX RegNetY的性能都表现得更好。

3.3、Standard Baselines Comparison: ResNe(X)t:与标准基线ResNe(X)t 比较

在其他条件一致的情况下,RegNet系列效果优于ResNe(X)t。

3.4Comparisons on ImageNetV2.:在更大的ImageNetV2数据集进行比较

4、总结

这篇论文的工作量相当大,里面的图表更是数不过来。作者提出了一种新的网络设计范式,旨在推动对网络设计的理解并发现跨不同设置通用的设计原则。RegNet 设计空间提供了一种新的视角来理解和设计深度神经网络,强调了设计原则的发现和模型的普适性,其核心思想是,优秀网络的宽度和深度可以通过一个量化的线性函数来解释。并且在 ImageNetV1V2 数据集上进行了广泛的实验,验证了 RegNet 设计空间的普适性和有效性。实验结果表明,RegNet 模型在不同的计算复杂度下都能保持优秀的性能。

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

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

相关文章

网络安全:建筑公司会计软件遭受暴力攻击

黑客正在暴力破解基金会会计服务器上高权限账户的密码&#xff0c;这些账户广泛用于建筑行业&#xff0c;从而侵入企业网络。 这一恶意活动最先被 Huntress 发现&#xff0c;其研究人员于 2024 年 9 月 14 日检测到了此次攻击。 Huntress 已经发现这些攻击对管道、暖通空调、…

元学习的简单示例

代码功能 模型结构&#xff1a;SimpleModel是一个简单的两层全连接神经网络。 元学习过程&#xff1a;在maml_train函数中&#xff0c;每个任务由支持集和查询集组成。模型先在支持集上进行训练&#xff0c;然后在查询集上进行评估&#xff0c;更新元模型参数。 任务生成&…

时间安全精细化管理平台存在未授权访问漏洞

漏洞描述 登录--时间&amp;安全精细化管理平台存在未授权访问漏洞导致与员工信息泄露 FOFA&#xff1a; body"登录--时间&amp;安全精细化管理平台" 漏洞复现 POC: IP/acc/_checkinoutlog_/

Linux开发工具(git、gdb/cgdb)--详解

目录 一、Linux 开发工具分布式版本控制软件 git1、背景2、使用 git&#xff08;1&#xff09;预备工作——安装 git&#xff1a;&#xff08;2&#xff09;克隆远程仓库到本地&#xff08;3&#xff09;把需要提交的代码拷贝到本地仓库&#xff08;4&#xff09;提交本地仓库文…

基于协同过滤+SpringBoot+Vue的剧本杀服务平台系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤JavaSpringBootV…

Liveweb视频汇聚平台支持GB28181转RTMP、HLS、RTSP、FLV格式播放方案

GB28181协议凭借其在安防流媒体行业独有的大统一地位&#xff0c;目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准&#xff0c;目前基本所有厂家的安防摄像头…

【数据结构-二维差分】力扣2536. 子矩阵元素加 1

给你一个正整数 n &#xff0c;表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat &#xff0c;矩阵中填满了 0 。 另给你一个二维整数数组 query 。针对每个查询 query[i] [row1i, col1i, row2i, col2i] &#xff0c;请你执行下述操作&#xff1a; 找出 左上角 为 (row1…

Qt圆角窗口

Qt圆角窗口 问题&#xff1a;自己重写了一个窗口&#xff0c;发现用qss设置圆角了&#xff0c;但是都不生效&#xff0c;不过子窗口圆角都生效了。 无边框移动窗口 bool eventFilter(QObject *watched, QEvent *evt) {static QPoint mousePoint;static bool mousePressed f…

灵当CRM系统index.php存在SQL注入漏洞

文章目录 免责申明漏洞描述搜索语法漏洞复现nuclei修复建议 免责申明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 灵当CRM系统是一款功能全面、易于使用的客户关系管理&#xff08;C…

在Linux中运行flask项目

准备 这里我准备了一个GitHub上某个大佬写的留言板的Flask项目&#xff0c;就用这个来给大家做示范了。 查看留言板的目录结构 查看主程序所用的库函数 只有一个第三方库 Flask 安装pip sudo apt install python3-pip -y测试 pip 安装成功 修改pip镜像源 修改pip的默认下载…

表格标记<table>

一.表格标记、 1table&#xff1a;表格标记 2.caption:表单标题标记 3.tr:表格行标记 4.td:表格中数据单元格标记 5.th:标题单元格 table标记是表格中最外层标记&#xff0c;tr表示表格中的行标记&#xff0c;一对<tr>表示表格中的一行&#xff0c;在<tr>中可…

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(二)-索引

场景 首先介绍测试的场景&#xff0c;本文schema定义 pdm文档索引&#xff0c;包括nested&#xff0c;扩展字段&#xff0c;文档属性扩展&#xff0c;其中_content字段是组件保留字段&#xff0c;支持文本内容 索引 索引服务索引的操作&#xff0c;包括构建&#xff0c;put …

缓存数据和数据库数据一致性问题

根据以上的流程没有问题&#xff0c;但是当数据变更的时候&#xff0c;如何把缓存变到最新&#xff0c;使我们下面要讨论的问题 1. 更新数据库再更新缓存 场景&#xff1a;数据库更新成功&#xff0c;但缓存更新失败。 问题&#xff1a; 当缓存失效或过期时&#xff0c;读取…

C++——string的了解和使用

目录 引言 为什么要学习string 1.C语言中的字符串 2.C中的字符串 auto和范围for 1.auto 1.1 auto的介绍 1.2 注意事项 2.范围for 标准库中的string类 1.string类的迭代器 1.1 begin()与end()函数 1.2 rbegin()与rend()函数 2.string类的初始化和销毁 3.string类…

企业内网安全

企业内网安全 1.安全域2.终端安全3.网络安全网络入侵检测系统异常访问检测系统隐蔽信道检测系统 4.服务器安全基础安全配置入侵防护检测 5.重点应用安全活动目录邮件系统VPN堡垒机 6.蜜罐体系建设蜜域名蜜网站蜜端口蜜服务蜜库蜜表蜜文件全民皆兵 1.安全域 企业出于不同安全防…

【ArcGISProSDK】初识

简介 ArcGIS Pro SDK 提供四种主要的可扩展性模式&#xff1a;加载项、托管配置、插件数据源和 CoreHost 应用程序。 加载项 加载项是使用 .NET 以及 Esri 的桌面应用程序标记语言 &#xff08;DAML&#xff09; &#xff08;一种由 Esri 创建的 XML 语言&#xff09;创作的…

本地不能訪問linux的kafka服務

1.本地使用kafka客戶端工具連接kafka服務&#xff0c;提示連接失敗 2. 本地使用telnet ip port命令也失敗 3.查看zookeeper和kafka服務是否正常 ps -ef | grep zookeeper ps -ef | grep kafka 3.關閉操作系統的防火墻(僅限于測試使用) 3.1.禁用防火墙 systemctl stop firew…

【C语言零基础入门篇 - 7】:拆解函数的奥秘:定义、声明、变量,传递须知,嵌套玩转,递归惊艳

文章目录 函数函数的定义与声明局部变量和全局变量、静态变量静态变量和动态变量函数的值传递函数参数的地址传值 函数的嵌套使用函数的递归调用 函数 函数的定义与声明 函数的概念&#xff1a;函数是C语言项目的基本组成单位。实现一个功能可以封装一个函数来实现。定义函数的…

Qt 菜单栏、工具栏、状态栏、标签、铆接部件(浮动窗口) 设置窗口核心部件(文本编辑控件)的基本使用

效果 代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QToolBar> #include<QDebug> #include<QPushButton> #include<QStatusBar> #include<QLabel> #include<QDockWidget> #include<QTextEdi…