不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!

这篇具有很好参考价值的文章主要介绍了不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Adding Conditional Control to Text-to-Image Diffusion Models

摘要

  • ControlNet,控制预训练大型扩散模型,以支持额外的输入条件。ControlNet以端到端方式学习特定任务的条件输入,即使训练数据集很小(< 50k),效果也很健壮。

  • 此外,训练ControlNet的速度与微调扩散模型一样快,而且该模型可以在个人设备上训练。或者,如果强大的计算集群可用,该模型可以扩展到大量(数百万到数十亿)的数据。

  • 论文表明,像Stable Diffusion这样的大型扩散模型可以用ControlNet来增强,以支持像边缘map、分割map、关键点等条件输入。这将丰富大型扩散模型的控制方法,并进一步促进相关应用:

  • https://github.com/lllyasviel/ControlNet

背景

  • 随大型文本到图像模型的出现,生成视觉效果生动的图像只需要用户输入一个简短的描述性提示文本(prompt)。对此,可能有几个问题:

  • 这种基于文本提示的生成,是否满足了我们的需求?

  • 在图像处理中,许多长期存在的任务都有明确的问题解决公式,这些大型模型能否应用于促进这些特定的任务?应该构建什么样的框架可以统一来处理各种各样的问题条件和用户控制?

  • 在特定的任务中,大型模型能否保持从数十亿张图像中获得的优势和能力?

  • 为回答这些问题,本文研究了各种图像处理应用,并有三个发现:

  • 首先,特定任务域的可用数据规模并不总是像一般图像-文本域那样大。许多具体任务(如对象形状、姿态理解等)的最大数据集大小往往在100k以下,即比LAION5B 小50000倍。这将需要鲁棒的神经网络训练方法,以避免过拟合,并在大模型针对特定问题进行训练时保持泛化能力。

  • 其次,大型计算集群并不总是可用的。这使得快速训练方法对于在可接受的时间和内存空间内(例如在个人设备上)优化大型模型以执行特定任务非常重要。这将进一步需要利用预先训练的权重,以及微调策略或迁移学习。

  • 第三,各种图像处理问题具有不同形式的问题定义、用户控制或图像标注。在解决这些问题时,虽然图像扩散算法可以手工做一些调整,例如,约束去噪过程、编辑多头注意力激活等,但考虑到一些特定的任务,如深度图转图像、姿势关键点到人像等,需要将原始输入解释为对象级或场景级的理解,要在许多任务中实现通用的学习解决方案,端到端学习是必不可少的。

  • 端到端神经网络ControlNet,控制大型图像扩散模型来学习特定于任务的输入条件。ControlNet将大型扩散模型的权重克隆为一个“可训练副本”和一个“锁定副本”:锁定副本保留了从数十亿张图像中学习到的网络能力,而可训练副本则在特定任务的数据集上进行训练,以学习条件控制。

  • 可训练和锁定神经网络块与一种称为“零卷积”的独特类型的卷积层连接,其中卷积权值以学习的方式从零逐步转变到优化后的参数。由于保留了权值,这样一来在不同规模的数据集上也具有鲁棒性。由于零卷积不会给深度特征添加新的噪声,因此与从头开始训练新层相比,训练速度与微调扩散模型一样快。

  • 用不同条件的各种数据集训练几个ControlNet,例如,Canny边缘、Hough线、用户涂鸦、人体关键点、分割图、深度图等。还用小数据集(样本小于50k甚至1k)和大数据集(数百万样本)对ControlNets进行了实验。表明在一些任务中,如深度到图像,在个人计算机(一台Nvidia RTX 3090TI)上训练ControlNets,与在大型计算集群上训练的商业模型具有竞争力的结果。

