CLIPDraw:通过语言-图像编码器探索文本到绘图合成

摘要

本工作介绍了 CLIPDraw,这是一种基于自然语言输入合成新颖绘画的算法。CLIPDraw 不需要任何训练;相反,它使用了一个预先训练好的 CLIP 语言-图像编码器作为衡量标准,以最大化给定描述与生成绘画之间的相似度。关键的是,CLIPDraw 在矢量笔触上操作,而不是像素图像,这一限制使得绘画倾向于更简单的、人类可识别的形状。结果比较了 CLIPDraw 与其他通过优化方法合成的绘画,以及突出展示了 CLIPDraw 的各种有趣行为,例如以多种方式满足模糊的文本描述,可靠地产生不同艺术风格的绘画,以及随着笔触数量的增加,从简单的视觉表示扩展到复杂的视觉表示。
image.png
各种由CLIPDraw合成的绘画,以及所使用的相应描述提示。CLIPDraw通过在一组RGBA贝塞尔曲线上进行梯度下降来从文本中合成图像,目标是最小化生成图像和描述提示的CLIP编码之间的余弦距离。CLIPDraw不需要学习新的模型,并且通常可以在典型的GPU上在一分钟内合成图像。

1 引言

作为人类,当我们听到一个场景的描述时,很容易在脑海中想象出它可能的样子。相反,当我们构建一个心理图像时,很容易用语言来描述那个场景。在某种程度上,人类对文本和视觉结构都有一种深度耦合的表示,这是理解我们日常生活世界的关键。
最近CLIP(Radford等人,2021年)的引入,一种双语言-图像编码器,是统一文本和视觉信息的一大步。在CLIP模型中,文本和图像都被映射到相同的表示空间,从而可以测量图像和文本描述之间的相似性。当在大量数据上进行训练时,CLIP表示已经显示出能够解决一系列基于图像的识别任务。
本文介绍了CLIPDraw,一种基于自然语言输入合成新颖绘画的算法。CLIPDraw不需要任何训练;相反,使用预训练的CLIP模型作为度量标准,以最大化给定描述与生成的绘画之间的相似性。CLIPDraw的目标不是合成照片级的图像,而是合成简单但与提示匹配的绘画。因此,CLIPDraw优化的是一组矢量笔划,而不是像素图像,这种约束使绘画倾向于简单的人类可识别的形状。
本文的目的是介绍CLIPDraw作为一个探索语言-图像关系的测试平台,以及合成AI辅助艺术作品,同时也展示了该方法的各种细微之处。结果比较了CLIPDraw和其他基于优化的文本到图像方法,以及突出了几个有趣的行为:
• 通过调整描述性的形容词,如“水彩”或“3D渲染”,CLIPDraw可以产生风格迥异的绘画。
• CLIPDraw经常以创造性的方式匹配描述提示,例如在图像本身中写入提示中的单词,或以多种方式解释模棱两可的名词。
• 使用低笔划数运行CLIPDraw会产生卡通式的绘画,而高笔划数往往会产生逼真的渲染效果。
• 通过给CLIPDraw抽象提示,如“幸福”或“自我”,我们可以检查CLIP模型与它们相关的视觉概念。
• 通过使用否定提示,如“一幅凌乱的绘画”,可以进一步控制CLIPDraw的行为,以鼓励相反的行为。

2. 相关工作

image.png
图1:CLIPDraw通过评估时的梯度下降迭代合成图像。从一组随机的贝塞尔曲线开始,通过优化曲线的位置和颜色,使得生成的绘图最好地匹配给定的描述性提示。在被送入CLIP编码器之前,绘图会被增强成多个视角偏移的副本。
image.png
图2:一个典型的CLIPDraw运行过程,它逐渐将杂乱的曲线转化为具体的形状。在这个例子中,绘图首先发展出星形结构的背景,最终演变成一艘大型宇宙飞船。在后期迭代中,出现了更多明显的星星,以及一个类似达斯·维达的人物骑在宇宙飞船上。

