【图像分割】Segment Anything(Meta AI)论文解读

news2024/11/13 10:13:48

在这里插入图片描述

文章目录

  • 摘要
  • 一、引言
  • 二、segment anything任务
    • 1.任务
    • 2.预训练
    • 3.zero shot transfer
    • 4.相关任务
    • 5.讨论
  • 三*、Segment Anything 模型
  • 四、Segment Anything 数据引擎
  • 五、Segment Anything 数据集
  • 六、Segment Anything RAI分析
  • 七、Zero-Shot Transfer 实验
    • 1.zero shot 单点有效掩模评估
    • 2.zero shot 目标 proposal
    • 3.zero shot 文本到掩码
    • 4.zero shot Edge Detection
    • 5. Zero-Shot Instance Segmentation
  • 八、讨论
    • 1.基础模型
    • 2.组合性
    • 3.限制
  • 总结


论文地址:https://arxiv.org/abs/2304.02643

项目地址:https://github.com/facebookresearch/segment-anything

Demo 与数据集SA-1B地址:https://segment-anything.com/

Meta 发布的新模型名叫 Segment Anything Model (SAM) 。他们在博客中介绍说,「SAM 已经学会了关于物体的一般概念,并且它可以为任何图像或视频中的任何物体生成 mask,甚至包括在训练过程中没有遇到过的物体和图像类型。SAM 足够通用,可以涵盖广泛的用例,并且可以在新的图像『领域』上即开即用,无需额外的训练。」在深度学习领域,这种能力通常被称为零样本迁移,这也是 GPT-4 震惊世人的一大原因。

摘要

Segment Anything(SA)项目:一个图像分割新的任务、模型和数据集。建立了迄今为止最大的分割数据集,在11M许可和尊重隐私的图像上有超过1亿个mask。该模型的设计和训练是灵活的,因此它可以将zero-shot(零样本)转移到新的图像分布和任务。实验评估了它在许多任务上的能力,发现它的zero-shot性能令人印象深刻——通常与之前的完全监督结果竞争,甚至更好。在https://segment-anything.com上发布 Segment Anything 模型 (SAM)和1Bmask和11M图像的相应的数据集(SA-1B),以促进对计算机视觉基础模型的研究。

一、引言

在大规模网络数据集上预训练的大型语言模型,用零样本zero shot和少样本泛化[10]正在彻底改变NLP。这些“基础模型”[8]可以推广到超出训练期间看到的任务和数据分布。该功能通常是通过 提示工程(prompt engineering) 来实现的,其中手工制作的文本用来提示语言模型为当前任务生成一个有效的文本响应。当使用来自web的大量文本语料库进行缩放和训练时,这些模型的zero shot和few shot性能比得上微调模型(在某些情况下甚至匹配)。经验趋势表明,这种行为随着模型规模、数据集大小和总训练计算而改善。

基础模型也在计算机视觉中得到了探索,尽管程度较小。最突出的illustration是将网上的文本和图像对齐。例如,CLIP和ALIGN 使用对比性学习来训练文本和图像编码器来对齐这两种模式。 一旦经过训练,工程文本提示可以使zero shot泛化到新的视觉概念和数据分布。这些编码器还可以有效地与其他模块进行组合,以实现下游任务,如图像生成(如DALL·E)。但计算机视觉大大超出这个范围,且缺少丰富的训练数据。

这项工作,目标是开发一个可提示的图像分割的基础模型,在一个广泛的数据集上预训练,解决新数据分布上的一系列下游分割问题

项目关键三部分:任务、模型和数据。解决问题:

1.1 任务
在NLP和CV中,基础模型是一个很有前途的发展,它可以通过使用“提示(prompt)”技术对新的数据集和任务执行zero shot和few shot学习。受到启发,提出了提示分割任务,其目标是在给定任何分割提示下返回一个有效的分割掩码(见图1a)。提示只是指定要在图像中分割的内容,例如,提示可以包括标识对象的空间或文本信息。有效的输出面具的要求意味着即使提示是模棱两可的,可以指多个对象(例如,点衬衫可能表示衬衫或穿它的人),输出应该是一个合理的至少一个对象的mask。我们使用提示分割任务作为训练前的目标,并通过提示工程来解决一般的下游分割任务。

