扩散模型实战(十):Stable Diffusion文本条件生成图像大模型

这篇具有很好参考价值的文章主要介绍了扩散模型实战(十):Stable Diffusion文本条件生成图像大模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

推荐阅读列表:

 扩散模型实战(一):基本原理介绍

扩散模型实战(二):扩散模型的发展

扩散模型实战(三):扩散模型的应用

扩散模型实战(四):从零构建扩散模型

扩散模型实战(五):采样过程

扩散模型实战(六):Diffusers DDPM初探

扩散模型实战(七):Diffusers蝴蝶图像生成实战

扩散模型实战(八):微调扩散模型

扩散模型实战(九):使用CLIP模型引导和控制扩散模型

        在AIGC时代,Stable Diffusion无疑是其中最亮的“仔”,它是一个强大的文本条件隐式扩散模型(text-conditioned latent diffusion model),可以根据文字描述(也称为Prompt)生成精美图片。

一、基本概念

1.1 隐式扩散

       对于基于transformer的大模型来说,self-attention的计算复杂度与输入数据是平方关系的,比如一张128X128像素的图片在像素数量上是64X64像素图片的4倍,内存和计算量是16倍。这正是高分辨率图像生成任务存在的普遍现象。

       为了解决这个问题,提出了隐式扩散(Latent Diffusion)方法,该方法认为图片通常包含大量冗余信息,首先使用大量图片数据训练一个Variational Auto-Encode(VAE)模型,编码器将图片映射到一个较小的隐式表示,解码器可以将较小的隐式表示映射到原始图片。Stable Diffusion中的VAE接受一张3通道图片作为输入,生成一个4通道的隐式特征,同时每一个空间维度都将减少为原来的八分之一。例如,一张512X512像素的图片可以被压缩到一个4X64X64的隐式表示。

       通过在隐式表示(而不是完整图像)上进行扩散,可以使用更少的内存也可以减少UNet层数,从而加速图片生成,极大降低了训练和推理成本。
        隐式扩散的结构,如下图所示:

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉

1.2 以文本为生成条件

       前面的章节展示了如何将额外信息输入给UNet,以实现对生成图像的控制,这种方法称为条件生成。以文本为条件进行控制图像的生成是在推理阶段,我们可以输入期望图像的文本描述(Prompt),并把纯噪声数据作为起点,然后模型对噪声数据进行“去噪”,从而生成能够匹配文本描述的图像。那么这个过程是如何实现的呢?

      我们需要对文本进行编码表示,然后输入给UNet作为生成条件,文本嵌入表示如下图ENCODER_HIDDEN_STATES

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉

       Stable Diffusion使用CLIP对文本描述进行编码,首先对输入文本描述进行分词,然后输入给CLIP文本编码器,从而为每个token产生一个768维(Stable Diffusion 1.x版本)或者1024维(Stable Diffusion 2.x版本)向量,为了使输入格式一致,文本描述总是被补全或者截断为77个token。

       那么,如何将这些条件信息输入给UNet进行预测呢?答案是使用交叉注意力(cross-attention)机制。UNet网络中的每个空间位置都可以与文本条件中的不同token建立注意力(在稍后的代码中可以看到具体的实现),如下图所示:

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉

1.3 无分类器引导

       第2节我们提到可以使用CLIP编码文本描述来控制图像的生成,但是实际使用中,每个生成的图像都是按照文本描述生成的吗?当然不一定,其实是大模型的幻觉问题,原因可能是训练数据中图像与文本描述相关性弱,模型可能学着不过度依赖文本描述,而是从大量图像中学习来生成图像,最终达不到我们的期望,那如何解决呢?

       我们可以引入一个小技巧-无分类器引导(Classifier-Free Guidance,CFG)。在训练时,我们时不时把文本条件置空,强制模型去学习如何在无文字信息的情况下对图像“去噪”。在推理阶段,我们分别进行了两个预测:一个有文字条件,另一个则没有文字条件。这样我们就可以利用两者的差异来建立一个最终的预测了,并使最终结果在文本条件预测所指明的方向上依据一个缩放系数(引导尺度)更好的生成文本描述匹配的结果。从下图看到,更大的引导尺度能让生成的图像更接近文本描述。

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉

1.4 其他类型的条件生成模型:Img2Img、Inpainting与Depth2Img模型

       其实除了使用文本描述作为条件生成图像,还有其他不同类型的条件可以控制Stable Diffusion生成图像,比如图片到图片、图片的部分掩码(mask)到图片以及深度图到图片,这些模型分别使用图片本身、图片掩码和图片深度信息作为条件来生成最终的图片。

       Img2Img是图片到图片的转换,包括多种类型,如风格转换(从照片风格转换为动漫风格)和图片超分辨率(给定一张低分辨率图片作为条件,让模型生成对应的高分辨率图片,类似Stable Diffusion Upscaler)。Inpainting又称图片修复,模型会根据掩码的区域信息和掩码之外的全局结构信息生成连贯的图片。Depth2Img采用图片的深度新作为条件,模型生成与深度图本身相似的具有全局结构的图片,如下图所示:

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉

1.5 使用DreamBooth微调扩散模型

      DreamBooth可以微调文本到图像的生成模型,最初是为Google的Imagen Model开发的,很快被应用到Stable Diffusion中。它可以根据用户提供的一个主题3~5张图片,就可以生成与该主题相关的图像,但它对于各种设置比较敏感。

二、环境准备

安装python库

pip install -Uq diffusers ftfy acceleratepip install -Uq git+https://github.com/huggingface/transformers

数据准备

import torchimport requestsfrom PIL import Imagefrom io import BytesIOfrom matplotlib import pyplot as plt # 这次要探索的管线比较多from diffusers import (    StableDiffusionPipeline,     StableDiffusionImg2ImgPipeline,    StableDiffusionInpaintPipeline,     StableDiffusionDepth2ImgPipeline    )        # 因为要用到的展示图片较多,所以我们写了一个旨在下载图片的函数def download_image(url):    response = requests.get(url)    return Image.open(BytesIO(response.content)).convert("RGB") # Inpainting需要用到的图片img_url = "https://raw.githubusercontent.com/CompVis/latent- diffusion/main/data/inpainting_examples/overture-creations- 5sI6fQgYIuo.png"mask_url = "https://raw.githubusercontent.com/CompVis/latent- diffusion/main/data/ inpainting_examples/overture-creations- 5sI6fQgYIuo_mask.png" init_image = download_image(img_url).resize((512, 512))mask_image = download_image(mask_url).resize((512, 512)) device = (    "mps"    if torch.backends.mps.is_available()    else "cuda"    if torch.cuda.is_available()    else "cpu")

三、使用文本描述控制生成图像

       加载Stable Diffusion Pipeline,当然可以通过model_id切换Stable Diffusion版本

# 载入管线model_id = "stabilityai/stable-diffusion-2-1-base"pipe = StableDiffusionPipeline.from_pretrained(model_id).to(device)

如果GPU显存不足,可以尝试以下方法来减少GPU显存的使用

  • 降低模型的精度为FP16
pipe = StableDiffusionPipeline.from_pretrained(model_id,    revision="fp16",torch_dtype=torch.float16).to(device)
  • 开启注意力切分功能,可以降低速度来减少GPU显存的使用
pipe.enable_attention_slicing()
  • 减小生成图像的尺寸
# 给生成器设置一个随机种子,这样可以保证结果的可复现性generator = torch.Generator(device=device).manual_seed(42) # 运行这个管线pipe_output = pipe(    prompt="Palette knife painting of an autumn cityscape",    # 提示文字:哪些要生成    negative_prompt="Oversaturated, blurry, low quality",    # 提示文字:哪些不要生成    height=480, width=640,     # 定义所生成图片的尺寸    guidance_scale=8,          # 提示文字的影响程度    num_inference_steps=35,    # 定义一次生成需要多少个推理步骤    generator=generator        # 设定随机种子的生成器) # 查看生成结果,如图6-7所示pipe_output.images[0]

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉

主要参数介绍:

width和height:用于指定生成图片的尺寸,他们必须可以被8整除,否则VAE不能整除工作;

num_inference_steps:会影响生成图片的质量,采用默认50即可,用户也可以尝试不同的值来对比一下效果;

negative_prompt:用于强调不希望生成的内容,该参数一般在无分类器引导的情况下使用。列出一些不想要的特征,以帮助模型生成更好的结果;

guidance_scale:决定了无分类器引导的影响强度。增大这个参数可以使生成的内容更接近给出的文本描述,但是参数值过大,则可能导致结果过于饱和,不美观,如下图所示:

cfg_scales = [1.1, 8, 12] prompt = "A collie with a pink hat" fig, axs = plt.subplots(1, len(cfg_scales), figsize=(16, 5))for i, ax in enumerate(axs):    im = pipe(prompt, height=480, width=480,        guidance_scale=cfg_scales[i], num_inference_steps=35,        generator=torch.Generator(device=device).manual_seed(42)).            images[0]     ax.imshow(im); ax.set_title(f'CFG Scale {cfg_scales[i]}')

stable diffusion条件图像生成,ChatGPT,笔记,NLP,stable diffusion,人工智能,计算机视觉文章来源地址https://www.toymoban.com/news/detail-770217.html