文本到图像合成。这项工作极大地借鉴了文本到图像合成的领域,其主要目标是生成与给定文本描述相匹配的图像。近年来,研究重点放在了学习直接的文本到图像映射函数的方法上,通常采用条件GAN的形式(Goodfellow等人,2014a;Mirza & Osindero,2014;Reed等人,2016;Frolov等人,2021)。常用的数据库包括牛津-120花卉(Nilsback & Zisserman,2008)、CUB-200鸟类(Wah等人,2011)和COCO(Lin等人,2014),这些数据库都由自然图像及其描述组成。虽然基于GAN的方法在朝着逼真的图像合成方面取得了相当大的进展,但强大的自回归模型也取得了类似质量的结果(Oord等人,2017;Chen等人,2020),最近的DALL-E模型(Ramesh等人,2021)展示了将文本到图像合成网络扩展到大容量的好处。与需要大量训练的文本到图像生成模型相比,这项工作遵循了通过优化进行合成的框架,在这个框架中,图像通过评估时的优化来生成,以达到给定的指标。

通过优化进行合成。除了直接学习图像生成网络之外,图像合成的一种替代方法是在评估时优化到匹配的图像。这个框架通常被称为激活最大化(Erhan等人,2009;Nguyen等人,2016;Mordvintsev等人,2015),其中通过反向传播优化一个随机图像,以增加预训练网络中某些神经元的激活。激活最大化方法产生了非常逼真的图像,然而理解神经元激活的含义是一个挑战。CLIPDraw建立在一系列方法之上,这些方法不是最大化激活,而是最小化生成图像与给定描述短语之间的距离,这由强大的CLIP语言-图像编码器定义(Fernando等人,2021;Murdock,2021;Galatolo等人,2021)。通过优化进行合成的一个关键问题是,生成的图像往往超出了自然图像的范围(Nguyen等人,2015),或者通过对抗性手段欺骗系统(Goodfellow等人,2014b),因此有一系列工作旨在发现“自然图像先验”来约束可能产生的图像(Nguyen等人,2016,2017)。虽然一个典型的解决方案是将优化限制在GAN的生成空间内,但这种设置可能很昂贵,只允许合成GAN生成器能够产生的图像。因为CLIPDraw专注于合成绘图而不是逼真的图片,CLIPDraw反而将优化限制在一组矢量曲线内。这种约束产生了基于笔触的图像,它们必须捕捉更大的特征,如形状和轮廓,而不是精细的纹理。

矢量图形。这项工作在很大程度上借鉴了Li等人(2020)的工作,他们引入了矢量图形的可微分渲染器。在矢量图像上操作的图像生成方法传统上需要一个基于矢量的数据集,然而最近的工作表明,可微分渲染器可以用来绕过这个限制(Reddy等人,2021;Shen & Chen,2021)。CLIPDraw使用可微分渲染器作为生成绘图的表示;即一组RGBA贝塞尔曲线被优化,而不是像素矩阵。

3方法

CLIPDraw的目标是合成一个与给定描述提示相匹配的绘图(见前图)。具体来说,使用了一个预训练的CLIP模型作为评判标准。CLIP模型包含两个网络——一个图像编码器和一个文本编码器——它们都将各自的输入映射到共享的512长度向量的编码空间。通过两个编码之间的余弦距离来衡量相似性。因此,CLIPDraw的目标是产生一个图像,当通过CLIP编码时,与CLIP编码的给定描述提示相匹配。

在CLIPDraw中,绘图由一组可微分的RGBA贝塞尔曲线表示,遵循Li等人(2020)的方法。每条曲线由3到5个控制点参数化,以及一个厚度和一个RGBA颜色向量。绘图最初开始时,曲线随机分布在图像中,背景默认为白色。在优化过程中,曲线和控制点的数量是固定的,然而控制点的位置以及厚度和颜色向量可以通过梯度下降进行优化。

CLIPDraw算法(算法1)通过运行评估时的梯度下降来工作,如图1所示。首先,通过CLIP模型对描述短语进行编码,并初始化一组N个贝塞尔曲线。在每次迭代中,曲线通过可微分渲染器渲染到像素图像中,然后将得到的图像复制D次,并通过随机透视变换和随机裁剪-调整大小进行增强。生成的图像批次被传递到CLIP图像编码器中,并将与描述短语的余弦距离相加形成损失值。因为所有操作都是可微分的,所以可以通过整个循环运行梯度下降,优化曲线的参数以减少损失。这个过程重复I次,直到收敛。