HyperNetwork和神经网络结构
  • HyperNetwork起源于一种语言处理方法,用于训练一个小的循环神经网络来影响一个大的神经网络的权重。HyperNetwork也被应用于生成对抗网络等图像生成任务。ControlNet和HyperNetwork在影响神经网络行为的方式上有相似之处。ControlNet使用一种特殊类型的卷积层,称为“零卷积”。早期的神经网络研究广泛讨论了网络权值的初始化问题,包括高斯分布初始化权值的合理性以及用零初始化权值可能带来的风险。在ProGAN和StyleGAN以及Noise2Noise等工作中也讨论了初始卷积权值的操作。

扩散概率模型
  • 近来,扩散概率模型取得了巨大的研究进展,例如去噪扩散概率模型(DDPM)、去噪扩散隐式模型(DDIM)和基于分数的扩散模型等。研究人员在处理高分辨率图像时往往会考虑节省计算能力的策略,或直接使用基于金字塔或多阶段的方法,常见比如使用U-net作为神经网络结构。为了降低训练扩散模型所需的计算能力,基于图像潜在特征的思想,提出了潜在扩散模型(latent diffusion model, LDM)方法,并进一步扩展到Stable Diffusion。

文本到图像扩散模型
  • 扩散模型可以应用于文本到图像生成任务,以达到最先进的图像生成效果。这通常是通过使用CLIP等预训练好的语言模型将文本输入编码为潜在向量来实现的。例如,Glide是一个文本引导的扩散模型,同时支持图像生成和编辑。Disco Diffusion是clip引导实现、用于处理文本提示。Stable Diffusion实现潜在扩散。Imagen是一个文本到图像的结构,它不使用潜在图像,而是使用金字塔结构直接扩散像素。

预训练扩散模型的控制生成
  • 最先进的图像扩散模型,是由文本到图像的方法主导的,所以增强对扩散模型控制的最直接的方法,通常是文本引导。这种类型的控制也可以通过操纵CLIP特性来实现。图像扩散过程本身可以提供一些功能来实现颜色级别的细节变化(社区称之为img2img)。图像扩散算法当然支持inpainting作为控制结果的重要方式。而文本inversion和DreamBooth方法,基于具有相同主题或目标对象的小样本图像数据集,去自定义控制生成结果中的内容。

图像转换
  • Pix2Pix提出了图像到图像转换的概念,早期的方法以条件生成神经网络为主。在Vision Transformers(ViTs)得到普及后,使用自回归方法也获得了不错的结果。目前最强大的图像到图像转换方法里,Taming Transformer属于vision transformer类,具有生成图像和执行图像到图像转换的功能。Palette是一个统一的基于扩散的图像到图像转换框架。PITI是一种基于扩散的图像到图像转换方法,它利用大规模的预训练来提高生成结果的质量。在草图引导扩散等特定领域,像论文《Sketch-guided text-to-image diffusion models》则属于基于优化的方法,用于控制扩散过程。

