[论文精读]利用大语言模型对扩散模型进行自我修正

本博客是一篇最新论文的精读,论文为UC伯克利大学相关研究者新近(2023.11.27)在arxiv上上传的《Self-correcting LLM-controlled Diffusion Models》 。

内容提要:

  • 现有的基于扩散的文本到图像生成模型在生成与复杂提示精确对齐的图像时仍然存在困难,尤其是需要数值和空间关系的提示。
  • 作者提出了自我校正语言模型控制扩散(SLD)框架,它可以自动迭代地纠正不准确之处, 从而提高文本到图像的对齐。
  • SLD框架包含两个主要组件:语言模型驱动的对象检测和语言模型控制的评估与校正。
  • SLD pipeline首先生成一个图像,然后评估该图像与提示的对齐情况,最后基于检测结果进行自我校正。
  • SLD pipeline可以应用于专有模型生成的图像,并且不需要额外的训练。
  • 实验结果显示,SLD框架可以校正大多数不正确的生成,特别是在数值、属性绑定和空间关系方面。
  • SLD pipeline也可以用来进行图像编辑。

摘要

随着扩散模型的出现, 文本到图像生成而取得了显著进步。尽管能够生成逼真的图像,但当前的文本到图像扩散模型仍然经常难以准确解释和遵循复杂的输入文本提示。与仅以最佳努力生成图像的现有模型相反,我们引入了自我校正语言模型控制扩散(SLD)。SLD是一个框架,它从输入提示中生成一个图像,评估其与提示的对齐程度,并对生成图像中的不准确之处进行自我校正。在语言模型控制器的驱动下,SLD将文本到图像生成转化为一个迭代封闭循环的过程,确保结果图像中的正确性。SLD不仅无需训练,而且还可以与诸如DALL-E 3之类的扩散模型无缝集成,从而进一步提升最先进扩散模型的性能。实验结果表明,我们的方法可以校正大多数不正确的生成,特别是在生成数值、属性绑定和空间关系方面。此外,通过简单地调整给语言模型的指令,SLD可以执行图像编辑任务,弥合文本到图像生成和图像编辑流程之间的差距。我们将公开我们的代码供未来研究和应用。

引言

文本到图像生成随着扩散模型的出现而取得了显著进步。然而,这些模型经常难以解释复杂的输入文本提示,特别是那些需要理解数值概念、空间关系和多个对象的属性绑定等技能的提示。如图1所示,尽管模型大小和训练数据有了惊人扩展,但这些挑战仍然存在于最先进的开源和专有扩散模型中。

为了克服这些局限性,研究者开展了多项研究和工程工作。例如,DALL-E 3等方法聚焦扩散训练过程,并在大规模上将高质量的说明文字合并到训练数据中。但是,这种方法不仅会产生巨大的成本,而且经常无法从复杂的用户提示中生成准确的图像,如图1所示。其他工作利用外部模型的力量,以便在实际图像生成之前的推理过程中更好地理解提示。例如, 参考文献[6,10]利用大型语言模型(LLM)将文本提示预处理为结构化的图像布局,从而确保初步设计与用户的指令一致。然而,这样的集成并没有解决下游扩散模型产生的不准确性,特别是在具有复杂场景的图像中,如多个对象、杂乱的布局或详细的属性。
在这里插入图片描述 图1. 现有的基于扩散的文本到图像生成器(例如,DALL-E 3 [18])通常难以精确生成与复杂输入提示正确对齐的图像,特别是对于需要精确数值和空间关系的图像。 我们的自校正 LLM 控制扩散 (SLD) 框架使这些扩散模型能够通过应用一组潜在空间操作(添加、删除、重新定位等)自动迭代地纠正错误,从而增强文本到图像的对齐 。