1.2 模型
可提示的分割任务和在真实世界使用的目标对模型架构施加了约束。特别是,模型必须支持灵活的提示,需要以平摊实时计算掩模以允许交互使用,并且必须具有模糊性。我们发现一个简单的设计满足所有三个约束条件:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级掩码解码器中来预测分割掩码。我们将此模型称为Segment Anything,或SAM(见图1b)。通过将SAM分离为一个图像编码器和一个快速提示编码器/掩码解码器,相同的图像嵌入可以用不同的提示被重用(及其成本摊销)。给定一个图像嵌入,提示编码器和掩码解码器在web浏览器中以50毫秒的提示预测掩码。我们关注点、框和掩码提示,并使用自由形式的文本提示显示初始结果。为了使SAM感知到歧义,我们将其设计为:一个提示预测多个mask,允许SAM自然地处理歧义,比如衬衫和人的例子
在这里插入图片描述

1.3 数据引擎data engine
为了实现对新数据分布的强泛化,需要在大量和不同的掩码集上训练SAM。在线获取数据缺少mask标注。我们的方案是构建一个“数据引擎”,也就是说,我们与model in the loop的数据集注释共同开发我们的模型(见图1c)。分三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM协助注释器对掩码进行注释,类似于经典的交互式分割设置。在第二阶段,SAM可以通过提示可能的对象位置来为对象子集自动生成掩码,注释器专注于对其余对象的注释,帮助增加掩码的多样性。在最后一个阶段,我们用一个规则的前景点网格提示SAM,平均每张图像产生100个高质量的掩模。

1.4 数据集
我们最终的数据集,SA-1B,包括来自11M许可和隐私保护图像的超过1B个掩码(见下图)。SA-1B,使用我们的数据引擎的最后阶段完全自动收集,mask是高质量和多样性的。
在这里插入图片描述

1.5 负责任的AI
论文报告SA-1B和SAM潜在的公平问题和偏差。SA-1B的图像跨越了地理上和经济上不同的国家,SAM在不同的人群群体中表现相似,对现实世界的用例更加公平。

1.6 实验
广泛地评估了SAM:首先,使用23个不同的分割数据集,SAM从单个前景点产生高质量的掩模,通常只略低于手动注释的Groundtruth相。在使用提示工程的zero shot传输协议下,我们发现了持续的强有力的定量和定性结果(we find consistently strong quantitative and qualitative results on a variety of downstream tasks)在一系列下游任务上,包括边缘检测,目标proposal生成,实例分割,以及对文本到掩码预测的初步探索。

二、segment anything任务

1.任务

任务:将prompt从NLP转换为分割。其中prompt可以是一组前景/背景点、一个粗糙的框或掩码、自由形式的文本(指示在图像中分割什么的任何信息),根据提示返回一个有效的分割掩码。“有效”意味着,即使提示模棱两可,可以引用多个对象(例如衬衫与人的例子),输出也至少是其中一个合理的掩码。类似于期望一个语言模型对一个模糊的提示输出一个一致的响应。该任务导向了一种自然的预训练算法和一种通过提示将zero shot 转移到下游分割任务的通用方法

2.预训练

可提示的分割任务提出了一种自然的训练前算法,为每个训练样本模拟一系列提示(例如,点、盒子、掩码),并将模型的掩码预测与GT进行比较。

我们从交互式分割中采用了这种方法,尽管不同于交互式分割(目的是在足够的用户输入后最终预测一个有效的掩码),我们的目标是预测任何提示的有效掩码,即使提示是模糊的。这确保了预先训练好的模型在涉及歧义的用例中是有效的

3.zero shot transfer

训练前任务赋予了模型在推理时对任何提示做出适当反应的能力,因此下游任务可以通过工程设计适当的提示来解决。例如,如果你有一个猫的目标检测器,实例分割可以通过提供 bounding box 输出作为我们的模型的提示来解决。一般来说,一个广泛的实际分割任务可以被转换为提示。