图像增强的目的是迫使绘图在通过各种失真查看时仍然可识别。如果没有图像增强,通过优化进行合成的方法往往会产生符合数值目标但对人类不可识别的对抗性图像。这项工作特别使用了torch.transforms.RandomPerspective和torch.transforms.RandomResizedCrop函数的顺序。请注意,增强的具体细节并不是这项工作的重点,因此可能存在更健壮的增强功能,这留待未来研究。

图2展示了CLIPDraw绘图的典型渐进式合成过程。请注意,虽然优化过程在很大程度上是确定性的,但在初始曲线和图像增强中存在随机性,因此CLIPDraw的多次运行可以产生不同的绘图。
image.png
图3:通过各种合成优化方法合成的图像,目的是匹配给定的CLIP编码描述短语。CLIPDraw能够基于简单的笔画和形状产生一组多样化的、人类可识别的绘图。

4 结果

在接下来的章节中,通过各种示例突出了CLIPDraw的有趣行为。除了第4.1节外,示例图像的选择是为了最好地传达所考虑的行为。重点放在定性观察、不寻常的行为或CLIPDraw图像合成中反复出现的趋势上。

4.1 CLIPDraw与其他合成优化方法相比如何?

与直接学习生成模型的方法相比,基于优化的合成方法不需要预先训练。相反,图像通过评估时的优化循环生成,目的是最大化给定的目标。这项工作特别关注合成与描述提示的CLIP编码相匹配的图像。以下是比较的方法:

• CLIPDraw,其中绘图由一组RGBA贝塞尔曲线产生。曲线的控制点、粗细和颜色都可以调整。
• 像素优化,它优化一个224x224x3的RGB像素颜色矩阵。除了图像增强之外,所有算法方面都与CLIPDraw相同。
• BigGan优化,其中使用预训练的BigGAN生成器生成图像。生成器的权重被冻结;只有潜在向量被优化。样本是通过Murdock(2021)的方法生成的。
• CLIPDraw(无增强),它与CLIPDraw相同,只是没有对合成的绘图应用图像增强。
在图3中,各种方法都在相同的CLIP匹配目标上运行。每种方法都运行了250步的梯度下降。在CLIPDraw结果中,笔画数量为256,并且在图像增强期间使用了8个重复。CLIPDraw倾向于产生一组多样化的、基于简单笔画和形状的人类可识别绘图。另一方面,像素优化创造了有趣的纹理,但无法组合颜色和形状。BigGan优化可以合成高分辨率图像,但它受限于其生成器可以产生的图像集合,因此在分布外的提示上失败。没有图像增强的CLIPDraw产生的图像在数值上得分很高,但人类观察时却是无意义的。
image.png
图4:CLIPDraw经常通过各种创意技巧来匹配描述提示,例如在图像中形成字母,或者以多种方式解释含糊的词汇。

4.2 CLIPDraw使用了哪些视觉技巧来满足文本描述?

CLIPDraw的结果往往以多种意想不到的方式匹配它们的描述提示,如图4所示。一个典型的例子是“星夜天空的画作”这一提示。在这幅画中,主要背景是一片带有突出月亮和几颗散落星星的天空。这幅画本身以绘画风格呈现,然而画中还包含了一个实际的画布和画家。在画布内,黑色和蓝色的旋涡让人联想到梵高的1889年作品《星夜》。

CLIPDraw的另一个有趣行为是它倾向于在画作中写上文字。在“雪人自拍”中,可以在右上角看到类似“雪人”的字母。在“第三只眼”中,再次在图像中散布着类似“第三”和“眼睛”的文字。

有时,画作中包含的符号并不直接包含描述,但与之有间接关联,例如提示“自転車”(日语中的自行车)类似于带有日式字符的谷歌地图截图。