受人类画画和扩散模型生成图像的过程的启发,我们观察到他们的创作方式有一个关键的区别。假定一个人类艺术家被要求画一幅画,里面有两只猫。在整个绘画过程中,艺术家都会注意这一要求, 一定会确保画上确实有两只猫才认为工作完成。如果艺术家发现画上只有一只猫,他会添加另一只猫以满足提示的要求。这与当前的文本到图像扩散模型形成了鲜明的对比,后者以开环方式运行。这些模型通过预定的扩散步骤生成图像,并将结果输出给用户,而不考虑其与初始用户提示的对齐情况。不管扩大训练数据还是采用LLM预生成作为条件,这样的过程都缺乏一个健壮的机制来确保最终图像与用户的预期一致。

鉴于此,我们提出了自我校正大语言模型控制扩散(SLD)方法,它执行自我检查以自信地向用户保证提示和生成图像之间的对齐。**SLD采用了一种新颖的闭环方法,使扩散模型能够迭代地识别和纠正错误,有别于传统的单轮生成方法。**我们的SLD框架,如图2所示,包含两个主要组件:语言模型驱动的对象检测以及语言模型控制的评估和校正。

在这里插入图片描述
图2. 现有的基于扩散的文本到图像生成器(例如,DALL-E 3 [18])通常难以精确生成与复杂输入提示正确对齐的图像,特别是对于需要计算能力和空间关系的图像。 我们的自校正 LLM 控制扩散 (SLD) 框架使这些扩散模型能够通过应用一组潜在空间操作(添加、删除、重新定位等)自动迭代地纠正错误,从而增强文本到图像的对齐 。

SLD pipeline遵循标准的文本到图像生成设定。给定概述所需图像的文本提示,SLD首先调用图像生成模块(例如上述的开环文本到图像扩散模型)以尽最大努力生成图像。由于这些开环生成器无法保证输出与提示完全对齐,SLD随后使用语言模型解析关键短语,由开放词汇检测器全面评估生成的图像与提示的一致性。随后,语言模型控制器以检测到的边界框和初始提示为输入,检查检测结果与提示要求之间的潜在不匹配,建议适当的自我校正操作,如添加、移动和删除对象。最后,利用基础扩散模型(例如Stable Diffusion), SLD采用潜空间组合来实现这些调整,从而确保最终图像准确反映用户的初始文本提示。

需要注意的是,我们的流程不对初始生成的来源施加限制,因此适用于通过API访问的专有模型(例如图1中的DALL-E 3)生成的图像。此外,自我校正操作都不需要对我们的基础扩散模型进行任何额外的训练,这使得我们的方法可以轻松地应用于各种扩散模型,而无需人工标注或训练的成本

我们证明了SLD框架在LMD基准测试的复杂提示上可以显着提高当前基于扩散的方法。结果显示,我们的方法可以比LMD+提高9.0%的性能,后者已经利用语言模型在图像生成过程中发挥了很强的作用。更重要的是,使用DALL-E 3进行初始生成后,我们方法生成的图像与校正前相比提高了26.5%的性能。

最后,由于SLD pipeline与最初生成的图像无关,因此它可以轻松地转换为图像编辑pipeline,方法是简单地更改给语言模型的提示。尽管生成性建模社区通常将文本到图像生成和图像编辑视为不同的任务,但我们的SLD能够通过统一的pipeline执行这两项任务。

我们的主要贡献如下:

  1. SLD是第一个集成检测器和大语言模型来自我校正生成模型的方法,确保在没有额外训练或外部数据的情况下准确生成。
  2. SLD提供了图像生成和编辑的统一解决方案,可以提高任何图像生成器(例如DALL-E 3)的文本到图像对齐度,并可以对任何图像进行对象级编辑。
  3. 实验结果表明,我们的方法可以校正大多数不正确的生成,特别是在数值、属性绑定和空间关系方面。

我们将发布我们的代码供未来研究和应用。

相关工作

2.1 文本到图像扩散模型

基于扩散的文本到图像生成有了很大进步。最初的研究表明[21–23]扩散模型能够创建高质量图像,但在复杂的提示下表现较差。后续的研究[3, 9, 20, 28– 30]采用了关键点和边界框等额外输入来控制扩散生成过程。