方法

  • ControlNet通过对神经网络模块的输入条件进行操作,从而进一步控制整个神经网络的整体行为。其中,“神经网络模块”是指将一组神经层作为一个常用单元组合在一起构建神经网络,如“resnet”块、“convn-bn-relu”块、多头注意力块、transformer模块等。

  • 以二维特征为例,给定特征x∈h×w×c,{h, w, c}为高度、宽度和通道,神经网络模块F(·;Θ)和一组参数Θ将x转换为另一个特征y:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 如果将所有参数锁定在Θ中,然后将其克隆为可训练的副本Θc。复制的Θc使用外部条件向量c进行训练。在本文中,称原始参数和新参数为“锁定副本”和“可训练副本”。制作这样的副本而不是直接训练原始权重的动机是:避免数据集较小时的过拟合,并保持从数十亿张图像中学习到的大型模型的能力。

  • 神经网络模块由一种称为“零卷积”的独特类型的卷积层连接,即1×1卷积层,权重和偏差都用零初始化。将零卷积运算表示为Z(·;·),使用参数{Θz1,Θz2}的两个实例组成ControlNet结构:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 其中yc成为该神经网络模块的输出。因为零卷积层的权值和偏差都初始化为零,所以在第一个训练步骤中,有:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 这可以转换为yc = y

  • 表明,在第一个训练步骤中,神经网络块的可训练副本和锁定副本的所有输入和输出都与它们的状态一致,就像ControlNet不存在一样。换句话说,当一个ControlNet应用于一些神经网络块时,在进行任何优化之前,它不会对深层神经特征造成任何影响。任何神经网络块的能力、功能和结果质量都得到了完美的保留,任何进一步的优化都将变得像微调一样快(与从零开始训练这些层相比)。

  • 下面简单地推导零卷积层的梯度计算。考虑权值W和偏差B的1 × 1卷积层,在任意空间位置p和通道索引i处,给定输入特征i∈h×w×c,正向通过可写成

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 零卷积有W = 0和B = 0(在优化之前),对于Ip,i非零的任何地方,梯度变为:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 可以看到,尽管零卷积可以导致特征项i的梯度变为零,但权值和偏差的梯度不受影响。在第一次梯度下降迭代中,只要特征I是非零,权重W就会被优化为非零矩阵。值得注意的是,在例子中,特征项是从数据集中采样的输入数据或条件向量,这自然地确保了I不为零。例如,考虑一个具有总体损失函数L和学习率βlr的经典梯度下降,如果“外部”梯度∂L/∂Z(I;{W, B})不为零,有:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 其中W∗是一阶梯度下降后的权值;是Hadamard乘积。在这一步之后,可得到:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 获得非零梯度,神经网络开始学习。通过这种方式,零卷积成为一种独特的连接层类型,以学习的方式逐步从零增长到优化参数。

扩散模型中的ControlNet

  • 以Stable Diffusion为例,介绍利用ControlNet对具有任务特定条件的大型扩散模型进行控制的方法。

  • Stable Diffusion是一个大型的文本到图像扩散模型,训练了数十亿张图像。该模型本质上是一个带有编码器、中间块和跳接解码器的U-net。编码器和解码器都有12个块,完整模型有25个块(包括中间块)。其中8个块是下采样或上采样卷积层,17个块是主块,每个主块包含4个resnet层和2个Vision transformer (vit)。每个Vit都包含若干交叉注意和/或自注意机制。文本采用OpenAI CLIP编码,扩散时间步长采用位置编码。

  • Stable Diffusion使用类似于VQ-GAN的预处理方法,将整个512 × 512图像数据集转换为较小的64 × 64“潜在图像”进行训练。这需要ControlNets将基于图像的条件转换为64 × 64的特征空间,以匹配卷积大小。使用一个由4个4核和2 × 2步长卷积层组成的微型网络E(·)(由ReLU激活,通道为16,32,64,128,初始化为高斯权值,与完整模型联合训练)将图像空间条件ci编码为特征映射:

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 其中cf为转换后的特征图。该网络将512 × 512的图像条件转换为64 × 64的特征图。如图所示,使用ControlNet来控制U-net的各个层。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • ControlNet的方式在计算上是高效的:由于原始权重是锁定的,因此训练不需要在原始编码器上进行梯度计算。这样可以加快训练速度,节省GPU内存,因为可以避免原来模型一半的梯度计算。

  • 使用ControlNet训练一个扩散模型只需要在每次训练迭代中增加约23%的GPU内存和34%的时间(在单个Nvidia A100 PCIE 40G上测试)。具体来说,使用ControlNet创建了Stable Diffusion的12个编码块和1个中间块的可训练副本。12个块有4种分辨率(64 × 64,32 × 32,16 × 16,8 × 8),每种3个块。输出被添加到U-net的12个跳过连接和1个中间块。SD是一个典型的U-net结构,这种ControlNet结构也可用于其他扩散模型。

