从零开始的stable diffusion

这篇具有很好参考价值的文章主要介绍了从零开始的stable diffusion。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从零开始的stable diffusion,stable diffusion,人工智能

stable diffusion真的是横空出世,开启了AIGC的元年。不知你是否有和我一样的困惑,这AI工具好像并不是那么听话?

从零开始的stable diffusion,stable diffusion,人工智能

前言

我们该如何才能用好stable diffusion这个工具呢?AI究竟在stable diffusion中承担了什么样的角色?如何能尽可能快、成本低地得到我们期望的结果?

源于这一系列的疑问,我开始了漫长的论文解读。High-Resolution Image Synthesis with Latent Diffusion Models(地址:https://arxiv.org/abs/2112.10752?spm=ata.21736010.0.0.7d0b28addsl7xQ&file=2112.10752)

当然这论文看的云里雾里的,加篇读了How does Stable Diffusion work?(地址:https://stable-diffusion-art.com/how-stable-diffusion-work/?spm=ata.21736010.0.0.7d0b28addsl7xQ)

先简要概括下,stable diffusion的努力基本是为了2个目的:

  1. 低成本、高效验证。设计了Latent Space

  2. Conditioning Mechanisms。条件控制,如果不能输出我们想要的图片,那这就像Monkey Coding。耗费无限的时间与资源。

这是整个内容里最重要最核心的两个部分。

从零开始的stable diffusion,stable diffusion,人工智能

图片生成的几种方式

随着深度神经网络的发展,生成模型已经有了巨大的发展,主流的有以下几种:

  1. 自回归模型(AutoRegressive model):按照像素点生成图像,导致计算成本高。实验效果还不错

  2. 变分自编码器(Variational Autoencoder):Image to Latent, Latent to Image,VAE存在生成图像模糊或者细节问题

  3. 基于流的方法(Glow)

  4. 生成对抗网络(Generative adversarial network):利用生成器(G)与判别器(D)进行博弈,不断让生成的图像与真实的图像在分布上越来越接近。

其中AR与GAN的生成都是在pixel space进行模型训练与推理。

  模型是如何生成图片的?

以一只猫作为案例。当我们想画一只猫的时候,也都是从一个白板开始,框架、细节不断完善。

对于AI来说,一个纯是noise的image就是一个理想的白板,类似下图展示的这样。

从零开始的stable diffusion,stable diffusion,人工智能

从图中的流程,我们可以看到推理的过程如下:

  1. 生成一个随机的noise image图片。这个noise取决于Random这个参数。相同的Random生成的noise image是相同的。

  2. 使用noise predictor预测这个图里加了多少noise,生成一个predicted noise。

  3. 使用原始的noise减去predicted noise。

  4. 不断循环2、3,直到我们的执行steps。

最终我们会得到一只猫。

在这个过程中,我们会以下疑问:

  1. 如何得到一个noise predictor?

  2. 怎么控制我们最终能得到一只猫?而不是一只狗或者其他的东西?

在回答这些疑问之前,我先贴一部分公式:

我们定义一个noise predictor:从零开始的stable diffusion,stable diffusion,人工智能从零开始的stable diffusion,stable diffusion,人工智能是第 t 个step过程中的noise image,t 表示第t个stop。

  如何得到一个noise predictor?

这是一个训练的过程。过程如下图所示:

从零开始的stable diffusion,stable diffusion,人工智能

  1. 选择一张训练用的图片,比如说一张猫

  2. 生成一个随机的noise图片

  3. 将noise图叠加到训练用的图片上,得到一张有一些noise的图片。(这里可以叠加1~T步noise

  4. 训练noise predictor,告诉我们加了多少noise。通过正确的noise答案来调整模型权重。

最终我们能得到一个相对准确的noise-predictor。这是一个U-Net model。在stable-diffusion-model中。

通过这一步,我们最终能得到一个noise encoder与noise decoder。

PS: noise encoder在image2image中会应用到。

以上noise与noise-predictor的过程均在pixel space,那么就会存在巨大的性能问题。比如说一张1024x1024x3的RBG图片对应3,145,728个数字,需要极大的计算资源。在这里stable diffusion定义了一个Latent Space,来解决这个问题。

  Latent Space

Latent Space的提出基于一个理论:Manifold_hypothesis

它假设现实世界中,许多高维数据集实际上位于该高维空间内的低维Latent manifolds。像Pixel Space,就存在很多的难以感知的高频细节,而这些都是在Latent Space中需要压缩掉的信息。

那么基于这个假设,我们先定义一个在RGB域的图片从零开始的stable diffusion,stable diffusion,人工智能

然后存在一个方法z=varepsilon(x),从零开始的stable diffusion,stable diffusion,人工智能,z是x在latent space的一种表达。

这里有一个因子f=H/h=W/w,通常我们定义从零开始的stable diffusion,stable diffusion,人工智能,比如说stable-diffusion v1.5训练与推理图片在512x512x3,然后Latent Space的中间表达则是4x64x64,那么我们会有一个decoder D能将图片从Latent Space中解码出来。

从零开始的stable diffusion,stable diffusion,人工智能在这个过程中我们期望从零开始的stable diffusion,stable diffusion,人工智能,这俩图片无限接近。

整个过程如下图所示:

从零开始的stable diffusion,stable diffusion,人工智能

而执行这个过程的就是我们的Variational Autoencoder,也就是VAE。

那么VAE该怎么训练呢?我们需要一个衡量生成图像与训练图像之间的一个距离指标。

也就是从零开始的stable diffusion,stable diffusion,人工智能

细节就不关心了,但这个指标可以用来衡量VAE模型的还原程度。训练过程与noise encoder和noise-predictor非常接近。

贴一个stable diffusion在FID指标上,与其他方法的对比。下面的表格来自于无条件图片生成。基本就是比较Latent Space是否有丢失重要信息。

从零开始的stable diffusion,stable diffusion,人工智能

  • 为什么Latent Space是可行的?

你可能在想,为什么VAE可以把一张图片压缩到更小的latent space,并且可以不丢失信息。

其实和人对图片的理解是一样的,自然的、优秀的图片都不是随机的,他们有高度的规则,比如说脸上会有眼睛、鼻子。一只狗会有4条腿和一个规则的形状。

图像的高维性是人为的,而自然的图像可以很容易地压缩为更小的空间中而不丢失任何信息。

可能说我们修改了一张图片的很多难以感知的细节,比如说隐藏水印,微小的亮度、对比度的修改,但修改后还是同样的图像吗?我们只能说它表达的东西还是一样的。并没有丢失任何信息。

  结合Latent Space与noise predictor的图像生成过程

  1. 生成一个随机的latent space matrix,也可以叫做latent representation。一种中间表达

  2. noise-predictor预测这个latent representation的noise.并生成一个latent space noise

  3. latent representation减去latent space noise

  4. 重复2~3,直到step结束

  5. 通过VAE的decoder将latent representation生成最终的图片

直到目前为止,都还没有条件控制的部分。按这个过程,我们最终只会得到一个随机的图片。

从零开始的stable diffusion,stable diffusion,人工智能

条件控制

非常关键,没有条件控制,我们最终只能不断地进行Monkey Coding,得到源源不断的随机图片。

相信你在上面的图片生成的过程中,已经感知到一个问题了,如果只是从一堆noise中去掉noise,那最后得到的为什么是有信息的图片,而不是一堆noise呢?

noise-predictor在训练的时候,其实就是基于已经成像的图片去预测noise,那么它预测的noise基本都来自于有图像信息的训练数据。

在这个denoise的过程中,noise会被附加上各种各样的图像信息。

怎么控制noise-predictor去选择哪些训练数据去预测noise,就是条件控制的核心要素。

这里我们以tex2img为案例讨论。

▐  Text Conditioning

下面的流程图,展示了一个prompt如何处理,并提供给noise predictor。

从零开始的stable diffusion,stable diffusion,人工智能


  • Tokenizer

从图中可以看到,我们的每一个word,都会被tokenized。stable diffusion v1.5使用的openai ViT-L/14 Clip模型来进行这个过程。

tokenized将自然语言转成计算机可理解的数字(NLP),它只能将words转成token。比如说dreambeach会被CLIP模型拆分成dreambeach。一个word,并不意味着一个token。同时dreambeach也不等同于dream<space>beach,stable diffusion model目前被限制只能使用75个tokens来进行prompt,并不等同于75个word。

  • Embedding


同样,这也是使用的openai ViT-L/14 Clip model. Embedding是一个768长度的向量。每一个token都会被转成一个768长度的向量,如上案例,我们最后会得到一个4x768的矩阵。

为什么我们需要embedding呢?

比如说我们输入了man,但这是不是同时可以意味着gentlemanguysportsmanboy。他们可能说在向量空间中,与man的距离由近而远。而你不一定非要一个完全准确无误的man。通过embedding的向量,我们可以决定究竟取多近的信息来生成图片。对应stable diffusion的参数就是(Classifier-Free Guidance scale)CFG。相当于用一个scale去放大距离,因此scale越大,对应的能获取的信息越少,就会越遵循prompt。而scale越小,则越容易获取到关联小,甚至无关的信息。

如何去控制embedding?

我们经常会遇到stable diffusion无法准确绘制出我们想要的内容。那么这里我们发现了第一种条件控制的方式:textual inversion

将我们想要的token用一个全新的别名定义,这个别名对应一个准确的token。那么就能准确无误地使用对应的embedding生成图片。

这里的embedding可以是新的对象,也可以是其他已存在的对象。

比如说我们用一个玩具猫训练到CLIP模型中,并定义其Tokenizer对应的word,同时微调stable diffusion的模型。而从零开始的stable diffusion,stable diffusion,人工智能对应toy cat就能产生如下的效果。

从零开始的stable diffusion,stable diffusion,人工智能

感觉有点像Lora的思路,具体还得调研下lora。

text transformer

在得到embedding之后,通过text transformer输入给noise-predictor

transformer可以控制多种条件,如class labels、image、depth map等。

Cross-attention

具体cross-attention是什么我也不是很清楚。但这里有一个案例可以说明:

比如说我们使用prompt "A man with blue eyes"。虽然这里是两个token,但stable diffusion会把这两个单词一起成对。

这样就能保证生成一个蓝色眼睛的男人。而不是一个蓝色袜子或者其他蓝色信息的男人。

(cross-attention between the prompt and the image)

LoRA models modify the cross-attention module to change styles。后面在研究Lora,这里把原话摘到这。

感觉更像是存在blueeyes,然后有一个集合同时满足blueeye。去取这个交叉的集合。问题:对应的embedding是不是不一样的?该如何区分blue planet in eyeblue eye in planet的区别?感觉这应该是NLP的领域了。

  • 总结下tex2img的过程

  1. stable diffusion生成一个随机的latent space matrix。这个由Random决定,如果Random不变,则这个latent space matrix不变。

  2. 通过noise-predictor,将noisy image与text prompt作为入参,预测predicted noise in latent space

  3. latent noise减去predicted noise。将其作为新的latent noise

  4. 不断重复2~3执行step次。比如说step=20

  5. 最终,通过VAE的decoder将latent representation生成最终的图片

这个时候就可以贴Stable diffusion论文中的一张图了

从零开始的stable diffusion,stable diffusion,人工智能

手撕一下公式:

左上角的从零开始的stable diffusion,stable diffusion,人工智能定义为一张RGB像素空间的图。经过从零开始的stable diffusion,stable diffusion,人工智能的变化,生成从零开始的stable diffusion,stable diffusion,人工智能这个latent space representation。再经过一系列的noise encoder,得到从零开始的stable diffusion,stable diffusion,人工智能,T表示step。

而这个过程则是img2img的input。如果是img2img,那么初始的noise latent representation就是这个不断加noise之后的从零开始的stable diffusion,stable diffusion,人工智能

如果是tex2img,初始的noise latent representation则是直接random出来的。

再从右下角的从零开始的stable diffusion,stable diffusion,人工智能从零开始的stable diffusion,stable diffusion,人工智能开始,y 表示多样的控制条件的入参,如text prompts。通过从零开始的stable diffusion,stable diffusion,人工智能(domain specific encoder)将 y 转为intermediate representation(一种中间表达)。而从零开始的stable diffusion,stable diffusion,人工智能从零开始的stable diffusion,stable diffusion,人工智能将经过cross-attention layer的实现:

从零开始的stable diffusion,stable diffusion,人工智能

具体的细节说实话没看懂,而这一部分在controlnet中也有解释,打算从controlnet的部分进行理解。

图中cross-attention的部分可以很清晰的看到是一个由大到小,又由小到大的过程,在controlnet的图中有解释:

SD Encoder Block_1(64x64) -> SD Encoder Block_2(32x32) -> SD Encoder Block_3(16x16) -> SD Encoder(Block_4 8x8) -> SD Middle(Block 8x8) -> SD Decoder(Block_4 8x8) -> SD Decoder Block_3(16x16) -> SD Decoder Block_2(32x32) -> SD Decoder Blocker_1(64x64)

是一个从64x64 -> 8x8 -> 64x64的过程,具体为啥,得等我撕完controlnet的论文。回到过程图中,我们可以看到denoising step则是在Latent Space的左下角进行了一个循环,这里与上面的流程一直。

最终通过VAE的decoder D,输出图片从零开始的stable diffusion,stable diffusion,人工智能

最终的公式如下:

从零开始的stable diffusion,stable diffusion,人工智能

结合上面的图看,基本还是比较清晰的,不过这个:=和从零开始的stable diffusion,stable diffusion,人工智能代表了啥就不是很清楚了。结合python代码看流程更清晰~删掉了部分代码,只留下了关键的调用。

pipe = StableDiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16
)
vae = AutoencoderKL.from_pretrained("CompVis/stable-diffusion-v1-4", subfolder="vae")
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")
text_encoder = CLIPTextModel.from_pretrained("openai/clip-vit-large-patch14")
unet = UNet2DConditionModel.from_pretrained(
    "CompVis/stable-diffusion-v1-4", subfolder="unet"
)
scheduler = LMSDiscreteScheduler.from_pretrained(
    "CompVis/stable-diffusion-v1-4", subfolder="scheduler"
)
prompt = ["a photograph of an astronaut riding a horse"]
generator = torch.manual_seed(32)
text_input = tokenizer(
    prompt,
    padding="max_length",
    max_length=tokenizer.model_max_length,
    truncation=True,
    return_tensors="pt",
)
with torch.no_grad():
    text_embeddings = text_encoder(text_input.input_ids.to(torch_device))[0]
max_length = text_input.input_ids.shape[-1]
uncond_input = tokenizer(
    [""] * batch_size, padding="max_length", max_length=max_length, return_tensors="pt"
)
with torch.no_grad():
    uncond_embeddings = text_encoder(uncond_input.input_ids.to(torch_device))[0]
text_embeddings = torch.cat([uncond_embeddings, text_embeddings])
latents = torch.randn(
    (batch_size, unet.in_channels, height // 8, width // 8), generator=generator
)
scheduler.set_timesteps(num_inference_steps)
latents = latents * scheduler.init_noise_sigma


for t in tqdm(scheduler.timesteps):
    latent_model_input = torch.cat([latents] * 2)
    latent_model_input = scheduler.scale_model_input(latent_model_input, t)
    with torch.no_grad():
        noise_pred = unet(
            latent_model_input, t, encoder_hidden_states=text_embeddings
        ).sample
    noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)
    noise_pred = noise_pred_uncond + guidance_scale * (
        noise_pred_text - noise_pred_uncond
    )


    latents = scheduler.step(noise_pred, t, latents).prev_sample


latents = 1 / 0.18215 * latents


with torch.no_grad():
    image = vae.decode(latents).sample

还是很贴合图中流程的。
在代码中有一个Scheduler,其实就是noising的执行器,它主要控制每一步noising的强度。
由Scheduler不断加噪,然后noise predictor进行预测减噪。
具体可以看Stable Diffusion Samplers: A Comprehensive Guide(地址:https://stable-diffusion-art.com/samplers/)

▐  Img2Img

这个其实在上面的流程图中已经解释了。这里把步骤列一下:

  1. 输入的image,通过VAE的encoder变成latent space representation

  2. 往里面加noise,总共加T个noise,noise的强度由Denoising strength控制。noise其实没有循环加的过程,就是不断叠同一个noise T次,所以可以一次计算完成。

  3. noisy image和text prompt作为输入,由noise predictor U-Net预测一个新的noise

  4. noisy image减去预测的noise

  5. 重复3~4 step次

  6. 通过VAE的decoder将latent representation转变成image


▐  Inpainting

基于上面的原理,Inpainting就很简单了,noise只加到inpaint的部分。其他和Img2Img一样。相当于只生成inpaint的部分。所以我们也经常发现inpaint的边缘经常无法非常平滑~如果能接受图片的细微变化,可以调低Denoising strength,将inpaint的结果,再进行一次img2img

从零开始的stable diffusion,stable diffusion,人工智能

Stable Diffusion v1 vs v2

v2开始CLIP的部分用了OpenClip。导致生成的控制变得非常的难。OpenAI的CLIP虽然训练集更小,参数也更少。(OpenClip是ViT-L/14 CLIP的5倍大小)。但似乎ViT-L/14的训练集更好一些,有更多针对艺术和名人照片的部分,所以输出的结果通常会更好。导致v2基本没用起来。不过现在没事了,SDXL横空出世。

从零开始的stable diffusion,stable diffusion,人工智能

SDXL model

SDXL模型的参数达到了66亿,而v1.5只有9.8亿

从零开始的stable diffusion,stable diffusion,人工智能

由一个Base model和Refiner model组成。Base model负责生成,而Refiner则负责加细节完善。可以只运行Base model。但类似人脸眼睛模糊之类的问题还是需要Refiner解决。

SDXL的主要变动:

  1. text encoder组合了OpenClip和ViT-G/14。毕竟OpenClip是可训练的。

  2. 训练用的图片可以小于256x256,增加了39%的训练集

  3. U-Net的部分比v1.5大了3倍

  4. 默认输出就是1024x1024

展示下对比效果:

从零开始的stable diffusion,stable diffusion,人工智能

从目前来看,有朝一日SDXL迟早替代v1.5。从效果来说v2.1确实被时代淘汰了。

从零开始的stable diffusion,stable diffusion,人工智能

Stable Diffusion的一些常见问题

▐  脸部细节不足,比如说眼部模糊

可以通过VAE files进行修复~有点像SDXL的Refiner

▐  多指、少指

这个看起来是一个无解的问题。Andrew给出的建议是加prompt比如说beautiful handsdetailed fingers,期望其中有部分图片满足要求。或者用inpaint。反复重新生成手部。(这个时候可以用相同的prompt。)

从零开始的stable diffusion,stable diffusion,人工智能

团队介绍

我们是淘天集团-场景智能技术团队,作为一支专注于通过AI和3D技术驱动商业创新的技术团队, 依托大淘宝丰富的业务形态和海量的用户、数据, 致力于为消费者提供创新的场景化导购体验, 为商家提供高效的场景化内容创作工具, 为淘宝打造围绕家的场景的第一消费入口。我们不断探索并实践新的技术, 通过持续的技术创新和突破,创新用户导购体验, 提升商家内容生产力, 让用户享受更好的消费体验, 让商家更高效、低成本地经营。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法文章来源地址https://www.toymoban.com/news/detail-725246.html

到了这里,关于从零开始的stable diffusion的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 人工智能实战:Stable Diffusion技术分享

    背景 Stable Diffusion是计算机图形学和可视化领域中的一项重要技术。在这篇分 享中 ,我们将深入探讨稳定扩散的原理、关键要素和实施步骤 ,通过了解Stable Diffusion的流程化 ,我们可以提升自身的设计能力和创造力 ,为公司 和个人注入更多的价值和创意。 美术制定 美术风

    2024年01月19日
    浏览(47)
  • 【人工智能·Stable-Diffusion】如何体验到 Stable-Diffusion

    带大家快速体验到AI图片生成 Stable-Diffusion,包含 win本地部署 参考和 云GPU服务器体验 。 Stable Diffusion 是一种通过文字描述创造出图像的 AI 模型. 它是一个开源软件, 使得新手可以在线尝试。 Stable Diffusion 的算法需要计算机有较强的算力,默认是需要配置有英伟达的独立显卡的

    2024年02月11日
    浏览(59)
  • 神奇的人工智能之神笔马良|Stable Diffusion使用

    1,月球上骑马的宇航员。 image generate by stable-diffusion model 2,下棋的狗 image generate by stable-diffusion model 3,沉迷学习的史努比 image generate by stable-diffusion model 4,鲤鱼跃出海面

    2024年02月09日
    浏览(44)
  • 人工智能AI系列 - java 版的stable diffusion 图像生成

    图像生成 文生图:输入提示词(仅支持英文),生成图片(仅支持英文) GPU版本 StableDiffusionGPU.java CPU版本 StableDiffusionCPU.java 图生图:根据图片及提示词(仅支持英文)生成图片 GPU版本 Img2ImgStableDiffusionGPU.java 显卡CUDA:11.7版本 参考测试数据:分辨率 512*512 25步 CPU(i5处理器

    2024年02月09日
    浏览(69)
  • 陶哲轩也在用的人工智能数学证明验证工具lean [线性代数篇1]从零开始证明矩阵的逆

    我还做了一个视频专门讲解哦,有空支持一下点个赞: 陶哲轩也在用的人工智能数学证明验证工具lean [线性代数篇1]从零开始证明矩阵的逆_哔哩哔哩_bilibili import Paperproof import Mathlib.LinearAlgebra.Matrix.Adjugate import Mathlib.Data.Real.Sqrt -- set_option trace.Meta.synthInstance true -- 要解释每一个

    2024年02月03日
    浏览(61)
  • AI创作教程之 Stable Diffusion 为何是人工智能新时代艺术创作的基石

    我们的人脑在当今人类产生的技术进步中发挥着最大的作用。在这种智能的基础上,人类创造了各种各样的产品,但不必说每一个都改变了人类生活的本质。随着模型权重的公开发布以保持稳定性,世界将发生巨大变化。AI稳定扩散文本到图像引擎。有了这个,任何人都可以

    2024年02月15日
    浏览(44)
  • 如何在Mac、Windows和Docker上本地电脑上搭建AI人工智能绘画工具Stable Diffusion

    微信公众号:运维开发故事,作者:double冬 目前,有诸如Midjourney等人工智能绘画网站可供大家来免费使用,但是由于是免费资源肯定会在机器性能和使用次数方面有所限制,因此如果能将人工智能绘画工具部署在本地运行就会突破机器性能和使用次数等方面的限制。可能所

    2024年02月13日
    浏览(54)
  • TPU编程竞赛|Stable Diffusion大模型巅峰对决,第五届全球校园人工智能算法精英赛正式启动!

    目录 赛题介绍 赛题背景 赛题任务 赛程安排 评分机制 奖项设置         近日,2023第五届全球校园人工智能算法精英赛正式开启报名。作为赛题合作方,算丰承办了“算法专项赛”赛道,提供赛题 「面向Stable Diffusion的图像提示语优化」 ,同时为参赛选手提供了丰富的云

    2024年02月08日
    浏览(61)
  • 从零开始的stable diffusion

    stable diffusion真的是横空出世,开启了AIGC的元年。不知你是否有和我一样的困惑,这AI工具好像并不是那么听话? 前言 我们该如何才能用好stable diffusion这个工具呢?AI究竟在stable diffusion中承担了什么样的角色?如何能尽可能快、成本低地得到我们期望的结果? 源于这一系列

    2024年02月07日
    浏览(42)
  • Stable Diffusion现代人工智能艺术成功背后的物理学原理,破译用于文本到图像生成的著名 AI 模型与物理学中观察到的过程之间的联系

    毫不奇怪地否认本文的许多内容是使用人工智能生成的,当然包括描绘当今数字艺术最大趋势之一的图像。 虽然最近几天迅速传播并融入我们对话中的一些最新语言模型不一定适合图像生成,但本文旨在关注文本到图像 AI,特别是著名的系统“稳定扩散” ”。创意工具市场

    2024年02月11日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包