最近的进展[6, 10– 12, 31]是结合了大语言模型来控制扩散模型的生成,无需额外的互补信息作为输入。在这些方法中,大语言模型发挥着核心作用,直接解释用户的文本提示并管理初始的布局配置。尽管取得了一定进展,但这些模型通常以开环方式运行,在单次迭代中生成图像,无法保证生成的图像与用户提示一致。

与之前的工作不同,SLD 是第一个基于闭环扩散的生成方法。 SLD 集成了先进的目标检测器和 LLM,执行迭代自检和校正,显著增强了文本到图像的对齐。 这一改进涵盖了精准识数、多对象属性绑定以及空间推理,适用于包括 DALL-E 3在内的多种模型。

2.2 基于扩散的图像编辑

文本到图像扩散模型的最新进展极大地扩展了其在图像编辑中的应用,涵盖全局编辑和局部编辑任务。诸如Prompt-2-prompt [7]和InstructPix2Pix [2]等技术专门用于全局编辑,如风格转换。相反,SDEdit [16]、DiffEdit [4]和 Plug-and-Paly [24]等方法侧重于局部编辑,瞄准图像中的特定区域。尽管也取得了一些进展,但这些方法通常难以实现精确的对象级操作和需要空间推理的任务,如调整或重新定位对象的大小和位置。虽然最新方法如Self-Guidance [5] 提供了细粒度操作,但在移动或重新定位对象时仍需要用户输入特定坐标。

与这些只关注扩散模型的方法不同,SLD引入了检测器和语言模型的组合来进行编辑,仅需要用户提示即可实现细粒度编辑。此外,SLD在各种对象级编辑任务中表现出色,包括添加、替换、移动和修改属性、交换(swapping)等,在易用性和编辑能力方面显示出显著改进。

自我校正大语言模型控制扩散

在本节中,我们介绍我们的自我校正大语言模型控制扩散(SLD)框架。SLD由两个主要组件组成:大语言模型驱动的对象检测(3.1节)以及大语言模型控制的评估和校正(3.2节)。此外,通过简单地改变大语言模型的指令,我们展示了SLD在图像编辑应用上的适用性,将文本到图像的生成和编辑统一到一起,如3.3节所讨论的。完整的pipeline如算法1所示。
在这里插入图片描述

3.1 大语言模型驱动的对象检测

我们的SLD框架以大语言模型驱动的对象检测作为开始,提取下游评估和校正所需的信息。如图2中的绿色箭头所示,大语言模型驱动的对象检测包括两个步骤:1)我们利用大语言模型作为解析器,它解析用户提示并输出可能与图像评估相关的关键短语。2)这些短语然后被传入开放词汇对象检测器(open-vocabulary object detector)中。检测到的框应该包含支持评估图像是否与用户提示规范对齐的信息。

在初始步骤中,大语言模型解析器被指示从用户提供的文本提示 P P P中提取一系列关键对象详细信息,标记为 S S S。这个解析器在文本指令和上下文示例的帮助下可以轻松完成这项工作,如图3(a)所示。 对于包含“a green motorcycle”和“a blue motorcycle”等短语的用户提示,期望大语言模型识别并输出与“motorcycle车”相关联的“green”和“blue”作为属性。 当提示中引用没有特定数量或属性的对象时,如“a monkey”和“a raccoon”,这些描述符将保持为空。 重要的是,大语言模型的作用不仅限于识别对象名词;它还包括识别任何相关的数量或属性。
在这里插入图片描述
图3. 我们的自我校正pipeline由两个不同的 LLM 驱动:(a)LLM 解析器分析用户提示 P P P 来提取关键对象信息 S S S 的列表,然后将其传递给开放词汇检测器。 (b) LLM控制器将用户提示 P P P和当前检测到的边界框 B c u r r B_{curr} Bcurr作为输入,输出建议的新边界框 B n e x t B_{next} Bnext。 这些随后被转化为一组用于图像处理的潜在空间操作 O p s Ops Ops