4.相关任务

分割是一个广泛的领域:有交互式分割[57,109]、边缘检测[3]、超级像素化[85]、对象建议生成[2]、前景分割[94]、语义分割[90]、实例分割[66]、泛光分割[59]等。我们的快速分割任务的目标是产生一个能力广泛的模型,可以通过快速工程来适应许多(虽然不是全部)现有的和新的分割任务。该能力是任务泛化的一种形式。不同于多任务系统(单个模型执行一组固定的任务,如联合语义、实例和全光分割,训练和测试任务相同),我们的可提示分割的模型,可以作为一个更大的系统中的一个组件,在推理时执行一个新的、不同的任务,例如,执行实例分割,一个可提示分割模型与现有的目标检测器相结合。

5.讨论

提示和组合是一种强大的工具,它使单个模型能够以可扩展的方式使用,并有可能完成在模型设计时未知的任务。类似于其他基础模型的使用方式,例如,CLIP如何使DALL·E图像生成系统的文本-图像对齐组件。我们预计,可组合系统设计,由提示工程等技术驱动,将比专门为一组固定任务训练的系统提供更广泛的应用

三*、Segment Anything 模型

SAM有三个组件,如图4所示:图像encoder、灵活的提示encoder和快速掩码decoder。我们建立在Vision Transformer上,对实时性能进行特定的权衡。如图
在这里插入图片描述

1. 图像编码器

基于可扩展和强大的预训练方法,我们使用MAE预训练的ViT,最小限度地适用于处理高分辨率输入。图像编码器对每张图像运行一次,在提示模型之前进行应用。

2. 提示编码器

考虑两组prompt:稀疏(点、框、文本)和密集(掩码)。我们通过位置编码来表示点和框,并将对每个提示类型的学习嵌入自由形式的文本CLIP中的现成文本编码相加。密集的提示(即掩码)使用卷积进行嵌入,并通过图像嵌入进行元素求和。

3. 掩码解码器
掩码解码器有效地将图像嵌入、提示嵌入和输出token映射到掩码。该设计的灵感来自于DETR,采用了对(带有动态掩模预测头的)Transformer decoder模块的修改。

4. 解决歧义
对于一个输出,如果给出一个模糊的提示,该模型将平均多个有效的掩码。为了解决这个问题,我们修改了模型,以预测单个提示的多个输出掩码(见下图,绿色点为输入的提示点)。我们发现3个掩模输出足以解决大多数常见的情况(嵌套掩模通常最多有三个深度:整体、部分和子部分)。在训练期间,我们只支持mask上的最小损失[匈牙利损失]。为了对掩码进行排名,该模型预测了每个掩码的置信度分数(即估计的IoU)
在这里插入图片描述

5.效率

给定一个预先计算的图像嵌入,提示编码器和掩码解码器运行在一个web浏览器中,在CPU上,运行时间为50毫秒。这种运行时性能使我们的模型能够无缝、实时地交互提示。

6. 损失和训练

模型使用DETR中的focal loss和dice loss的线性组合来监督掩模预测。我们使用混合几何提示进行训练。通过在每个掩码的11轮中随机采样提示,来模拟一个交互式设置,允许SAM无缝地集成到我们的数据引擎中。

四、Segment Anything 数据引擎

建立了一个数据引擎来支持收集1.1B掩码数据集:SA-1B。数据引擎分为三个阶段:

(1)模型辅助手动注释阶段

经典的交互式分割,一个专业注释者团队通过使用由SAM提供的基于浏览器的交互式分割工具,通过点击前景/背景对象点来标记掩码。面具可以使用像素精确的“笔刷”和“橡皮擦”工具来改进。我们的模型辅助注释直接在浏览器中实时运行(使用预先计算的图像嵌入),从而实现真正的交互体验。我们没有对标记对象施加语义约束,注释者可以自由地标记“stuff”和“thing”(要求按突出程度的顺序标记物体)

