从论文到实践:Stable Diffusion模型一键生成高质量AI绘画

news2025/1/16 9:01:42

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年12月24日10点02分


神秘男子影,
  秘而不宣藏。
泣意深不见,
男子自持重,
   子夜独自沉。


 AI绘画一键生成美图-变成画家

本地部署SD模型,一键即可生成自己想要绘制的图画,本文包括论文原理讲解和代码复现

论文讲解

论文题目:High-Resolution Image Synthesis with Latent Diffusion Models(基于潜在扩散模型的高分辨率图像合成)

论文被计算机视觉顶会CVPR 2022收录

Stable diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。它建立在自注意力机制和扩散过程的基础上。它的设计灵感来自于扩散过程模型(Diffusion Models),这些模型在自然图像建模领域取得了巨大成功。

Stable Diffusion通过一系列的扩散步骤来生成图像。在每一步中,模型逐渐“扩散”图像,从含有较少信息的噪声开始,到包含更多细节的图像。在每个扩散步骤中,模型需要预测图像的条件分布,并根据这个条件分布生成下一个扩散步骤的输入。

背景介绍

在生成模型的研究中,扩散过程模型和自注意力机制是两个备受关注的领域。扩散过程模型是一种基于随机过程的生成模型,通过模拟随机过程的演化来生成图像,它在自然图像建模领域取得了巨大的成功。而自注意力机制则是一种强大的神经网络组件,能够有效地捕捉输入序列中不同位置之间的依赖关系,被广泛应用于自然语言处理和计算机视觉领域。

近年来,研究人员开始探索如何将扩散过程模型和自注意力机制结合起来,以进一步提高生成模型的性能和生成图像的质量。在这个背景下,Stable Diffusion应运而生,简称SD模型。

Stable Diffusion的提出

Stable Diffusion是一种基于扩散过程和自注意力机制的生成模型,旨在生成高质量的图像。它采用了一系列扩散步骤来逐渐生成图像,每个步骤中模型需要预测图像的条件分布,并生成下一个扩散步骤的输入。通过结合自注意力机制,Stable Diffusion能够有效地捕捉图像中不同位置之间的关联信息,从而生成更加真实和细节丰富的图像。

Stable Diffusion在图像生成领域的应用

Stable Diffusion不仅可以用于生成高质量的图像,还可以应用于多种图像生成任务,包括图像修复、超分辨率重建、图像合成等。其灵活的生成过程和强大的生成能力使其成为图像生成领域的一项重要研究成果,并在各种实际应用中展现出巨大潜力。

在下文中,我们将更深入地探讨Stable Diffusion的工作原理、实现细节以及相关的实验结果,以帮助读者更好地理解这一新颖的生成模型,并探讨其在未来的发展方向和应用前景。

经过微调后Stable Diffusion模型可以生成各种风格的图像,先来看生成效果:

上图是模型的框架图,模型的步骤和讲解如下

1、训练自编码模型(AutoEncoder)

  • 首先,通过训练一个自编码模型,包括编码器和解码器部分。编码器负责将输入图像压缩成潜在表示(latent representation),而解码器则负责将潜在表示解码成原始像素空间的图像。
  • 这一步骤是为了将图像压缩到低维的潜在表示空间,为后续的diffusion操作做准备。

2、感知压缩(Perceptual Compression)

  • 利用训练好的自编码模型对图片进行压缩,将其转换到潜在表示空间。
  • 在潜在表示空间上进行操作,这个过程被称为感知压缩,因为它通过自编码器模型来实现压缩,同时保留了重要的图像特征。

3、潜在表示空间上的diffusion操作

  • 在潜在表示空间上进行diffusion操作,其过程与标准的扩散模型类似。
  • 扩散模型的具体实现为time-conditional UNet,这是一种结合了时间条件信息的UNet结构,用于在潜在表示空间上进行图像生成。
图片感知压缩

图片感知压缩(Perceptual Image Compression)是一种通过忽略图像中的高频信息,保留重要和基础特征来实现高效压缩的方法。这种方法在生成模型中起到了关键作用,通过降低模型训练和采样的计算复杂度,使得模型能够在较短的时间内生成高质量的图像,从而降低了模型的落地门槛。