在第二步中,开放词汇检测器处理第一步解析的关键对象信息列表S,以检测和定位图像中的对象。我们用格式化查询 image of a/an [attribute] [object name] 来提示开放词汇对象检测器,其中“attribute”和“object name”来自解析器的输出。 然后,得到的边界框 B c u r r B_{curr} Bcurr以列表格式[(“[attribute] [object name] [object ID]”, [x, y, w, h])]组织以进行进一步处理。 一种特殊的情况是prompt对对象数量有约束。 对于属性对象(例如“blue dog”)数量不足的情况,我们提供非属性对象(例如“dog”)的补充计数,为后续的语言模型控制器决定是添加更多“蓝狗”还是简单地将现有狗的颜色改为蓝色提供上下文信息。 我们将在3.2.1节更详细地解释这些操作,包括对象添加和属性修改。

3.2 大语言模型控制的分析和校正

我们使用大语言模型控制器进行图像分析和后续校正。 控制器在给定用户提示 P P P和检测到的框 B c u r r B_{curr} Bcurr的情况下,需要分析图像(由对象边界框表示)是否与用户提示的描述对齐,并提供一组校正后的边界框 B n e x t B_{next} Bnext,如图3(b)所示。

**SLD然后以编程方式分析校正后和原始边界框之间的不一致,输出一组编辑操作Ops,包括添加、删除、重新定位和属性修改。 **然而,简单的框集表示没有对应的信息,在多个框共享相同的对象名称时,不允许轻松地比较大语言模型控制器的输入和输出布局。 例如,当输入和输出布局中都有两只猫的boxes时,一个猫的box对应于输出布局中的哪只猫的box是不清楚的。 我们没有引入另一种算法来猜测对应关系,而是提出让大语言模型输出对应关系,方法很简单:我们给每个边界框一个对象ID,每个对象类型内的编号依次增加,作为对象名称后面的后缀添加。 在上下文示例中,我们向大语言模型展示校正前后对象应该具有相同的名称和对象ID。

3.2.1 用于图像校正的免训练潜在操作

大语言模型控制器输出一系列要应用的校正操作。对于每个操作,我们首先将原始图像转换为潜在特征。然后,我们的方法执行一系列操作Ops,如添加、删除、重新定位和属性修改,应用于这些latent layers。我们在下面解释每个操作的执行方式。

添加(Addition)。受[10]的启发,添加过程包括两个阶段:预先生成一个对象并将其潜在表示集成到原始图像的潜在空间中。最初,我们使用扩散模型在指定的边界框内创建一个对象,然后使用模型(例如SAM [8])进行精确分割。然后,该对象通过与我们的基本扩散模型的反向扩散序列进行处理,产生出与该对象对应的masked latent layers,稍后与原始画布合并。

**删除(Deletion)**操作从SAM优化边界框内对象的边界开始。然后重置与这些指定区域相关的潜在层,用高斯噪声填充。这需要在接下来的正向扩散过程中完全重新生成这些区域。

**重新定位(Repositioning)**涉及修改原始图像以将对象与新的边界框对齐,同时保持其原始宽高比。初始步骤包括移动和调整图像空间中的边界框大小。在此之后,SAM优化对象边界,然后是反向扩散过程以生成相关的latent layers,类似于添加操作中的方法。用高斯噪声替换切除部分对应的潜在层,而新添加的部分则集成到最终图像组成中。在重新定位中需要考虑的一个重要因素是在图像空间而不是潜在空间中进行对象调整大小,以维持高质量结果。

**属性修改(Attribute Modification)**从SAM优化边界框内对象的边界开始,然后应用诸如DiffEdit [4]之类的属性修改。然后,基础扩散模型reverse图像,产生一系列masked latent layers,以备最终合成。

