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

news2024/11/18 13:54:10

本博客是一篇最新论文的精读,论文为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将其用途扩展到图像编辑应用,提供了超越现有方法的细粒度对象级操作。

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

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

相关文章

目标检测——Fast R-CNN算法解读

论文:Fast R-CNN 作者:Ross Girshick 链接:https://arxiv.org/abs/1504.08083 代码:https://github.com/rbgirshick/fast-rcnn 目录 1、算法概述2、Fast R-CNN细节2.1The RoI pooling layer2.2 Fine-tuning for detection2.3 Fast…

【Android知识笔记】架构专题(三)

如何用工程手段,提高写代码的生产力?(元编程) 即如何写同样多的代码,花费更少的时间?如何自动生成代码,哪种代码可以被自动生成?哪些环节能够作为自动生成代码的切入点? 代码自动生成技术 代码自动生成,指的并不是让计算机凭自己的意愿生成代码。而是让预先实现好…

class-dump 混淆加固、保护与优化原理

​ 进行逆向时,经常需要dump可执行文件的头文件,用以确定类信息和方法信息,为hook相关方法提供更加详细的数据.class-dump的主要用于检查存储在Mach O文件的Objective-C中的运行时信息,为类,类别和协议生成声明信息&am…

熬夜会秃头——beta冲刺Day3

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day3团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、团队成员会议总结 1、成员…

shareMouse 使用中遇到的问题

一、shareMouse 使用中遇到的问题 1、鼠标不能移动到另一个显示器 明明是两个显示器,但是 只显示一个,鼠标也不能移到另一个显示器上 后来, 设置了 wrap mouse pointer around display就好了,虽然还是显示一个显示器&#xff0c…

012 OpenCV sobel边缘检测

目录 一、环境 二、soble原理介绍 三、源码实验 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、soble原理介绍 Sobel边缘检测是一种广泛应用于图像处理领域的边缘检测算法,它通过计算图像灰度函数在水平方向和垂直…

关于加强型葡萄酒的类型有哪些?

加强型葡萄酒指的是在酿造过程中或酿造完后,添加酒精提高葡萄酒酒精度的葡萄酒,一般加强型葡萄酒的酒精度数都能达到15度以上。那么,云仓酒庄的品牌雷盛红酒分享加强型葡萄酒的类型有哪些呢? 云仓酒庄多品牌多代言运营模式&#…

光伏开发过程中如何准确的进行测绘和设计?

光伏开发过程中,测绘和设计是至关重要的环节。准确的测绘和设计能够确保光伏项目的顺利实施,提高能源转换效率,降低 成本,同时也有利于环境保护。那么,如何准确地进行测绘和设计呢? 首先,要进行…

fastmock如何判断头信息headers中的属性值

fastmock可以快速提供后端接口的ajax服务。 那么,如何判断头信息headers中的属性值呢? 可以通过function中的参数_req可以获得headers中的属性值,比如 User-Agent,由于User-Agent属性带有特殊符号,因此使用[]方式而不…

ChatGPT 问世一周年之际,开源大模型能否迎头赶上?

就在11月30日,ChatGPT 迎来了它的问世一周年,这个来自 OpenAI 的强大AI在过去一年里取得了巨大的发展,迅速吸引各个领域的用户群体。 我们首先回忆一下 OpenAI和ChatGPT这一年的大事记(表格由ChatGPT辅助生成)&#x…

前端下拉框select标签的插件——select2.js

本文采用的是select2 版本:Select2 4.0.6-rc.1。 可以兼容IE8及以上。亲测过。 官网:Getting Started | Select2 - The jQuery replacement for select boxes 一、认识select2.js 1、使用插件,首先要引入别人的插件了,你可以选择离线(无网络)或者在线引用的(如果有网…

跨越鸿沟-颠覆性产品营销指南笔记

跨越鸿沟-颠覆性产品营销指南笔记 一、发现鸿沟 一、技术采用生命周期 技术采用生命周期 如果采用一个新产品,我们就得改变一贯的行为模式,或者改变我们依赖的其他产品或服务,那么,我们对技术采用的态度就变得很重要&#xff0c…

【Cisco Packet Tracer】交换机 学习/更新/泛洪/VLAN实验

交换机的功能是连接计算机、服务器、网络打印机、网络摄像头、IP电话等终端设备,并实现与其它交换机、无线接入点、路由器、网络防火墙等网络设备的互联,从而构建局域网络,实现所有设备之间的通信。 本文使用Cisco Packet Tracer仿真软件&…

数据结构与算法之美学习笔记:29 | 堆的应用:如何快速获取到Top 10最热门的搜索关键词?

目录 前言堆的应用一:优先级队列堆的应用二:利用堆求 Top K堆的应用三:利用堆求中位数解答开篇内容小结 前言 本节课程思维导图: 搜索引擎的热门搜索排行榜功能你用过吗?搜索引擎每天会接收大量的用户搜索请求&#x…

STM32内部温度传感器使用方法详解

STM32内部温度传感器使用方法详解 前言 STM32内部集成了一个片上温度传感器,可以用来测量MCU及周围的温度。测量范围:-40~125,精度1.5℃。虽然精度不高,但在某些应用场景下是够了的,相比于外部接入传感器&#xff0c…

HarmonyOS ArkTS与c++交互通信

一、创建Native C Module 1、右键项目->new->module 如图: 2、修改build-profile.json5配置 "externalNativeOptions": {"path": "./src/main/cpp/CMakeLists.txt","arguments": "-v -DOHOS_STLc_shared&quo…

集成开发环境 PyCharm 的安装【侯小啾python领航班系列(二)】

集成开发环境PyCharm的安装【侯小啾python领航计划系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

【EMFace】《EMface: Detecting Hard Faces by Exploring Receptive Field Pyramids》

arXiv-2021 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Ablation Study5.3 Comparison with State-of-the-Arts 6 Conclusion(own) 1 Background and Motivatio…

flutter-一个可以输入的数字增减器

效果 参考文章 代码 在参考文章上边,主要是改了一下样式,逻辑也比较清楚,对左右两边添加增减方法。 我在此基础上加了_numcontroller 输入框的监听。 加了数字输入框的控制 keyboardType: TextInputType.number, //设置键盘为数字 inputF…

MySQL 基础、进阶、运维的学习笔记

1. MySQL 基础篇 1.1 MySQL 概述 1.1.1 数据库相关概念 数据库(Database, 简称 DB): 存储数据的仓库,数据是有组织的进行存储。 数据库管理系统(Database Management System, 简称 DBMS): 操作和管理数据库的大型软件。 SQL(Structured Query Language, 简称 S…