阶段开始,SAM使用常见的公共分割数据集进行训练。在进行足够的数据注释后,只使用新注释的掩码进行重新训练。随着更多的掩模被收集到,图像编码器从ViT-B缩放到ViT-H,其他框架细节不断演变;总共6次再训练。随着SAM的改进,每幅图像的平均掩模数量从20个增加到44个。总的来说,这个阶段从12万张图像中收集了430万个mask。

(2)包含自动预测掩码和模型辅助注释的半自动阶段

在这个阶段,我们的目标是增加mask的多样性,以提高我们的模型分割任何东西的能力。为了将注释器集中在不太突出的对象上,我们首先自动检测到肯定的mask。然后,**我们提供了预先填充掩码的图像的注释器,要求它注释未注释的对象。**为了检测确定的掩模,我们使用一个通用的“对象”类别,在所有的第一阶段掩模上训练了一个边界框检测器。在这一阶段,我们在18万张图像中收集了额外的5.9M掩模(总共有10.2M面具)。与第一阶段一样,我们定期对新收集的数据重新训练我们的模型(5次),每张图片的平均面具数量从44个增加到72个

(3)全自动阶段

该阶段,注释为全自动,因为两个主要的增强:首先,前两个阶段收集了足够的mask来极大地改进模型;其次,这个阶段开发了模糊感知模型,允许预测即使在模糊情况下的有效mask。具体来说,我们用一个32×32的规则点网格提示模型,并为每个点预测一组可能对应于有效对象的掩模。对于歧义感知模型,如果一个点位于一个部分或子部分上,我们的模型将返回该子部分、部件和整个对象。

我们模型的IoU预测模块用于选择自信的掩模;此外,我们只识别和选择了稳定的掩模。最后,在选择了自信和稳定的掩模后,我们应用非最大抑制(NMS)来过滤副本。为了进一步提高较小掩模的质量,我们还处理了多个重叠的放大的图像片段。我们对数据集中的所有11M幅图像应用了全自动掩模生成,总共产生了1.1B个高质量的掩模

五、Segment Anything 数据集

  1. 图像

我们从一家直接与摄影师合作的供应商那里授权了一组1100万张新图片。这些图像是高分辨率的(平均3300×4950像素),我们将发布其最短边设置为1500像素的降采样图像。明显高于许多现有的视觉数据集(COCO 的480×640像素)

  1. 掩码

我们的数据引擎产生了1.1B个掩码,其中99.1%是完全自动生成的。因此,mask的质量至关重要。我们将它们直接与专业注释进行比较,结论如下面的分析和7中的实验:
为了估计掩模的质量,我们随机抽取了500张图像(50k掩模),并要求我们的专业注释者提高这些图像中所有掩模的质量。注释器使用我们的模型和像素精确的“刷”和“橡皮擦”编辑工具。这一过程产生了成对的自动预测和专业矫正的mask。我们计算了每对之间的IoU,发现94%对的数据IoU大于90%(97%的对的IoU大于75%)。为了进行比较,之前的工作估计了85-91%的IoU [44,60]之间的一致性。我们在7的实验通过人类评级证实,掩码质量相对于各种数据集很高,并且在自动掩码上训练我们的模型几乎和使用数据引擎产生的所有掩码一样好。

下图绘制了SA-1B中目标中心与现有最大的分割数据集相比的空间分布。在所有的数据集中,都存在着常见的摄影师bias。我们观察到,与分布最相似的两个数据集LVIS v1 [44]和ADE20K [117]相比,SA-1B具有更大的图像角覆盖范围,而COCO [66]和Open Images V5 [60]具有更突出的中心偏差。

在这里插入图片描述

六、Segment Anything RAI分析

接下来,我们通过调查使用SA-1B和SAM时潜在的公平问题和偏见,对我们的工作进行了负责任的AI(RAI)分析。我们关注SA-1B的地理和收入分布,以及SAM在受保护属性中的公平性。