在每个对象的编辑操作之后,我们继续进行重组阶段(recomposition phase),如图4所示。在此阶段,移除或重新定位区域的潜在值用高斯噪声重新初始化,而添加或修改的潜在值则相应更新。 对于有多个重叠对象的区域,我们首先放置较大的遮挡,以确保较小对象的可见性。
在这里插入图片描述
图4. 我们的潜在操作可以概括为两个关键概念:(1)删除区域中的潜在表示被重新初始化为高斯噪声,并且新添加或修改的对象的潜在表示被合成到画布上。 (2) Latent composition仅限于初始步骤,随后是标准前向扩散过程的“unfrozen”步骤,增强视觉质量并避免人为复制粘贴效果。

然后,修改后的latent堆栈经历最后的正向扩散过程,首先冻结未用高斯噪声重新初始化的区域(即强制与同一步骤的未修改潜在值对齐)。这对于准确形成更新的对象而同时保持背景一致性至关重要。该过程以允许所有内容发生变化的几个步骤结束,产生一个在视觉上连贯和正确的图像。

3.2.2 自我校正过程的终止

尽管我们观察到一轮生成通常足以满足我们遇到的大多数情况,但后续轮次仍可通过提高正确性进一步改善性能,使我们的自我校正成为一个迭代过程。

确定校正轮数的最佳数量对于在效率和准确性之间平衡至关重要。如算法1所概述,我们的方法设置最大尝试校正轮数,以确保整个过程在合理的时间内完成。

当大语言模型输出与输入相同的布局时(即如果大语言模型控制器建议的边界框 B n e x t B_{next} Bnext与当前检测到的边界框 B c u r r B_{curr} Bcurr对齐时),或者当达到最大生成轮数时,该过程完成,这表明该方法无法为提示生成正确的图像。 这一迭代过程根据检测器和大语言模型控制器的准确性提供图像的正确性保证,确保其与初始文本提示紧密对齐。 我们在4.3节中探讨多轮校正的效果。

3.3 统一的文本到图像生成和编辑

除了自我校正图像生成模型之外,我们的 SLD 框架也很容易适应图像编辑应用,仅需要很小的修改。一个关键区别在于用户输入提示的格式。与场景描述不同,图像编辑需要用户详细说明原始图像和所需的更改。例如,要通过将香蕉替换为橙子来编辑包含两个苹果和一个香蕉的图像,提示可以是:“Replace the banana with an orange, while keeping the two apples unchanged.”。

编辑过程类似于我们的自我校正机制。大语言模型解析器从用户的提示中提取关键对象。然后,这些对象由开放词汇检测器识别,建立当前边界框的列表。具备特定任务目标、guidelines和上下文示例的面向编辑的大语言模型控制器分析这些输入。它提出更新的边界框和相应的潜在空间操作,以实现精确的图像操作。

SLD执行细致的对象级编辑的能力将其与InstructPix2Pix [2]和prompt2prompt [7]等现有基于扩散的方法区分开来,后者主要解决全局图像样式更改。此外,SLD通过启用全面的对象重新定位、添加和删除的精确控制,优于DiffEdit [4]和SDEdit [16]等工具,后者仅限于对象替换或属性调整。我们在4.2节的比较分析将进一步突出SLD比现有方法更优越的编辑能力。

在这里插入图片描述
图5. SLD 可增强各种基于扩散的生成模型(例如 SDXL、LMD+ 和 DALL-E 3)的文本到图像对齐。值得注意的是,如第一行中的红色框突出显示的那样,SLD 精确地定位了一辆蓝色自行车与长凳和棕榈树的相对位置关系,同时保持棕榈树和海鸥的准确计数。 第二行进一步证明了 SLD 在复杂、杂乱的场景中的鲁棒性,通过我们的免训练潜在操作有效地管理对象碰撞。

实验

4.1 与图像生成方法的比较