训练

  • 图像扩散模型学习逐步去噪来生成样本。去噪可以发生在像素空间或从训练数据编码的“潜在”空间。Stable Diffusion算法使用潜在空间作为训练域。

  • 给定一个图像z0,扩散算法逐步向图像中添加噪声,并产生一个噪声图像zt,其中t是噪声添加的次数。当t足够大时,图像近似于纯噪声。给定一组条件,包括时间步长t,文本提示ct,以及特定任务条件cf,图像扩散算法学习一个网络θ来预测噪声加入到噪声图像zt中

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 其中L为整个扩散模型的总体学习目标。该学习目标可直接用于精细调整扩散模型。在训练过程中,随机将50%的文本提示替换为空字符串。这有助于提升ControlNet从输入条件(例如Canny边缘图或人类涂鸦等)中识别语义内容的能力。这主要是因为当prompt对于SD模型不可见时,编码器倾向于从条件输入中学习更多语义,以替代prompt。

  • 接下来讨论几种改进ControlNet训练的策略,比如计算设备非常有限(例如,在笔记本电脑上)时。

  • 小规模训练。当计算设备有限时,切断部分ControlNet和Stable Diffusion之间的连接可以加速收敛。默认情况下,将ControlNet连接到“SD中间块”和“SD解码器块1,2,3,4”,如图3所示。断开与解码器1,2,3,4的链接,只连接中间块,可以将训练速度提高约1.6倍(在RTX 3070TI笔记本GPU上测试)。当模型显示出结果与条件之间的合理关联时,可以在继续训练中将断开的环节重新连接起来,以便进行准确的控制。

  • 大规模训练。拥有强大的计算集群(至少8个Nvidia A100 80G或同等规模)和大型数据集(至少100万张训练图像对)时,和数据容易获得的任务下,例如Canny检测到的边缘映射。在这种情况下,由于过拟合的风险相对较低,可以先训练ControlNets进行足够大的迭代次数(通常超过50k步),然后解锁Stable Diffusion的所有权重,共同训练整个模型。

实验

设置中,采样器为DDIM。默认使用20个步骤,三种类型的prompt来测试模型:

(1)No prompt:使用空字符串“”作为prompt。

(2)Default prompt:由于Stable diffusion本质上是用prompt训练的,空字符串可能是模型的一个意外输入,如果没有提供prompt,SD倾向于生成随机纹理。更好的设置是使用无意义的prompt,如“一张图片”、“一张漂亮的图片”、“一张专业的图片”等。在设置中,使用“专业、详细、高质量的图像”作为默认prompt。

(3)Automatic prompt:为了测试全自动流程最好的效果,还使用自动图像caption方法(如BLIP)。使用“Default prompt”模式获得的结果生成prompt,再次使用生成的prompt进行扩散生成。

(4)User prompt:用户给出prompt。

