NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

BigDL 教程:使用 Stable Diffusion 从文本生成你自己的图像

  • 2023-04-16
    北京
  • 本文字数:3050 字

    阅读完需:约 10 分钟

BigDL 教程:使用 Stable Diffusion 从文本生成你自己的图像

本文最初发表于 Medium 博客,经原作者授权,InfoQ 翻译并分享。

 

导读:本文介绍了如何使用 Stable Diffusion 模型从文本生成图像。作者详细介绍了该模型的架构概述以及学习过程,并指出该模型需要大量计算,但可以使用英特尔提供的优化技术缩短运行时间。同时,文章还提供了文本到图像的实现步骤,并鼓励读者在 GitHub 上跟随实现。

 

如果说每种技术都有其季节,那么人工智能已经迎来了“夏天”。人工智能的一系列进步引领了该学科目前的繁荣,并带来了对未来的巨大期望。

 

计算机视觉就是一个典型例子。尽管对计算资源的需求很高,但在图像生成(Huang 等,2018)领域已经取得了巨大的进展。图像生成始于生成式对抗网络(Generative Adversarial Network,GAN)范式,然后逐步发展到如今的扩散模型。这种进化为数据科学家提供了易于训练、快速收敛并能可靠生成高质量图像的模型。

 

这种技术在人工智能内容生成(generative AI,AIGC)中发挥着重要作用,它能够生成各种数据,包括音频、代码、图像、文本、模拟、3D 对象、视频等等。它通过训练算法来基于以前的训练数据生成新的信息。AIGC 有许多用途包括文本生成(如 GPT,Bidirectional Encoder Representations from Transformer(BERT)或最近的 ChatGPT)、音频生成、文本到图像的创建(DALL-EStable Diffusion)等。


在本文中,我们将展示如何借助 BigDLBigDL Nano 中的优化)在 Intel 笔记本电脑上运行优化后的 Stable Diffusion 模型,从而实现文本到图像的生成。


使用 Stable Diffusion 的两种方法

 

使用 Stable Diffusion 生成图像有两种方式:无条件和有条件。

 

无条件图像生成:可以从噪声种生成新的图像而不需要任何条件(例如提示文本或其他图像)。模型在训练之后可以生成新的随机图片。相关详细信息,请查看此使用蝴蝶图像训练模型的示例。



训练集



生成的图像


有条件图像生成:该模型可以根据输入条件生成新的图像,而有条件图像生成的具体应用包括文本到图像、图像到图像、语义、修补和补全等。让我们来详细看一下:

 

  • 文本到图像(txt2img):基于输入文本生成图像。输入:文本-> 输出:图像

 

以下是一个输入文本的示例:一只戴眼镜的狗。



  • 图像到图像:该模型基于低分辨率图像生成高分辨率图像。下面展示了一种上采样扩散模型的实现。输入:图像->输出:图像。



