【Diffusion Model】动手实现扩散模型(一)

前言

官方教程:Diffusers

博客地址:小yi不困

本文主要内容:

  1. 认识 Diffusers 库;
  2. 基于 Hugging Face 的 Diffusers 库创建自己的扩散模型。

认识 Diffusers 库

介绍

Diffusers 是一种预训练扩散模型库,可用于生成图像、音频甚至是分子的3D结构。

Diffusers 库有三个主要组件:

  • diffusion pipelines :用于运行模型进行推理,diffusion pipline 是使用预训练的扩散系统进行推理的最简单方法,开箱即用(注意:pipelines 不能用于训练)。
  • noise schedulers :用于控制训练时如何添加噪声以及在推理过程中如何生成去噪图像的算法,平衡生成速度和质量。
  • 预训练的模型:可用作构建块,与 schedulers 结合,创建自己的端到端扩散系统。

使用方法

推荐在Colab上学习:https://colab.research.google.com/

安装必要的库。

!pip install --upgrade diffusers accelerate transformers

加载模型,创建一个 DiffusionPipeline 实例,并指定要下载的管道检查点。

from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)

在这里插入图片描述

DiffusionPipeline 会下载并缓存所有建模、标记化和调度组件。

在这里插入图片描述

查看 pipeline,会发现 Stable Diffusion 管道由 UNet2DConditionModel 和 PNDMShceduler 等组成。

在”修改“里的”笔记本设置“选择 GPU 硬件加速器,连接后试着修改提示来生成想要的图像吧。

# 在GPU上运行管道
pipeline.to("cuda")

# 将文本提示传递给pipeline以生成图像,然后访问去噪图像
image = pipeline("An image of a dog in Picasso style").images[0]
image

# 保存图像
image.save("dm_dog.png")

这是我的毕加索风格小狗~

在这里插入图片描述

不同的调度器具有不同的去噪速度和质量权衡,可以切换不同的调度器来找到最适合的。

# 将默认的PNDMScheduler替换为EulerDiscreteScheduler
from diffusers import EulerDiscreteScheduler
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)

# 使用from_config()方法加载
pipeline.shceuler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)
pipeline.to("cuda")
image = pipeline("An image of a dog in Picasso style").images[0]
image

新的小狗画像出现了。

在这里插入图片描述

根据官方教程来试试其它扩散模型吧。

动手创建扩散模型

在“使用方法”的实例中,实际只使用了四行代码(加载模型,创建管道实例,定义文本提示,保存生成的图像)就实现了图像生成。管道包含一个 UNet2DConditionModel 模型和一个 PNDMShceduler 调度器。

我们可以更换Unet模型和调度器来实现自己的扩散模型。

分解一个基本管道

基本知识

在这里插入图片描述

以 DDPM (Denoising Diffusion Probabilistic Models)为例,该模型主要为前向加噪扩散 (data

Diffusion Model种用于文本生成图像的核心方法,它在当前的研究中非常受欢迎。有几个基于扩散模型的算法,如Stable Diffusion、Disco-Diffusion、Mid-Journey和DALL-E2等。\[1\] 如果要简单实现Diffusion Model,可以考虑以下步骤: 1. 定义个潜在空间,通常是个低维度的向量空间。 2. 初始化个随机的潜在向量作为输入。 3. 使用扩散过程,在潜在空间中逐步更新潜在向量,使其逐渐接近目标图像。 4. 根据更新后的潜在向量生成图像。 5. 重复步骤3和4,直到生成的图像达到满意的质量。 这是个简化的实现过程,实际上,Diffusion Model的具体实现可能会更加复杂,涉及到更多的技术细节和优化方法。\[2\]\[3\]但是通过这个简单的实现,你可以开始尝试使用Diffusion Model生成图像。 #### 引用[.reference_title] - *1* *2* [AI艺术的背后:详解文本生成图像模型【基于 Diffusion Model】](https://blog.csdn.net/qq_32275289/article/details/126951463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Diffusion Model原理详解](https://blog.csdn.net/weixin_42620109/article/details/129156101)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值