描述提示的含糊性也带来了引人入胜的结果。在“快餐”这一提示中,展示了一个麦当劳的标志和一排汉堡包。然而,还出现了两个在赛跑中的慢跑者,为“快餐”这一短语提供了另一种解释。图4中还包括了CLIP预测的与图像最接近的前几个词,表明CLIP识别出“慢跑”和“汉堡”都是与“快餐”这一合成画作相关的术语。
image.png
图5:通过调整描述性形容词,CLIPDraw可以产生风格迥异的绘图。风格不仅在图像的质感上有所不同,而且展示了不同内容的表示,例如,当提示为“画一只猫”时,会生成卡通风格的猫,而当提示为“3D线框模型”时,则会生成具有透视效果的猫。

4.3 CLIPDraw能否可靠地产生不同风格的绘图?

CLIPDraw的一个有用特性是它能够根据给出的描述性提示调整绘图的内容和风格。这种灵活性部分归功于基于曲线的图像的健壮性:与使用预训练的GAN生成器的方法相比,CLIPDraw的绘图不受自然图像空间的限制。因此,可以产生各种风格,并且这些风格可以通过文本轻松探索。

如图5所示,根据包含的描述性词汇,合成的猫图像看起来会大不相同。当要求“画一只猫”时,CLIPDraw合成了一只卡通风格的猫,主要由轮廓和简单面孔组成。而“一张真实的猫照片”则包含更详细的阴影,而“在Unreal Engine中渲染的3D猫”则展示了复杂的光照以及基于深度的模糊效果。其他风格则偏向于某些颜色,例如日本浮世绘的红色和绿色,或者水彩画的多色混合。

一个有趣的结果是,调整描述性形容词不仅改变了绘图的质感,类似于风格迁移方法(Gatys等人,2015年),而且还改变了其对底层内容的结构表示。例如,提示为“一幅画”会产生一个平面的卡通猫,而提示为“3D线框”则会产生一个具有深度和阴影的透视猫。
image.png
图6:当笔划数增加时,CLIPDraw会产生越来越逼真的绘画。显示的是提示“埃菲尔铁塔”在不同笔划数下的多次运行结果。低笔划绘画选择了一种抽象的卡通式表现方式,而高笔划绘画则捕捉到了3D深度、背景内容和复杂的阴影。

4.4 笔划数如何影响CLIPDraw产生的绘画?

CLIPDraw的一个关键参数是每个绘画中的笔划数量。当笔划数较低时,CLIPDraw往往会产生卡通或抽象的给定描述提示表示。随着笔划数的增加,绘画变得更加详细,并包含额外的特征。图6展示了不同笔划数下“埃菲尔铁塔”的结果。在16笔划的例子中,塔只被画成几条直线。32和64笔划的例子开始显示出3D结构的迹象,如正方形基座和类似三角形的脚手架。笔划数更高的图像开始在埃菲尔铁塔本身上添加更多细节,以及背景颜色和复杂光照等附加特征。

通过优化进行合成的方法的一个共同点是纯粹的优化会导致不理想的结果;还需要将优化限制在适当的图像空间中,例如GAN生成的自然图像,或者在CLIPDraw的情况下由笔划组成的任何图像。限制笔划数进一步加强了这种约束。当在16笔划图像的空间中优化时,很难实现细节或纹理,因此合成的绘画将揭示构成视觉概念的最基本形式。作为一种AI辅助艺术工具,笔划数参数提供了一种在“简单”和“复杂”之间进行调整的简便方法。这种行为可能在UI或图标设计等应用中很有用,其中简单性很重要。
image.png
图7:抽象提示揭示了CLIP如何关联视觉概念。合成的图像通常包含通过文化联系间接与描述性提示相关的符号。

4.5 如果给出抽象词汇作为描述性提示会发生什么?

当给出一个没有字面解释的抽象提示时,CLIPDraw必须利用文化联系来提出与描述相关的视觉概念。这通常会导致包含与给定提示相关的符号的绘图,例如在图7中,“幸福”包含笑脸和烟花,“翻译”展示英语和类似日语的字符,“启蒙”则以突出的僧侣形象为特征。