摘自《基于潜在扩散模型的高分辨率图像合成》(High-Resolution Image Synthesis with Latent Diffusion Models

 

  • 语义增强(img2img):该模型允许你基于输入的图像和文本生成新的图像。你可以尝试使用这个图像到图像教程。在下面的示例中,我们要求它生成一个美丽的海滩。然而,由于我们对理想的度假场景不满意,我们要求添加一个高尔夫球场。该模型以生成的海滩作为输入,并在其上添加了一个高尔夫球场。



海滩(上图)带高尔夫球场的海滩(下图)

 

  • 图像修补:该模型可以使用新内容填充图像中被遮蔽的区域,无论是因为图像的某些部分已经损坏,还是为了替换图像中现有但不需要的内容。使用这个多修补模型,下面的挂钟被替换成了蝙蝠侠面具。(对于替换图像,你可以使用你的想象力添加任何图像。)



家庭办公室(来自 UnSplash 的原始照片);带有生成的斗篷十字军面具的家庭办公室

 

  • 扩展绘制:这里的绘制发生在原始图像的外部区域。该模型会人工“填充”图像到所需的大小。在下面的示例中,我们要求模型生成一个名为“街上的汽车”的图像,并使用扩展绘制来填充图像的左下部分。



Stable Diffusion 的工作原理:概述

 

Stable Diffusion 是用于高分辨率图像生成的模型。为了理解扩散模型的工作原理,而不深入复杂的数学原理,我们将一个 txt2img 稳定扩散模型分解为三个主要部分:

 

  1. 文本编码器:是一个基于 TransformerClipText 模型,采取和 GPT 一样的架构。Transformer 已经证明了对语言的良好理解,因此它们可以基于你文本提示的意图轻松地识别和转换。

  2. 图像信息生成器(基于文本信息的 UNET):这是扩散发生的地方。在这一部分中使用了 U-Net(Resnet-CNN 架构)网络,在推理之前该网络已经进行了训练。扩散理论可以分解为前向扩散和反向扩散两个主要过程。工作原理是首先通过逐渐添加高斯噪声来破坏训练数据,然后通过学习反转噪声来恢复数据。

  • 预处理阶段:正向扩散过程,通过不断添加高斯噪声来破坏训练数据,以生成训练样本,对应下图从右到左的过程。


图片来源(Ho 等人,2020 年)

 

  • 训练/推理阶段:反向扩散过程,模型学习从噪声中恢复数据,对应上图从左到右的过程。

 

  1. 图像解码器(VAE 解码器):接收图像信息生成器生成的向量,将其转换为图像,并将最终图像转换为所需的格式。


架构概述。图片来源:Ezequiel Lanza

 

BigDL

 

你可以使用上述的架构来获得图像,但是你是否注意到这个过程需要很长时间,有时需要几分钟?

 

这是因为我们使用的模型很大,但可以通过优化来减少处理时间。具体哪些部分可以进行优化,这里不再详细介绍。优化已经被集成到了 BigDL 中,其考虑了多种优化,例如 Intel® Optimization for TensorFlowIntel® Extension for PyTorchIntel® Distribution of OpenVINOIntel® AVX-512 等等。


BigDL 架构。图:Ruonan Wang

 

使用 BigDL 生成图像

 

现在轮到你了。我们将在这里为你提供步骤,或者你可以在 GitHub 上跟随实现。


安装

 

我们建议使用至少 16GB RAM 和 15GB 可用磁盘空间的 Intel 笔记本电脑/台式机。

 

为了访问我们提供的实现,建议使用新的虚拟环境运行,并安装必要的先决条件。


conda create -n sd python=3.8 conda activate sd pip install -r requirements.txt 
复制代码

启动 Web UI

打开你下载文件的文件夹,然后运行启动脚本:

python launch.py 
复制代码

 

随后应用程序将在你的设备上运行,并且你可以在浏览器中输入此地址:http://127.0.0.1:7860/


优化模型

 

在生成图像之前,你需要获取优化后的模型。 请转到“优化模型”选项卡执行操作。

 


现在你可以选择以下两个选项:

 

  • CPU-FP32 将为 CPU 生成优化后的 fp32 模型,后面会出现“CPU FP32”选项(例如“v2.1-base CPU FP32”)。

  • CPU / iGPU FP16 将为 CPU 和 iGPU 生成优化后的 fp16 模型,后面将出现两个“FP16”选项(例如“v2.1-base CPU FP16”,“v2.1-base CPU+iGPU FP16”)。

 

注意:这一步可能需要一些时间,因为应用程序会实时下载原始模型并为你进行优化。

 

模型优化完成后,你可以键入任何文本以生成原始图像。

 


注意:由于我们正在使用 Hugging Face 模型,你需要按照上图所示添加访问令牌

 

现在你的模型已准备就绪,你可以从“txt2img”选项卡开始生成图像。此外,应用程序还提供了其他选项。

 


总结


Stable Diffusion 是一种功能强大的工具,具有革命性的潜力,可应用于许多现实世界的场景。本文介绍的模型及其学习过程需要大量计算,Intel 提供的优化技术可以缩短处理时间。如果想获取更多来自 Intel 的开源内容,请访问 open.intel 或关注我们的 Twitter

 

作者简介:

 

Ezequiel Lanza 是英特尔开放生态系统团队的开源倡导者,热衷于帮助人们发现令人兴奋的人工智能世界。他还是经常参加人工智能会议的演讲者,创建使用案例、教程和指南,帮助开发人员采用像 TensorFlow 和 Hugging Face 这 样的开源人工智能工具。

 

Ruonan Wang 是英特尔 AIA 的人工智能框架工程师,目前专注于开发 BigDL-Nano,这是一个 Python 包,可以在英特尔硬件上透明加速 PyTorch 和 TensorFlow 应用程序。

 

原文链接:

 

https://medium.com/intel-tech/bigdl-tutorial-generate-your-own-images-from-text-with-stable-diffusion-63f45634ab2c

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-04-16 13:524281

评论

发布
暂无评论
发现更多内容

container 包详解

Rayjun

Go 语言

百度地图开发-搭建基础脚手架 01

Andy阿辉

android Android Studio 8月日更

手撸二叉树之另一棵树的子树

HelloWorld杰少

数据结构与算法 8月日更

apipost--接口流程化测试

与风逐梦

软件测试 接口测试 软件自动化测试

Windows Server 内存高排查

耳东@Erdong

windows 内存 Windows Server 8月日更 rammap

混合云时代来临,你的存储ready了吗?

焱融科技

云计算 分布式 高性能 云存储 混合云

微信业务架构图 & 学生管理系统

I see you

MySQL远程连接

一个大红包

8月日更

儿子教会我的态度

箭上有毒

8月日更

WEB常用HTML颜色代码表

入门小站

工具

判断是否为数组的 JavaScript 方法总结

编程三昧

JavaScript 数组 8月日更

自适应负载均衡算法原理与实现

万俊峰Kevin

负载均衡 微服务 负载均衡算法 Go 语言

如何构建 Spring Boot 12 因素应用

码语者

Sprint Boot

摸鱼小技巧之IDEA调试篇一~

4ye

Java debug 后端 IDEA 8月日更

springBoot中redis的自动装配

Rubble

8月日更

统计机器学习导论(一)

数据与智能

机器学习 统计

Linux之yum命令

入门小站

Linux

Go Channel实例剖析

非晓为骁

源码 channel Go 语言 实例分析

Battle:你会TLAB,我会逃逸分析

阿Q说代码

逃逸分析 8月日更 栈上分配 同步省略 标量替换

神策分析 iOS SDK 全埋点解析之启动与退出

神策技术社区

ios 代码 埋点 神策数据

多看了几套房

escray

生活记录 8月日更

极客时间架构实战营作业一

jjn0703

架构实战营

在openGauss上做开发?这个大赛拿出30万寻找开源的你

华为云开发者联盟

数据库 开源 信创 opengauss 鲲鹏

FusionInsight怎么帮「宇宙行」建一个好的「云数据平台」?

华为云开发者联盟

大数据 数据仓库 FusionInsight 云数据平台 LakeHouse

docker入门:elk环境安装记录

小鲍侃java

8月日更

通过 UIView 和 UIControl 实现的蒙层,哪种更简单?

fuyoufang

swift iOS 知识体系 8月日更

Go- if-else结构

HelloBug

if Go 语言 else

遇见低码:在价值中审视

华为云开发者联盟

ide 低代码 应用 开发语言 低成本

前端人员必会工具-apipost两分钟上手(2分钟玩转apipost)

Proud lion

大前端 测试 后端 Postman 开发工具

国产数据库的挑战与机遇

晨山资本

数据库 大数据 云原生 超融合

手把手教你写 Gradle 插件 | 数据采集

神策技术社区

程序员 埋点 数据化 神策数据

BigDL 教程:使用 Stable Diffusion 从文本生成你自己的图像_大数据_Ezequiel Lanza_InfoQ精选文章