地理和来源
我们推断这些国家的图像是用标准方法拍摄的。在图7中,我们可视化了SA-1B中每个国家(左)和图像最多的50个国家(右)的图像计数。我们注意到,前三个国家来自世界不同的地区。SA-1B在欧洲、亚洲、大洋洲以及中等收入国家的图像中所占的比例要高得多,包括非洲在内的所有地区至少有2800万个mask,在不同地区和收入之间是相当一致的(每张图像mask为94-108张)
在这里插入图片描述
分割人群的公平性

我们通过测量组间SAM的表现差异,调查了感知的性别表现、感知的年龄组和感知的肤色之间的潜在的公平问题。我们使用了更具包容性的人群注释(MIAP)[87]数据集,用于性别表现和年龄,以及一个专有的数据集,用于肤色。SAM对那些被认为年龄较大的人表现最好(尽管置信区间很大)

七、Zero-Shot Transfer 实验

本节用SAM模型进行Zero-Shot Transfer实验:考虑了5个任务,其中4个与用于训练SAM的快速分割任务有显著不同,评估了在训练过程中没有看到的数据集和任务上的SAM模型(遵循CLIP)。数据集可能包括新的图像分布(如水下或以自我为中心的图像),并没有出现在SA-1B中。

我们的实验首先测试了可提示分割的核心目标:从任何提示中生成一个有效的掩码。我们强调单个前景点提示的具有挑战性的场景,因为它比其他更具体的提示更有可能是模棱两可。随后,我们提示SAM(1)执行边缘检测,(2)分割所有内容,即对象提议生成,(3)分段检测到的对象,即实例分割,以及(4)作为概念证明,从自由形式的文本中分割对象。这四个任务与SAM训练并通过提示工程实现的可提示分割任务有显著不同。我们的实验以消融研究结束。

(1) SAM使用一个MAE [47]预训练的ViT-H [33]图像编码器
(2) SAM是在SA-1B上训练的,数据集只包括数据引擎的最后阶段自动生成的掩码。

1.zero shot 单点有效掩模评估

任务:评估从单个前景点分割一个对象,因为一个点可以指代多个对象。大多数数据集中的标签掩码不会枚举所有可能的掩码,这可能会使自动度量不可靠。因此,我们补充了标准mIoU度量(即预测和标签掩模之间的所有IoU的平均值),在该研究中,注释者将掩码质量从1(无意义)评级到10(像素完美)。

默认情况下,我们从标签掩码的“中心”(在掩码内部距离变换的最大值)中采样点,遵循交互式分割中的标准评估协议,默认只评估模型中最确定的掩模。基线都是单掩码方法。我们主要与RITM [92]进行比较,这是一个强交互分段器。

数据集:使用一套新编译的23个具有不同图像分布的数据集,来进行mIoU评估

上图为对23个数据集的指向掩码评估。(a)SAM的平均MIOU和最强单点分段器RITM 。由于歧义,一个mask可能与GT不匹配;圆圈显示了SAM的3个预测中最相关的“神谕”结果。(b)每个数据集比较注释器从1到10(最差)(最好)的掩码质量评级。所有方法都使用GT掩模中心作为提示符。(c,d)具有不同点数的mIoU。SAM以1分显著优于之前的交互式分段器,并且得分更多。1点的低绝对mIoU是歧义的结果。

在这里插入图片描述

2.zero shot 目标 proposal

接下来,我们评估了SAM在对象提案生成的中级任务上的作用。这项任务在目标检测研究中发挥了重要的作用,作为开创性系统的中间步骤。为了生成对象建议,我们运行一个稍微修改的自动掩码生成管道的版本,并将掩码输出为提案。
我们计算了LVIS v1 上的标准平均召回率(AR)度量。我们关注LVIS,因为它的大量类别是一个具有挑战性的测试。我们与作为ViTDet 检测器(带有级联掩模R-CNN ViT-H)实现的强基线进行了比较。