方法原理

  • 感知压缩利用预训练的自编码模型(如变分自编码器,VAE)来学习图像的潜在表示空间。这个潜在表示空间是在感知上等同于图像空间的,但维度更低。
  • 在这个潜在表示空间中,自编码模型保留了图像的重要特征,同时忽略了一些不太重要的高频信息。这种压缩方式使得模型训练和采样的计算复杂度大幅降低。

方法优势

  • 感知压缩只需要训练一个通用的自编码模型,就可以应用于不同的扩散模型训练中,也可以用于不同的图像生成任务。这种通用性使得该方法在多种场景下都十分有效。
  • 除了标准的无条件图像生成任务外,感知压缩还可以方便地应用于各种图像到图像(如修复、超分辨率重建)和文本到图像(如文本生成图像)的任务中。

训练过程

  • 基于感知压缩的扩散模型的训练通常是一个两阶段的过程。首先,需要训练一个自编码器来学习图像的潜在表示空间。在这一阶段中,为了避免潜在表示空间出现高度的异化,通常会采用KL正则化(KL-reg)和矢量量化正则化(VQ-reg)等方法。
  • 在Stable Diffusion中,主要采用AutoencoderKL这种实现,这个实现结合了KL正则化的方法,用于训练自编码器。
潜在扩散模型

扩散模型可以被理解为一种时序去噪自编码器,其主要目标是根据输入图像去预测一个对应的去噪后的变体,或者说预测噪音,其中噪音是输入图像的噪音版本。其相应的目标函数可以被表述如下:


这里, x_t是模型预测的下一个时间步的图像,x_t-1 是当前时间步的输入图像,ε_t 是从均匀分布中采样得到的噪音。

在潜在扩散模型中,引入了预训练的感知压缩模型。这个感知压缩模型包括一个编码器E和一个解码器D。在训练过程中,编码器 负责将输入图像压缩成潜在表示,解码器则负责将潜在表示 解码成图像。这样,模型就能够在潜在表示空间中学习。相应的目标函数可以被表述如下:

在这里,z_t 是模型预测的下一个时间步的潜在表示,x_t-1 是当前时间步的输入图像,E_ϕ 是编码器,D_ϕ 是解码器,ϕ是编码器和解码器的参数。这样的目标函数结构使得模型能够在潜在表示空间中进行操作,同时通过解码器将潜在表示转换回图像空间。

条件机制

通过引入条件信息来控制图片合成的过程。为了实现这一点,论文提出了拓展的条件时序去噪自编码器(conditional denoising autoencoder)。通过这种方法,我们可以引入条件变量c,并将其作为输入来控制图像的生成过程。

通过在 UNet 主干网络上增加 cross-attention 机制来实现条件图片生成。这个过程可以理解为,在生成图像的过程中,模型会重点关注与条件变量相关的信息,从而在图像生成过程中加入条件的影响。为了能够处理来自多个不同模态的条件变量,论文引入了一个领域专用编码器(domain specific encoder),用来将不同模态的条件变量 ?c 映射为一个统一的中间表示。这样一来,我们可以很方便地引入各种形态的条件,比如文本、类别、布局等等。

总之,条件图片生成任务的目标函数可以根据模型的具体设计而有所不同,但通常会涉及到最小化生成图像与目标图像之间的差异,同时考虑到条件变量对图像生成过程的影响。

实验结果

模型生成效果如上图,展示了来自不同数据集(CelebAHQ、FFHQ、LSUN-Churches、LSUN-Bedrooms和类别条件的ImageNet)上训练的LDMs(Latent Diffusion Models)生成的样本。这些样本的分辨率均为256×256像素。

这个图表展示了在ImageNet数据集上,通过观察类别条件下的不同下采样因子 f,对类别条件下的扩散模型(LDM,Latent Diffusion Models)进行训练的情况。图中显示了在进行了200万个训练步骤后的结果。这些模型使用了不同的下采样因子(如LDM-1、LDM-4、LDM-16等),这直接影响了模型的感知压缩程度。

展示了在CelebA-HQ和ImageNet数据集上,不同压缩程度的LDMs(Latent Diffusion Models)在推断速度和样本质量之间的比较。图中的左侧部分是CelebA-HQ数据集的结果,右侧部分是ImageNet数据集的结果。不同的标记代表使用DDIM采样器进行的{10、20、50、100、200}个采样步骤,沿着每条线从右到左进行计数。

代码复现

