速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

2023-04-16 13:524555

评论

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

Java程序经验小结:谨慎的使用本地方法

后台技术汇

28天写作

28 天带你玩转 Kubernetes-- 第二天(K8s 介绍)

Java全栈封神

Kubernetes k8s k8s入门 28天写作 k8s历史

大数据知识专栏1-Hadoop环境安装

小马哥

大数据 hadoop 28天写作

IDEA@Data注释使用

AI乔治

Java 架构 注解

技术人小故事-团队愿景篇-第2段

Ian哥

28天写作

架构师训练营第 1 期 - 大作业 2

Anyou Liu

架构师训练营第 1 期

堡垒机是什么?

微信视频号的不同 | 视频号28天(03)

赵新龙

28天写作

汽油车最简知识——28天写作Day2/28

mtfelix

28天写作 电动汽车

week7-总结

J

有关架构设计原则的总结

跳蚤

演讲还是辩论

将军-技术演讲力教练

28天写作

架构师训练营第 12 周课后练习

菜青虫

聊聊并发,进程通信方式,go协程简单应用场景

AI乔治

Java 架构

生产环境全链路压测建设历程 25:FAQ 7、8 正常业务保护和外调接口的处理

数列科技杨德华

28天写作

程序员练习算法的几个实用技巧

Phoenix

算法

架构师训练营第 12 周学习总结

菜青虫

MySQL在按照某个字段分组、排序加序号

AI乔治

Java MySQL 架构

新官上任,如何开始你的管理工作(上)

一笑

管理 28天写作

反对没有节制的加班文化

熊斌

管理 职场 工作思路 28天写作

MySQL慢查询(下):问题解决,干货总结

架构精进之路

MySQL MySQL 高可用 MySQL优化 28天写作

大作业2

蓝黑

4.5万字手把手教你实现MySQL TB级数据存储!!

冰河

MySQL 分布式 微服务 数据存储 mycat

创业也是要帮助他人突破认知 Jan 10, 2021

王泰

28天写作

架构师培训第二周课后作业

跳蚤

中华石衫 Elasticsearch 顶尖高手系列课程

escray

elasticsearch elastic 28天写作 死磕Elasticsearch

从大局着眼,立微处发力

张老蔫

28天写作

车轱辘话来回说怎么治

Justin

团队协作 沟通 28天写作

面试官:换人!赶快换人!连 CopyOnWriteArrayList 都没听过!

xcbeyond

Java 28天写作 CopyOnWriteArrayList

week7-homework

J

HDFS SHELL详解(3)

罗小龙

hadoop 28天写作 hdfs shell

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