实验设定。我们用LMD基准 [10]测试评估SLD框架的性能,LMD基准专门设计用来评估复杂任务上的生成方法,如处理否定、数值化、对多个对象的精确属性绑定和空间推理。对于每个任务,100个程序生成的提示被馈送到各种文本到图像生成方法中以产生相应的图像。我们用开放词汇检测器OWL-ViT v2 [15]对我们方法和baselines 生成的图像进行评估,以量化输入提示和生成图像之间的对齐情况,从而进行可靠的定量评估。我们将SLD与几种领先的文本到图像扩散方法进行了比较,如MultiDiffusion、BoxDiff、LayoutGPT、LMD+和DALL-E 3。为确保公平比较,所有结合LLM的模型都使用相同的GPT-4模型。 在我们的SLD实现中,我们利用LMD+作为潜在空间操作的基础模型,并使用OWL-ViT v2作为开放词汇对象检测器。

实验结果。如表1所示,将SLD方法应用于开源(LMD+)和专有模型(DALL-E 3)可以显著提高其生成正确性的性能。 对于否定任务,由于LMD+将包含“without”信息的用户提示转换为否定提示,在没有集成SLD的情况下已经达到了100%的精确度。 相比之下,尽管DALL-E 3也使用语言模型重写提示,但它仍然无法处理某些否定案例,这可能是因为语言模型仅将否定关键词(例如“without”)放入重写后的提示中。 在这种情况下,我们的SLD方法可以自动纠正其中大多数错误。 对于计数任务,将SLD与LMD+集成可以获得显著改进,达到98%的准确度。 我们注意到,DALL-E 3经常无法生成具有正确对象数量的图像。 但是,此问题通过SLD得到了实质性的缓解,其性能提高了20%以上。 对于属性绑定任务,SLD分别提高了DALL-E 3和LMD+ 6%和14%的性能。 值得注意的是,DALL-E 3最初在此任务中优于LMD+,这可能是由于其在高质量图像caption数据集上的训练。 最后,对于空间推理任务,将SLD与LMD+和DALL-E 3集成可以分别提高12%和6%的性能。

表1 - 我们的方法可以应用于各种图像生成方法,并大幅提高生成精度。
在这里插入图片描述

4.2 应用于图像编辑

如3.3节所述,与现有方法相比,SLD擅长细粒度图像编辑。 如图6所示,我们将开放语言检测器与大语言模型集成,实现了局部潜在空间区域的精确修改。 SLD熟练地执行特定编辑,如无缝地将苹果替换为南瓜,同时保持周围对象的完整性。 相比之下,InstructPix2Pix等方法局限于全局转换,DiffEdit通常无法准确定位要修改的对象,导致不良后果。
在这里插入图片描述
图6. 当被指示执行对象级图像编辑时。 InstructPix2Pix [2] 完全无法完成任务,而 DiffEdit [4] 也未能完成任务,如图中绿色框中突出显示的那样。 相反,我们的方法在执行这些对象级编辑方面表现出明显更好的性能。

此外,如图7所示,SLD支持广泛的编辑指令,包括计数控制(如添加、删除或替换对象)、属性修改(如改变颜色或材质)和复杂的位置控制(包括对象交换、调整大小和移动)。 一个突出的例子出现在第一行的“Object Resize”列中,SLD精确地按1.25倍的比例放大了桌子上的杯子。 我们鼓励读者用尺子验证这一点,以清楚地展示我们方法的精度。这种精度水平源于探测器的精确物体定位以及LLM的推理能力和新放置建议的能力。 这种对空间调整的详细控制是以前任何方法都无法比拟的,凸显了 SLD 对细粒度图像编辑的贡献。
在这里插入图片描述
图7. SLD 可以在自然、类似人类的指令的指导下处理各种图像编辑任务。 其功能涵盖从调整对象数量到更改对象属性、位置和大小。

4.3 讨论

多轮自我校正。我们在表2中的分析突出了多轮自我校正的好处,以及第一轮校正总是最有效的,并且效果边际递减。第一轮校正可显着减轻Stable Diffusion中固有的问题。然后,第二轮校正仍可在所有四项任务上取得显着改进。