环境配置

基本的环境配置要点如下

  • 最好使用显卡的电脑,没有显卡SD模型生成图像较慢。(本人使用1660 Ti 显卡 6G显存可跑SD模型,速度比较快了,大家可以参考此配置)
  • 电脑能够访问github,并安装git工具,方便下载代码。(如果不能访问,附件中有我整理的代码包(已经配置好且安装了汉化插件),即开即用。)
  • 安装好编程语言工具python,可以直接安装,也可以使用Conda环境

1、在Windows下需要配置有Python环境,建议使用Conda环境

# 创建一个sd环境,方便后续安装包
conda create –n sd python=3.10.9
# 激活sd环境
activate sd

2、拉取官方的代码,如果不能拉取代码,可我整理好的附件使用。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

13、安装代码运行所需要的包(已成功下载官方代码或者下载了我整理好的代码包)

成功下载代码包后,打开"stable-diffusion-webui"文件夹,点击webui-user.bat文件,一定注意点击webui-user.bat,后缀是bat的文件(Windows安装文件),而不是sh的(sh是Linux的安装文件)。

安装一般需要等待1个半小时左右,耐心等待安装结束。

安装结束,一般浏览器会自动打开网页,如果没有打开,请在浏览器输入http://127.0.0.1:7860,正常运行,命令行页面提示的地址。

即可见到启动页面

下面是官方代码的启动页面,我整理的代码是已经安装好汉化插件,汉化过的,方便使用

下面是使用整理好的附件的代码启动的页面,已经集成了中英文双语汉化插件,方便使用。

提示词准备

提示词可以根据用户自己的喜好设定,比如设置生成猫狗的图像、动漫图像。不过提示词的设定是一门技术,好的提示词,能够引导模型生成符合要求的图像。提示词要是英文的。

这里推荐一个提示词和模型下载网站 https://civitai.com/,在这个网站上可以下载自己喜欢风格的模型,也可以方便获取提示词,可以基于别人写好的提示词修改。

下面就是一个“majicMIX realistic 麦橘写实”的模型,可以生成写实风格的图像。

提示词一般要准备正面提示词和负面提示词

正面提示词(我们想要的内容)例如:

1girl,hair with bangs,black long dress,orange background,

负面提示词(我们不要的内容)例如

(worst quality:2),(low quality:2),(normal quality:2),lowres,watermark,

准备好提示词,我们就可以设置模型生成的参数

生成的参数控制模型的应该怎样生成

针对不同风格图像要有不同的参数,例如

模型下载

下载模型文件majicmixRealistic_v7.safetensors到stable-diffusion-webui\models\Stable-diffusion文件夹下

放在stable-diffusion-webui\models\Stable-diffusion文件夹下,一定要注意,放在该文件夹,才能检测到。

生成图像

以上都设置完毕后,即可点击生成按钮,开始绘画

点击生成按钮生成效果如下所示:

绘画效果

下面是生成图像的高清图:

本次绘画过程中,共进行6次生成,除第一次生成效果不太好外,其余效果都很好,可以生成根据提示不同风格的图像

总结

以上就是Stable diffusion模型的论文和代码复现的讲解。

这篇论文和代码,都是很好玩的,可以帮助我们绘制想要的图画,满足我们一键成为画家的愿望。

整理的代码在附件中,可以直接安装上面的教程使用。

参考链接

Stable Diffusion论文 链接


 

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

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

相关文章

业务幂等性技术架构体系之消息幂等深入剖析

在系统中当使用消息队列时,无论做哪种技术选型,有很多问题是无论如何也不能忽视的,如:消息必达、消息幂等等。本文以典型的RabbitMQ为例,讲解如何保证消息幂等的可实施解决方案,其他MQ选型均可参考。 一、…

【2024年华为OD机试】 (B卷,100分)- 跳房子I(Java JS PythonC/C++)

一、问题描述 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏。 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格。 跳房子的过程中,可以向前跳,也可以向后跳。 假设房子的总格数是count,小红每…

鸿蒙打包发布

HarmonyOS应用/元服务发布(打包发布) https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-publish-app-V13?catalogVersionV13 密钥:包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,格式…

JAVA:在IDEA引入本地jar包的方法(不读取maven目录jar包)