实现

  • 提出几种基于不同图像条件输入的方式,以控制生成。

  • Canny边缘图。使用Canny边缘检测,用随机阈值从互联网上获得3M的边缘-图像-caption数据对。该模型使用Nvidia A100 80G进行600个gpu小时的训练。使用的基础模型是Stable Diffusion 1.5。此外,对上述Canny边缘数据集按图像分辨率进行排序,并采样1k、10k、50k、500k样本的子集。使用相同的实验设置来测试数据集规模的影响。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • Hough线图。使用基于深度学习的Hough变换方法对Places2数据集检测线图,并且使用BLIP生成caption。由此,得到了600k对的边缘-图像-caption。使用前面的Canny模型作为初始化checkpoint,并使用Nvidia A100 80G用150个gpu小时训练。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • HED边界检测。从互联网上获取3M的边缘-图像-caption的数据对,使用Nvidia A100 80G进行300个gpu小时训练。基础模型是Stable Diffusion 1.5。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 用户草图。结合HED边界检测和一组强数据增强(随机阈值、随机屏蔽涂鸦、随机形态变换、随机非极大抑制),从图像中合成人类涂鸦。从互联网上获得了50万对的涂鸦图像-caption数据对。使用前面的Canny模型作为初始化checkpoint,并使用Nvidia A100 80G用150个gpu小时训练。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 人体姿势(Openpifpaf)。使用基于学习的姿势估计方法来从互联网上“找到”人类,使用一个简单的规则:含有人类的图像必须有至少30%的全身关键点被检测到。获得了80k个姿势-图像-caption数据对。请注意,直接使用人体骨骼的可视化姿态图像作为训练条件。在Nvidia RTX 3090TI上使用400个gpu小时进行训练。基础模型是Stable Diffusion 1.5。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 人体姿势(Openpose)。使用基于学习的姿态估计方法在上面的Openpifpaf设置中使用相同的规则从互联网上找到人类。获得了200k个姿势-图像-caption数据对。直接使用人体骨骼的可视化姿态图像作为训练条件。使用Nvidia A100 80G进行300个gpu小时的训练,其他设置与上面的Openpifpaf相同。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 语义分割(COCO)。由BLIP对COCO-stuff数据集生成caption,获得了164K分割-图像-caption数据对。该模型在Nvidia RTX 3090TI上使用400个gpu小时进行训练。基础模型是Stable Diffusion 1.5。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 语义分割(ADE20K)。由BLIP对ADE20K数据集生成caption,获得了164K分割-图像-caption数据对。该模型在Nvidia A100 80G上使用200个gpu小时进行训练。基础模型是Stable Diffusion 1.5。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 深度(大尺度)。使用Midas从互联网上获取3M的深度-图像-caption数据对。使用Nvidia A100 80G进行500 gpu小时的训练。基础模型是Stable Diffusion 1.5。

  • 深度(小尺度)。对上述深度数据集的图像分辨率进行排序,采样200k的子集,用于训练模型所需的最小数据集大小。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!
  • 卡通线图提取方法。从网络上的卡通插图中提取线描。通过对受欢迎程度的卡通图像进行排序,得到了前1M的素描-卡通-caption数据对,使用Nvidia A100 80G进行300个gpu小时的训练。基础模型是Waifu Diffusion。

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!

猜您喜欢:

深入浅出stable diffusion:AI作画技术背后的潜在扩散模型论文解读

不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法! 戳我,查看GAN的系列专辑~!

一顿午饭外卖,成为CV视觉的前沿弄潮儿!

最新最全100篇汇总!生成扩散模型Diffusion Models

ECCV2022 | 生成对抗网络GAN部分论文汇总

CVPR 2022 | 25+方向、最新50篇GAN论文

 ICCV 2021 | 35个主题GAN论文汇总

超110篇!CVPR 2021最全GAN论文梳理

超100篇!CVPR 2020最全GAN论文梳理

拆解组新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多样性图像生成

附下载 | 《可解释的机器学习》中文版

附下载 |《TensorFlow 2.0 深度学习算法实战》

附下载 |《计算机视觉中的数学方法》分享

《基于深度学习的表面缺陷检测方法综述》

《零样本图像分类综述: 十年进展》

《基于深度神经网络的少样本学习综述》

《礼记·学记》有云:独学而无友,则孤陋而寡闻

欢迎加入 GAN/扩散模型 —交流微信群 !

扫描下面二维码,添加运营小妹好友,拉你进群。发送申请时,请备注,格式为:研究方向+地区+学校/公司+姓名。如 扩散模型+北京+北航+吴彦祖

请备注格式:研究方向+地区+学校/公司+姓名

点击 一顿午饭外卖,成为CV视觉的前沿弄潮儿!,领取优惠券,加入 AI生成创作与计算机视觉 知识星球!文章来源地址https://www.toymoban.com/news/detail-431626.html