有时,合成的绘图通过更复杂的关联关系来展示概念。在提示“自我”中,生成的绘图展示了一个多头的身体,例如,一个人的自我可能包含多个外在的个性。当问“CLIPDraw,你看起来像什么?”时,合成的绘图包含一个笑脸,后面跟着类似“CLIPDRAW”的文字。最后,“无限之间的空间”展示了一个梦幻般的景观,天空中布满了银河,下面有一个无限符号。

CLIPDraw通过相关概念回答抽象提示的能力,为探索人类文化提供了一个潜在的工具。由于CLIP是在大量人类数据上训练的,合成绘图中出现的文化联系可以洞察人类可能做出的典型联系。作为AI辅助艺术的工具,这种能力也很有用,因为想要唤起特定情感的艺术家会使用与该情感文化相关的概念,类似于上面“幸福”绘图中的笑脸和烟花。
image.png
图8:CLIPDraw的行为可以通过负面描述提示进行调整。负面提示会阻止合成的图像与它们匹配,提供了一种微调结果的工具。

4.6:通过额外的负面提示可以微调合成的图像吗?

在AI辅助的图像合成中,一个常见的痛点是难以控制AI会生成什么。在基于CLIP的方法中,一个潜在的解决方案是引入负面提示。在这种设置中,优化目标是最小化CLIP编码的图像与描述提示之间的余弦距离,同时最大化图像与一组负面提示之间的距离。

图8展示了负面提示如何微调CLIPDraw的行为。展示的是从同一随机初始化生成的成对图像,其中底部行使用了额外的负面提示,按0.3:1的比例加权。在“Hashtag”示例中,原始图像包含许多“hashtag”这个词的实例。通过惩罚“Words and text”,底部的示例包含的单词更少,而是通常在社交媒体上看到的一组面孔。一个“torii gate”的图像最初结果是一个紫色和红色的结构,然而通过惩罚“Purple”和“Red”,图像的主色调变成了绿色。最后,原始的“a realistic painting of a sailboat”的图像特征是许多帆船在海洋上,通过惩罚短语“many sailboats”,结果是一个中心只有一个帆船的图像。

总的来说,虽然负面提示提供了一种丰富语义的方式来微调基于CLIP的方法中的图像合成,但要找到一致鼓励预期行为的提示仍然很棘手。很多时候,负面提示对最终图像的影响微乎其微。在实验中,一个普遍的负面提示如“a low-quality drawing”,旨在一致提高绘图质量,但未能找到这样的提示。关于如何通过额外的目标(无论是负面还是正面)最好地影响基于CLIP的优化合成方法,还需要进一步的工作。

5讨论

这项工作提出了CLIPDraw,一种基于CLIP语言-图像编码器的文本到绘图合成方法。CLIPDraw不需要任何模型训练;相反,图像是在评估时通过迭代优化合成的。CLIPDraw并不是第一个利用评估时优化进行图像合成的方法;实际上,许多最近的工作都使用了CLIP作为目标。然而,通过将图像合成限制在由RGBA Bézier曲线组成的图像上,CLIPDraw偏向于简单的人类可识别概念的图像。本文的重点是探讨CLIPDraw行为的细微差别,实验集中在关于合成图像的具体问题和观察上。

5.1限制

提出的CLIPDraw方法存在各种限制。首先,CLIPDraw天生偏向于绘图而不是逼真的图像。因此,合成高分辨率图像是一项挑战,CLIPDraw往往无法与结合高性能生成模型的方法相媲美。这个问题与合成优化方法中的一个经典陷阱有关,即使用的数值目标并不一定是所期望的,例如,一个图像可能非常符合CLIP目标,但对人类来说看起来杂乱无章且丑陋。因此,引入辅助目标或约束是很重要的。在CLIPDraw的情况下,图像受到Bézier曲线表示的约束,然而更严格的约束,如欺骗GAN鉴别器,可能会提高合成质量。

第二个限制与使用CLIP编码作为合成目标有关。虽然CLIP为描述图像提供了丰富的文本表示,与更粗糙的神经元激活目标相比,仍然存在挑战来指定细节。例如,很难告诉CLIPDraw将帆船移到图像的另一边。这项工作探索了负面提示作为更精细调整的可能方向,然而一致令人满意的方法难以找到。未来研究的一个有希望的方向可能在于如何正确调整合成图像,或者通过额外的目标引入描述提示中的更精细细节。