结果。在表4中,我们可以毫不意外地看到,使用来自ViTDet-H的检测作为对象建议(即,游戏AR的DMP方法[16])总体上表现最好。然而,SAM在几个指标上都做得非常好。值得注意的是,它在中型和大型物体以及稀有和普通物体上都优于ViTDet-H。事实上,SAM只在小对象和频繁对象上的表现低于ViTDet-H,其中ViTDet-H可以很容易地学习LVIS特定的注释偏差,因为它是在LVIS上训练的,而不像SAM。我们还比较了消融的模糊模糊版本的SAM,它在所有AR指标上的表现都明显低于SAM。

3.zero shot 文本到掩码

最后,我们考虑一个更高层次的任务:从自由形式的文本中分割对象。这个实验证明了SAM处理文本提示的能力。虽然我们在之前的所有实验中都使用了完全相同的SAM,但对于这个实验,SAM的训练过程被修改以使其能够感知文本,但其方式不需要新的文本注释。具体来说,对于每个手动收集的面积大于1002的掩模,我们提取了CLIP图像嵌入。然后,在训练过程中,我们将提取的CLIP图像嵌入作为第一次交互,提示SAM。这里的关键观察结果是,由于CLIP的图像嵌入被训练成与文本嵌入对齐,所以我们可以使用图像嵌入进行训练,但要使用文本嵌入进行推理。也就是说,在推理时,我们通过CLIP的文本编码器运行文本,然后将生成的文本嵌入作为提示符提供给SAM

在这里插入图片描述

结果我们在上图中显示了定性的结果。SAM可以根据简单的文本提示如“轮子”以及“海狸齿格栅”等短语来分割对象。当SAM不能仅从文本提示中选择正确的对象时,一个额外的点提示可以提供帮助,类似于[PhraseClick]。

4.zero shot Edge Detection

类似不再讨论

5. Zero-Shot Instance Segmentation

类似不再讨论

八、讨论

1.基础模型

自机器学习的早期以来,预训练的模型已经适应于下游任务。近年来,随着对规模的日益重视,这种模式变得越来越重要,这种模型最近被(重新)命名为“基础模型”:即“在大规模的广泛数据上进行训练,并适应广泛的下游任务”的模型。我们的工作与这个定义很好地相关,尽管我们注意到图像分割的基础模型本质上是一个有限的范围,因为它代表了计算机视觉的一个重要的、但有分数的子集。我们还将我们的方法的一个方面与[8]进行了对比,[ On the opportunities and risks of foundation models]强调了自我监督学习在基础模型中的作用。虽然我们的模型是用自监督技术(MAE)初始化的,但它的绝大部分能力来自于大规模的监督训练。在数据引擎可以扩展可用注释的情况下,监督训练提供了一个有效的解决方案。

2.组合性

预先训练过的模型可以增强新的能力,甚至超出了人们在训练时的想象。一个突出的例子是CLIP 如何在更大的系统中作为一个组件使用,如DALL·E。我们的目标是通过要求SAM为广泛的分割提示预测一个有效的掩码来实现这一点。其效果是在SAM和其他组件之间创建一个可靠的接口。例如,MCC 可以很容易地使用SAM来分割感兴趣的对象,并实现对单个RGB-D图像的三维重建的强泛化。在另一个例子中,SAM可以通过可穿戴设备检测到的注视点而被提示,从而启用新的应用程序。由于SAM能够推广到像 ego-centric 的图像这样的新领域,这样的系统不需要额外的训练就能工作。

3.限制

虽然SAM在总体上表现得很好,但它并不完美。它可能会错过精细的结构,有时会使小的断开的组件产生幻觉,并且不会像“放大”等计算密集型的方法那样清晰地产生边界。一般来说,当提供了许多点时,我们期望专用的交互式分割方法优于SAM。与这些方法不同,SAM是为通用性和使用广度而设计的,而不是高IoU交互分割。此外,SAM可以实时处理提示,但是当使用一个很重的图像编码器时,SAM的整体性能并不是实时的。我们对文本到mask任务的尝试是探索性的,并不是完全鲁棒的,尽管我们相信它可以通过更多的努力来改进。虽然SAM可以执行许多任务,但如何设计简单的提示来实现语义和全景分割尚不清楚。最后,还有一些特定于领域的工具,比如[ilastik: interactive machine learning for (bio)image analysis.],我们希望它们在各自的领域中优于SAM。