到了这里,关于不得不读 | 深入浅出ControlNet,一种可控生成的AIGC绘画生成算法!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 程序员不得不了解的计算机进制转换

    最近在备考软考的软件设计师考试,学到了关于计算机的数据表示,由于我是半路出家学的Java,导致计算机基础知识很差,在这里记录一下学习感受 早期计算机的存储介质是晶体管,晶体管根据电压不同,只能表示2种状态,也就是0和1 计算机使用二进制运算更加方便 更详细

    2024年02月05日
    浏览(40)
  • AI绘画想生成好看的图,这些技巧不得不掌握

    现在,很多的人用AI绘画进行创作,但作出来的画却千差万别,有的好看,有的牵强,找不到那种惊艳的感觉。#AI绘画# 究竟如何才能让ai创作出好看的画面呢,不但逼真,还能一眼惊叹? 当然是有技巧,这些技巧如果你掌握了,我相信你一样能生产出惊艳的画作。 图源:数

    2024年02月09日
    浏览(42)
  • 或许有一天,你不得不硬着头皮去优化FPGA

        上篇(为啥FPGA资源/时序都有很大的优化空间?)提到过:因为大家一直都没去怎么优化FPGA,然后就导致FPGA可以优化的空间很大。工作中会有一批人知道可以优化但很少去承担优化的工作,也有一批人不知道能怎么优化,还有一批人开始要硬着头皮开始优化FPGA了,那这

    2024年04月23日
    浏览(40)
  • Java后端程序员不得不知道的 API 接口常识

    至今我仍清晰地记得,那个电商教程是怎么定义接口的: 管它是增加、修改、删除、带参查询,全是 POST 请求一把梭,比如下面这样: 修改用户的收货地址 POST /xxx-mall/cart/update_address 现在看来,全部用 POST 请求估计是为了传参方便吧。 那个时候自己也没有一个  API 接口需

    2024年02月15日
    浏览(67)
  • 不得不承认,我们都太低估鸿蒙了 !_harmony next 展示

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料

    2024年04月25日
    浏览(43)
  • 【Github】作为程序员不得不知道的几款Github加速神器

    众所周知,近几年国内用户在访问 Github 时,经常间歇性无法访问 Github 。 接下来推荐几款 作为程序员不得不知道的 Github加速神器 。 FastGithub 是一款 Github 加速神器,解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问题。 它支持多

    2024年02月12日
    浏览(50)
  • 超详细,AI绘画里你不得不知道的SD算法详解

    前言 哈喽,各位小伙伴们大家好,说到AI绘画,可谓是近几年来异军突起,犹如洪水猛兽一般,各种的本土化,商业化。但是相信也有很多朋友跟我一样,对AI绘画的原理一知半解,甚至根本不知道它是怎么工作的。这样只靠着在网上复制粘贴别人的prompt,是没有点好处的,

    2024年02月11日
    浏览(89)
  • C语言实现单链表(超多配图,这下不得不学会单链表了)

    目录 一:什么是链表? 二:创建源文件和头文件 (1)头文件 (2)源文件 三:实参和形参 四:一步步实现单向链表 (1)建立一个头指针并置空 (2)打印链表,便于观察测试 (3)创建一个新的结点 (4)尾部插入数据 (5)头部插入 (6)尾部删除 (7)头部删除 (8)查找 (

    2024年01月24日
    浏览(50)
  • 最流行的AI绘图工具Midjourney,你不得不知道的使用技巧

    ​关注文章下方公众号,可免费获取AIGC最新学习资料   本文字数:1500,阅读时长大约:10分钟 Midjourney成为了最受欢迎的生成式AI工具之一。它的使用很简单。输入一些文本,Midjourney背后的大脑(或计算机)将自动为您绘制生动的图像。但与DALL-E等其他AI图像生成器不同,您

    2024年02月09日
    浏览(40)
  • 进阶高级Python开发工程师,不得不掌握的Python高并发编程

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+         Python成为时下技术革新的弄潮儿,全民Python的发展趋势让人们不再满足于简单地

    2024年02月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包