5.2伦理和社会偏见

在处理人类数据时,一个重要的概念是要记住其中包含的固有社会偏见。预训练的CLIP模型是基于大量在线数据训练的,因此其表示可能包含不希望的联系或偏见。由于CLIPDraw不是学习一个新模型,而是基于CLIP本身进行优化,CLIP论文(Radford等人,2021年)中提出的偏见研究对CLIPDraw同样适用。这项工作没有特别提出额外的社会偏见研究,然而在将CLIPDraw应用于现实世界用例时,记住这些偏见的存在是很重要的。例如,在第4.5节中,CLIPDraw的一个用例被提到作为探索人类文化中视觉联系的工具。重要的是要认识到,由CLIPDraw形成的符号或联系并不一定是人类文化的反映,而是训练原始CLIP模型所用数据的产物。因此,虽然CLIPDraw可以用来合成利用文化联系来唤起情感或抽象概念的图像,但用户有责任确保最终产品符合期望的标准。这个警告在自动化设置中尤其关键,因为AI辅助的艺术在没有人工干预的情况下可能会产生不希望的结果。

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

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

相关文章

使用XxlCrawler抓取全球航空公司ICAO三字码

目录 前言 一、数据源介绍 1、目标网站 2、页面渲染结构 二、XxlCrawler信息获取 1、创建XxlCrawler对象 2、定义PageVo对象 3、直接PageVO解析 4、自定义解析 总结 前言 长距离旅行或者出差,飞机一定是出行的必备方式。对于旅行达人或者出差人员而言&…

为什么使用AI 在游戏中不犯法

使用AI在游戏中本身并不违法,甚至在很多情况下,游戏公司自己也会在游戏中集成AI来提高游戏体验,例如通过AI驱动的非玩家角色(NPC)来增加游戏的互动性和挑战性。然而,使用AI是否违法取决于AI的使用方式和目的…

轻松掌握抖音自动点赞技巧,快速吸粉

在当今这个信息爆炸的时代,抖音作为短视频领域的领头羊,不仅汇聚了庞大的用户群体,也成为了品牌和个人展示自我、吸引粉丝的重要平台。如何在众多内容创作者中脱颖而出,实现高效引流获客,精准推广自己的内容&#xff0…

Context Pattern上下文模式

使用情景 全局使用的配置,数据库的连接。MVC中的跨层数据传输携带请求ID,用户信息等用户权限信息线程上下文 跨层数据共享 统一调用参数 携带多个事务需要处理的对象 携带用户信息 使用ThreadLocal

项目-坦克大战-让坦克动起来

为什么写这个项目 好玩涉及到java各个方面的技术 1,java面向对象 2,多线程 3,文件i/o操作 4,数据库巩固知识 java绘图坐标体系 坐标体系-介绍 坐标体系-像素 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的像素是一…

drippingblues 靶机实战