表2 - 虽然大多数错误通常在第一轮中得到纠正,但多轮纠正始终优于单轮方法。
在这里插入图片描述

局限性和未来工作。我们方法的一个局限性如图8所示,其中SLD未能准确移除一个人的头发。在这种情况下,尽管成功识别和定位头发,但由于其复杂的形状,用于区域选择的SAM模块会对相邻部分进行意外分割,从而对人脸进行意外移除。 然而,由于人的衣服没有被移除,基础扩散模型无法生成自然的组合。这表明需要一个更好的区域选择方法来进一步改进生成和编辑质量。
在这里插入图片描述
图8. SLD 难以处理复杂形状的物体,因为 SAM 模块可能会在此过程中无意中分割相邻部分。

结论

我们引入了自我校正大语言模型驱动(SLD)框架,这是使用检测器和大语言模型显着提高文本到图像对齐的先进自我校正系统。此方法不仅在图像生成基准测试中达到了新的标杆性能,而且还与各种生成模型(包括DALL-E 3)兼容。而且,SLD将其用途扩展到图像编辑应用,提供了超越现有方法的细粒度对象级操作。

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

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

相关文章

ansible模块

目录 一、ansible的command模块 1.ad-hoc 2.playbook 3.command模块 二、ansible的shell模块 1.shell模块帮助 2.shell模块支持的参数和解释 3.简单试验 4.批量远程执行脚本 三、script模块 1.script模块帮助 2.shell模块支持的参数和解释 3.实践 四、ansible文件…

【pytorch】从yolo的make_grid理解torch.meshgrid、torch.stack