到了这里,关于扩散模型实战(十):Stable Diffusion文本条件生成图像大模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型

    如果我们的 计算机视觉 系统要真正理解视觉世界,它们不仅必须能够识别图像,而且必须能够生成图像 。 文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像 。 近两年,以ChatGPT为代表的AIGC技术崭露头角,逐渐从学术研究的象牙塔迈向工业应用的广阔天地。随着下

    2024年04月09日
    浏览(37)
  • Stable-Diffusion深度学习文本到图像生成模型

    https://zh.wikipedia.org/zh-cn/Stable_Diffusion https://en.wikipedia.org/wiki/Stable_Diffusion https://github.com/Stability-AI/stablediffusion Stability AI https://github.com/CompVis/stable-diffusion Stable Diffusion是2022年发布的深度学习文本到图像生成模型。 它主要用于根据文本的描述产生详细图像,尽管它也可以应用于

    2024年02月11日
    浏览(40)
  • Diffusion扩散模型学习2——Stable Diffusion结构解析-以文本生成图像(文生图,txt2img)为例

    用了很久的Stable Diffusion,但从来没有好好解析过它内部的结构,写个博客记录一下,嘿嘿。 https://github.com/bubbliiiing/stable-diffusion 喜欢的可以点个star噢。 Stable Diffusion是比较新的一个扩散模型,翻译过来是稳定扩散,虽然名字叫稳定扩散,但实际上换个seed生成的结果就完全不

    2024年02月15日
    浏览(57)
  • Stable Diffusion复现——基于 Amazon SageMaker 搭建文本生成图像模型

    众所周知, Stable Diffusion扩散模型的训练和推理非常消耗显卡资源 ,我之前也是因为资源原因一直没有复现成功。 而最近我在网上搜索发现,亚马逊云科技最近推出了一个 【云上探索实验室】 刚好有复现Stable Diffusion的活动,其使用 亚马逊AWS提供的Amazon SageMaker机器学习平台

    2023年04月09日
    浏览(34)
  • Stable Diffusion生成式扩散模型代码实现原理

    Stable Diffusion可以使用PyTorch或TensorFlow等深度学习框架来实现。这些框架提供了一系列的工具和函数,使得开发者可以更方便地构建、训练和部署深度学习模型。因此可以使用PyTorch或TensorFlow来实现Stable Diffusion模型。 安装PyTorch:确保您已经安装了PyTorch,并具备基本的PyTorch使用

    2024年03月13日
    浏览(38)
  • 文字转图片生成系统-Stable diffusion稳定扩散模型

    二话不说先上效果图:(附带代码和模型资源文件)  让它画一个超级汽车在海边。。  近期百度推出了文言一心, 一个能回答问题,能根据文字描述绘制图片的服务,前期可能不太完善出现了一些失误,不过这个idea还是相当不错的   这个东西挺好哈,作为文学创作,生成

    2024年02月09日
    浏览(45)
  • 文本生成图像工作简述4--扩散模型、自回归模型、生成对抗网络的对比调研

    基于近年来图像处理和语言理解方面的技术突破,融合图像和文本处理的多模态任务获得了广泛的关注并取得了显著成功。 文本生成图像(text-to-image)是图像和文本处理的多模态任务的一项子任务,其根据给定文本生成符合描述的真实图像,具有巨大的应用潜力,如 视觉推

    2023年04月08日
    浏览(35)
  • 【AIGC】手把手使用扩散模型从文本生成图像

    在这篇文章中,我们将手把手展示如何使用Hugging Face的diffusers包通过文本生成图像。 DALLE2是收费的,用户只有一些免费的额度,如果免费额度使用完毕就需要付费了,所以必须寻找替代方案,并发现了Hugging Face,他们发布了一个扩散模型的包diffusers ,可以让我们直接使用。

    2024年02月09日
    浏览(49)
  • 稳定扩散美学梯度(Stable Diffusion Aesthetic Gradients):一种创新的图像生成技术...

    项目地址:https://gitcode.com/vicgalle/stable-diffusion-aesthetic-gradients 如果你对艺术、人工智能和计算机视觉有热情,那么你一定不能错过 Vicgalle\\\'s Stable Diffusion Aesthetic Gradients项目。这个开源项目利用深度学习算法生成具有艺术感的渐变图像,其独特之处在于能够模仿各种艺术风格。

    2024年04月24日
    浏览(36)
  • 【AIGC】DreamBooth:微调文本到图像扩散模型用于主题驱动的生成

    DreamBooth可以让我们使用一个很小的数据集微调文生图模型,然后基于文本提示词为我们训练的的主体替换不同的场景。  大型文本转图像模型在人工智能的发展中实现了显著的飞跃,能够从给定的文本提示中高质量和多样化地合成图像。然而,这些模型缺乏模仿给定参考集中

    2024年01月18日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包