信息收集: Nmap: 存活: 靶机ip:192.168.10.110 端口: 服务: 发现ftp服务可以匿名登录。且用户名是FTP。 发现一个压缩包,下载并爆破。 得到密码 072528035。发现关键字 drip。里面还有一个 secret.zip(…

GIT基础01 基础命令与分支

前言 我们知道git是开发中比较常见的版本控制工具 我们可以先提出一个场景: 老板让你去修改方案 第一次修改 打回 第二次修改 打回 第n次修改 老板让你使用第一次的版本 阁下如何应对??? 我对每个版本进行编号?? 是一种方案 但是这里也是有缺陷的 比如说在很多版本中找…

将 Vue、React、Angular、HTML 等一键打包成 macOS 和 Windows 平台客户端应用

应用简介 PPX 基于 pywebview 和 PyInstaller 框架,构建 macOS 和 Windows 平台的客户端。本应用的视图层支持 Vue、React、Angular、HTML 中的任意一种,业务层支持 Python 脚本。考虑到某些生物计算场景数据量大,数据私密,因此将…

odoo16 银行对账单导入改造

解决问题: odoo原生功能的话 是不能在系统上临时处理文件内容的,只会提示文件内容格式不对。 原始文件格式 在头部与尾部 格式问题,例如csv文件和 C53 文件,做一个前置弹框处理数据之后再导入 camt效果: csv效果:

Ajax额

原生Ajax xml 已被json取代 http 请求方法urlhttp版本号 network 谷歌浏览器查看请求报文和响应报文 F12 network header里面有 请求头 响应头 点击view source 可以查看请求响应行 请求体在请求行头下面 get请求有url参数,请求体变为query String…

九、e2studio VS STM32CubeIDE之const修饰BSP函数的形参

目录 一、概述/目的 二、通过串口发送函数对比 2.1 stm32 hal库 VS renesas FSP 2.2 const修改函数形参的作用 2.2.1 值传递-副本 2.2.2 指针传递(就近原则) 2.2.2.1 const修饰:*P 2.2.2.2 const修饰:指针变量P 2.2.2.3 …

工业物联网解决方案:机房动环监控系统

工业物联网解决方案:机房动环监控系统 工业物联网(IIoT)作为数字化转型的关键驱动力,正深刻改变着各行各业的运作模式,其中机房动环监控系统是实现智能化运维管理的重要组成部分。该系统通过集成传感器技术、大数据分…

基于51单片机的时钟万年历—可农历显示

基于51单片机的时钟万年历 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1、可以显示年、月、日、时、分、秒、星期、农历; 2、按键可以设置闹钟及报警; 3、按键可以调整时…

Mimikatz安装 lsass进程 SAM NTML

目录 什么是Mimikatz Mimikatz在windows上安装及使用 mimkatz语法 lsass进程 SAM NTML 什么是Mimikatz Mimikatz是一款开源的Windows安全工具,由法国安全研究员Benjamin Delpy开发。它最初被设计为用于学习C语言和进行Windows安全性实验的工具。然而&#xf…

常用地图API平台对比:高德、百度、腾讯、必应、天地图

本文介绍高德、百度、腾讯、必应与天地图等5个地图开发API平台,并对其各自的优势与相对不足加以对比与主观分析。 最近,一些工作需要用到地图开发API方面的内容;在此之前,我还从来没有接触过地图开发相关API的知识与实践&#xff…

DigitalOcean 的PostgreSQL、MySQL、Redis、Kafka托管数据库,现已支持自定义指标收集功能

近期,我们的几个托管数据库(PostgreSQL、MySQL、Redis和Kafka)引入了自定义数据指标功能(scrapable metrics)。这些指标使您更具体、更细致地了解数据库的性能,包括延迟、资源利用率和错误率。然后&#xf…

SpringSecurity安全过滤器工作原理

前面通过三篇文章,从底层代码的角度分析了SpringSecurity的初始化过程。 接下来我们就要具体看一下,Spring Security的安全过滤器初始化、装配好之后,到底是怎么工作的。 还是按图索骥 下面我们简单从底层源码分析一下,请求是怎…

赋能业务全球化,明道云HAP通过亚马逊云科技 FTR认证

近日,明道云作为融合多元能力的超级应用平台,成功通过了AWS(Amazon Web Service)的FTR(Foundational Technical Review)认证。FTR是亚马逊云科技为合作伙伴解决方案提供的一项全面技术审核机制,…

Verilog代码bug:一种特殊的组合逻辑环

Verilog代码bug:一种特殊的组合逻辑环 组合逻辑环(Combinational Loop)是什么,别的文章已经写的很多了,本文就不赘述了,本文主要记录遇到过的一种特殊的逻辑环; 代码如下所示: mo…

苹果电脑卡顿反应慢怎么办 苹果电脑卡顿严重解决方法 mac电脑太卡了怎么办

作为Mac用户,你是否正在经历或者曾经遭遇过电脑卡顿、反应慢的困扰?这可能是由于多种原因导致的,包括自启动程序过多、系统与应用未及时更新、内存管理不当等。今天和你一起来探讨下,苹果电脑卡顿反应慢时怎么办。希望能够帮助你解…