文章目录 简述1、torch.meshgrid 创建行列坐标2、torch.stack 结合行列坐标3、通过view函数扩展维度 简述 yolo检测 make_grid创建网格代码如下,那么什么是torch.meshgrid? def _make_grid(nx20, ny20):yv, xv torch.meshgrid([torch.arange(ny), torch.arange(…

C++基础 -28- 友元

友元用于访问类中的所有数据成员 类中的私有成员,类外不可访问 定义友元的格式(友元函数必须要在类内,声明) friend void show(person &b); 使用友元访问类的所有成员 #include "iostream"using namespace std…

深入Spring Security魔幻山谷-获取认证机制核心原理讲解(新版)

文/朱季谦 这是一个古老的传说。 在神秘的Web系统世界里,有一座名为Spring Security的山谷,它高耸入云,蔓延千里,鸟飞不过,兽攀不了。这座山谷只有一条逼仄的道路可通。然而,若要通过这条道路前往另一头的…

html实现各种好看的鼠标滑过图片特效模板

文章目录 1.鼠标悬浮效果1.1 渐动效果1.2 渐变效果1.3 边框效果1.4 线行效果1.5 图标效果1.6 块状效果1.7 边线效果1.8 放大效果1.9 渐出效果1.10 痕迹效果1.11 交叉效果1.12 着重效果1.13 详展效果1.14 能动效果1.15 明细效果 2.主要源码2.1 源代码 源码下载 作者:…

基于python的FMCW雷达工作原理仿真

这篇文章将介绍如何使用python来实现FMCW工作原理的仿真,第1章内容将介绍距离检测原理,第2章内容会介绍速度检测原理。 第1章 第1部分: 距离检测原理 调制的连续波雷达通常也被叫做调频连续波(FMCW)雷达是一个使用频率调制来测量…

鸿蒙(HarmonyOS)应用开发——容器组件(Grid组件)

前言 前面一篇文章中,已经说了List组件。那么接下来就是容器组件中的Grid组件 #mermaid-svg-oz1b7w45ASmMlZFa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oz1b7w45ASmMlZFa .error-icon{fill:#5522…

Docker-compose的在线与离线安装方式及问题解决

文章目录 一、在线方式1、GitHub2、daocloud.io 二、离线方式(推荐)三、验证 一、在线方式 1、GitHub curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/d…

springboot缓存技术-Ehcache-Redis-memcached

springboot缓存技术-Ehcache-Redis-memcached 文章目录 springboot缓存技术-Ehcache-Redis-memcachedspring缓存使用方式手机验证码案例缓存供应商变更Ehcache变更缓存供应商Redis缓存供应商变更memcached下载安装memcachedSpringBoot整合memcached spring缓存使用方式 导缓存…

linux后端基础---笔记整理(tmux、vim、shell、ssh/scp、git、thrift、docker)

目录 1.Linux常用文件管理命令 2.tmux终端复用器/vim命令式文本编辑器 3.Shell语法 3.1 Shell—版本3.2 新建一个test.sh文件3.3 Shell文件—运行方式3.4 Shell—注释3.5 Shell—变量3.6 Shell—默认变量,文件参数, “$”的用法3.7 Shell—数组3.8 shell—expr命令…

java餐饮刀削面快餐店点餐服务系统springboot+jsp

网上点餐省去了客户很多不必要的时间和麻烦,给商家带来更多利益。同时,网上点餐可以辅助餐饮企业营销。传统的点餐是需要配备一个专业的服务员负责菜品介绍并记录顾客点单,确认后上交至后台厨房,厨房根据菜品种类安排做菜顺序最终…

数据结构:带头双向循环链表的实现

引言 单链表存在缺陷:需要从头开始找前一个节点 解决方法:双向链表 链表的结构(8种): 1. 单向,双向 2. 带头、不带头 带头即为带哨兵位的头节点,第一个节点不存储有效数据。带头节点&#…

垃圾回收与内存泄漏

前端面试大全JavaScript垃圾回收与内存泄漏 🌟经典真题 🌟什么是内存泄露 🌟JavaScript 中的垃圾回收 🌟标记清除 🌟引用计数 🌟真题解答 🌟总结 🌟经典真题 请介绍一下 Jav…

混合使用Windows和Linux子系统的工具和命令

文章目录 在Windows中运行Linux命令使用PowerShell混合使用Linux和Windows命令通过power shell在Windows混合使用Linux工具在Linux中混合使用Windows 工具 推荐阅读 Windows和Linux的工具和命令可以通过WSL互换使用。 可以在Linux子系统中运行Windows命令,也可以在W…

redis主从复制模式和哨兵机制

目录 第一章、主从复制模式1.1)Redis 主从复制模式介绍1.2)Redis 主从复制实现、 第二章、哨兵机制2.1)容灾处理之哨兵2.2)Sentinel 配置 第一章、主从复制模式 1.1)Redis 主从复制模式介绍 ①单点故障:数…

【C++】string类模拟实现过程中值得注意的点

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.有关const的使用 &#x…

常用sql记录

备份一张表 PostgreSQL CREATE TABLE new_table AS SELECT * FROM old_table;-- 下面这个比上面好,这个复制表结构时,会把默认值、约束、注释都复制 CREATE TABLE new_table (LIKE old_table INCLUDING ALL) WITHOUT OIDS; INSERT INTO new_table SELE…

一进三出宿舍限电模块的改造升级

一进三出宿舍限电模块改造升级石家庄光大远通电气有限公司智能模块功能特点: 电能控制功能:可实施剩余电量管理,电量用完时将自动断电; 剩余电量可视报警提示功能:剩余电量可视,并当电量剩余5度时&#xff…

图解java.util.concurrent并发包源码系列——深入理解定时任务线程池ScheduledThreadPoolExecutor

深入理解定时任务线程池ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor作用与用法ScheduledThreadPoolExecutor内部执行流程DelayedWorkQueueScheduledFutureTask源码分析任务提交ScheduledFutureTask的属性和方法delayedExecute(t) 任务执行ScheduledFutureTask.su…

Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊

文章目录 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊使用 RenderEffect 模糊使用 Vukan 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊 本文首发地址 https://blog.csdn.net/CSqingchen/articl…