问题: 有时maven使用的jar包版本是最新版,但项目需要的是旧版本,每次重新install会自动将mavan的jar包覆盖到项目的lib目录中,导致项目报错。 解决: 在IDEA中手动配置该jar包对应的目录。 点击菜单File->Projec…

Mac上安装Label Studio

在Mac上安装Anaconda并随后安装Label Studio,可以按照以下步骤进行: 1. 在Mac上安装Anaconda 首先,你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网,点击“Download Anaconda”按钮,选择适合M…

docker-compose和docker仓库

一、docker-compose 1.概述 docker-compose是一个自动编排工具,可以根据dockerfile自动化部署docker容器。 主要功能 配置定义 使用YAML文件(通常命名为docker - compose.yml)来描述应用程序的服务、网络和卷等配置。 容器编排 可以同时…

了解linux中的“of_property_read_u32()”

of_property_read_u32(node, "post-pwm-on-delay-ms",&data->post_pwm_on_delay); /*根据"post-pwm-on-delay-ms",从属性中查找并读取一个32位整数*/ /*读到一个32位整数,保存到data->post_pwm_on_delay中*/ of_property_read_u32…

nodejs 037: 前端新手教程使用引导库 Intro.js

Intro.js简介 Intro.js 是一个流行的引导库,用于提供步进式的新手教程。它可以帮助你创建用户引导,展示一些步骤和提示,逐步引导用户了解应用程序的功能。 安装方法: npm install intro.js使用方法: import introJ…

Vue篇-07

Vue UI组件库 一、移动端常用的UI组件库 1.1、Vant 1.2、Cube UI 1.3、Mint UI 二、PC端常用的UI组件库 2.1、Element UI Element - The worlds most popular Vue UI framework 安装: 按需引入: 135_尚硅谷Vue技术_element-ui按需引入_哔哩哔哩_b…

适配器模式案例

如果在这样的结构中 我们在Controller中注入,但我们后续需要修改Oss时,比如从minioService改成AliyunService时,需要改动的代码很多。于是我们抽象出一个FileService,让controller只跟fileservice耦合,这样我没只需要在…

鸿蒙UI开发——键盘弹出避让模式设置

1、概 述 我们在鸿蒙开发时,不免会遇到用户输入场景,当用户准备输入时,会涉及到输入法的弹出,我们的界面针对输入法的弹出有两种避让模式:上抬模式、压缩模式。 下面针对输入法的两种避让模式的设置做简单介绍。 2、…

Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、初始变量 3.2、画一条折线 3.3、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 3.1、初始变量 关键代码: data() {return {map:null,// 定义路径坐…

栈算法篇——LIFO后进先出,数据与思想的层叠乐章(上)

文章目录 前言第一章:栈的基础知识回顾1.1 栈的结构与实现1.2 栈的应用第二章:删除字符串中的所有相邻重复项2.1 题目链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/2.2 题目分析:2.3…

计算机的错误计算(二百一十二)

摘要 利用两个大模型计算 实验表明,两个大模型均进行了中肯的分析。另外,其中一个大模型给出了 Python代码,运行后,结果中有7位错误数字;而一个大模型进行加减运算时出错。 例1. 计算 下面是与一个大模型的对话…

VMware虚拟机安装Home Assistant智能家居平台并实现远程访问保姆级教程

目录 前言 1. 安装Home Assistant 前言 本文主要介绍如何在windows 10 上用VMware Workstation 17 Pro搭建 Home Assistant OS Host os version:Windows 10 Pro, 64-bit (Build 19045.5247) 10.0.19045 VMware version:VMware Workstation 17 Pro 1. 安装Home …

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…

【开源免费】基于Vue和SpringBoot的欢迪迈手机商城(附论文)

本文项目编号 T 141 ,文末自助获取源码 \color{red}{T141,文末自助获取源码} T141,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

Cyber Security 101-Offensive Security-SQLMap: The Basics(sqlmap基础)

了解 SQL 注入并通过 SQLMap 工具利用此漏洞。 任务1:介绍 SQL 注入是一个普遍存在的漏洞,长期以来一直是热门 网络安全主题。要了解这个漏洞,我们必须首先 了解什么是数据库以及网站如何与数据库交互。 数据库是可以存储、修改和 检索。它…

【数据结构-堆】力扣1792. 最大平均通过率

一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学…

USRP,FM解调程序

USRP,FM解调程序