总结

Segment Anything 项目是一个试图提升图像分割到基础模型的时代。我们的主要贡献是一个新的任务(可提示的分割)、模型(SAM)和数据集(SA-1B),使这一飞跃成为可能。SAM是否达到了基础模型的状态还有待它在社区中的使用,但无论我们期望这项工作的视角,超过1B面具的发布,以及我们快速的分割模型将有助于铺平道路。

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

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

相关文章

springboot本地local配置覆盖远程Apollo配置(含Apollo配置加载顺序说明)

手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/130302692 目录 前言 Apollo配置加载顺序 步骤 第一步:Apollo创建properties 第二步:添加namespaces&…

js的dom事件流、事件委托和阻止绑定事件触发

主要讲解事件绑定和事件委托&#xff0c;onclick事件和addEventListener的区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…

IT项目管理计算题【太原理工大学】

计算题好像也没多少考点&#xff0c;主要就是记公式吧&#xff0c;其他的不想看了&#xff0c;直接考啥看啥&#xff0c;就看两个&#xff1a; ① 根据进度网络图写出时间参数表&#xff0c;ES、EF、LS、LF、TF 以及 FF&#xff0c;关键路径&#xff0c;总工期&#xff1b;② 挣…

volatile 保证内存变量可见性的实现原理解析

目录 volatile 的定义 可见性问题 JMM&#xff08;JavaMemoryModel&#xff09; 保证可见性 现代计算机的内存模型 MESI&#xff08;缓存一致性协议&#xff09; 嗅探 总线风暴 volatile 的两条实现原则 volatile 的定义 Java代码在编译后会编程 Java …

GD(兆易创新)系列FLASH进行FPGA和ZYNQ配置固化相操作

写在前面 本文主要针对使用GD&#xff08;兆易创新&#xff09;系列的FLASH做启动配置片时&#xff0c;遇到的相关问题进行简单整理复盘&#xff0c;避免后人踩坑。 本人操作固化芯片型号为&#xff1a;ZYNQ7045、690T&#xff08;复旦微替代型号V7 690T&#xff09;。 7系列…

02-waf绕过漏洞发现之代理池指纹被动探针

WAF绕过-漏洞发现之代理池指纹被动探针 思维导图 漏洞发现触发WAF点-针对xray工具&#xff0c;awvs工具等 1.扫描速度&#xff08;绕过方法&#xff1a;代理池&#xff0c;延迟&#xff0c;爬虫白名单&#xff09;2.工具指纹&#xff08;绕过方法&#xff1a;特征指纹&#x…

Qt Quick - Container

Qt Quick - Container使用总结 一、概述二、使用容器三、管理当前索引四、容器实现 一、概述 Container 提供容器通用功能的抽象基类。Container是类容器用户界面控件的基本类型&#xff0c;允许动态插入和删除Item。DialogButtonBox, MenuBar, SwipeView, 和 TabBar 都是继承…

测试工程师为什么要关注研发效能?

研发效能中的“研发”&#xff0c;指的是广义的研发团队&#xff0c;包含开发、测试、和研发团队内部的产品经理&#xff08;不包含业务部门的产品经理&#xff09;。测试工程师身处其中&#xff0c;作为研发团队的一员&#xff0c;对于整体的效能如何提升也应该了然于胸。这篇…

【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)

0. 写在前面 常言道&#xff0c;科技论文犹如“八股文”&#xff0c;有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理&#xff0c;并不是为了提高或者润色一篇论文的表达。基本上所有的论文&#xff0c;都需要先构思好一些点子&#xff0c;有…

「计算机控制系统」5. 模拟设计法

模拟控制器的离散化 数字PID控制器 Smith预估控制 文章目录 模拟控制器的离散化数值积分法一阶后向差分法一阶前向差分法双线性变换法&#xff08;Tustin&#xff09; 零极点匹配法其他方法 数字PID控制器模拟PID控制器的离散化数字PID的改进PID控制各环节的作用PID参数的整定扩…

win11删除的文件不在回收站原因及找回文件方法

win11是微软最新推出的操作系统&#xff0c;它的外观和功能都有所升级。但是&#xff0c;在使用win11的过程中&#xff0c;有时候你会误删一些重要的文件&#xff0c;而这些文件并没有进入回收站&#xff0c;这该怎么办呢&#xff1f;win11删除的文件不在回收站怎么找回&#x…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始&#xff0c;构建RL的知识框架&#xff0c;熟悉关键名词和公式推导&#xff0c;扩展到Model-Free的Value-Based和Policy-Based方法&#xff0c;同时参考github的代码练习。接下来精读几篇经典论文&#xff0c;如DQN,PPO等。…

Node内置模块 【压缩zlib模块】

文章目录 &#x1f31f;前言&#x1f31f;zlib模块&#x1f31f;关于gzip与deflate&#x1f31f;使用zlib&#x1f31f;压缩与解压缩&#x1f31f;案例&#xff1a;压缩&#x1f31f;案例&#xff1a;解压缩 &#x1f31f;服务端gzip压缩&#x1f31f;HTTP配置&#x1f31f;HTT…

Android Binder图文详解和驱动源码分析

文章目录 前言一、跨进程通讯的过程1. AIDL客户端代码2. AIDL服务端代码3. 通信过程a. 发送请求时序图b. 接收请求时序图 二、Binder一次拷贝1. 发送给Binder驱动的数据2. 一次拷贝示意图 三、Binder驱动源码1. 相关数据结构2. 阅读Binder驱动源码 参考 前言 最近在学习Binder…

Jupyter Notebook的安装与使用

Jupyter Notebook Jupyter Notebook介绍Jupyter Notebook使用安装启动创建文件编写代码和文本常用命令配置文件 Anaconda Jupyter Notebook介绍 Jupyter Notebook是一个基于Web的交互式计算环境&#xff0c;可以让用户以文档形式记录代码、数据分析结果和说明文本&#xff0c;并…

认识ThinkPHP框架

认识ThinkPHP框架 前言一、MVC框架体系二、 ThinkPHP框架文件夹结构三. ThinkPHP下载和基本配置四. ThinkPHP其他东西 前言 ThinkPHP框架是一款非常优秀的PHP框架&#xff0c;是完全由中国人发明的框架 一、MVC框架体系 ThinkPHP框架由MVC框架体系构成&#xff0c;MVC的解释如下…

ubuntu下安装配置grpc

目录 1.准备环境 2.安装protobuf 3.安装cares库 3.安装grpc-1.17.x 1.准备环境 sudo apt-get install pkg-config sudo apt-get install autoconf automake libtool make g unzip sudo apt-get install libgflags-dev libgtest-dev sudo apt-get install clang libc-dev 如…

linux中的vim编辑器

Vim是一款强大的文本编辑器&#xff0c;可以在终端中使用。它有很多优点&#xff0c;比如快速、高效、灵活等&#xff0c;但同时也有一些难以掌握的操作。在本篇博客中&#xff0c;我们将详细介绍Vim的各种功能&#xff0c;以及如何使用它来提高的编辑效率。 1.基本模式 Vim具…

Unity之ShaderGraph入门

前言 随着Unity版本的不断升级&#xff0c;URP&#xff08;可编程渲染管线&#xff09;也越来越普及了。不管是从效果还是性能&#xff0c;都是吊打老版的build-in-shader。所以无论如何我们都要开始 拥抱URP&#xff0c;升级Unity的时候到了。 引擎版本 我这里选择了Unity …

01_Linux操作系统

第一章&#xff1a;Linux操作系统 阶段内容说明&#xff1a; Linux命令&#xff1a;软件测试第一个任务&#xff0c;一般都要进行环境搭建&#xff0c;一部分环境搭建内容是在服务器上实现的&#xff0c;跟服务器交互需要使用Linux命令&#xff08;因为服务器没有图形化界面&a…