【人工智能】Transformers之Pipeline(八):文生图/图生图(text-to-image/image-to-image)

news2024/9/21 2:34:16

目录

一、引言 

二、文生图/图生图(text-to-image/image-to-image)

2.1 文生图

2.2 图生图

2.3 技术原理

2.3.1 Diffusion扩散模型原理

2.3.2 Stable Diffusion扩散模型原理

2.4 文生图实战

2.4.1 SDXL 1.0

 2.4.2 SD 2.0

2.5 模型排名

三、总结


一、引言 

 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型

今天介绍CV计算机视觉的第四篇,文生图/图生图(text-to-image/image-to-image)。transformers的pipeline只有图生图(image-to-image),没有(text-to-image),在实际应用中,文生图更加主流,通常先进行文生图,再进行图生图。所以本篇文章重点介绍文生图,附带进行图生图的讲解。本篇也未使用transformers的pipeline,而是使用DiffusionPipeline,目前主流的文生图、图生图方法。本文更加注重如何使用代码进行文生图、图生图,如果你的工作不需要部署api服务,推荐您使用AUTOMATIC1111的stable-diffusion-webui。

如果您是windows,建议搜索“秋叶大佬整合包”,一键部署属于你的文生图工作台。 

当然,如果您的土豪,推荐您使用midjourney,封装的更加简单易用。 

二、文生图/图生图(text-to-image/image-to-image)

2.1 文生图

输入提示词,模型理解提示词,生成图片。

2.2 图生图

图像处理与增强,通过给定的提示词,对源图像进行加工与处理,使其满足清晰度、定制等需求。

2.3 技术原理

我们以Stable Diffusion为例,讲讲文生图/图生图的原理。

2.3.1 Diffusion扩散模型原理

将到扩散模型,一定要了解DDPM: Denoising Diffusion Probabilistic Models(基于概率的降噪扩散模型),主要包含两个过程:

  • Diffusion Process (又被称为Forward Process) 扩散过程:对图片进行加噪,每一步都往图片上加入一个高斯分布的噪声,直到图片变为一个基本是纯高斯分布的噪声
  • Denoise Process(又被称为Reverse Process)降噪过程:基于UNet对含有噪音的图片进行逐步还原,直到还原至清晰可见的图片。

2.3.2 Stable ​​​​​​​Diffusion扩散模型原理

主要由AutoEncoder、扩散模型和Condition条件模块三部分组成。具体方法是

  •  首先需要训练好一个自编码模型(AutoEncoder,包括一个编码器 E和一个解码器D )。
  • 扩散过程:利用编码器对图片进行压缩,然后在潜在表示空间上做diffusion操作,
  • 文本处理:SD采用OpenAI的CLIP(Contrastive Language-Image Pre-Training语言图片对比学习预训练模型)进行文字到图片的处理,具体使用的是clip-vit-large-patch14。对于输入text,送入CLIP text encoder后得到最后的hidden states,其特征维度大小为77x768(77是token的数量),这个细粒度的text embeddings将以cross attention的方式送入UNet中。
  • 去噪过程:去噪实际上就是SD文生图模型的推理过程,通过UNet网络对图片/文字的embedding层层去噪,得到最终需要的图片。 

2.4 文生图实战

2.4.1 SDXL 1.0

首先要安装扩散diffusers、invisible_watermark、transformers、accelerate、safetensors等依赖库:

pip install diffusers invisible_watermark transformers accelerate safetensors  -i https://mirrors.cloud.tencent.com/pypi/simple

其次,引用diffusers库中的DiffusionPipeline类,下载基础模型stabilityai/stable-diffusion-xl-base-1.0和精炼模型stabilityai/stable-diffusion-xl-refiner-1.0。使用基础base(文生图)模型生成(噪声)潜在数据,然后使用专门去噪的refiner(图生图)细化模型进行高分辨率去噪处理。

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

from diffusers import DiffusionPipeline
import torch

base = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
base.to("cuda")
refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base.text_encoder_2,
    vae=base.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner.to("cuda")


# Define how many steps and what % of steps to be run on each experts (80/20) here
n_steps = 40
high_noise_frac = 0.8

prompt = "A beautiful sexy girl"

# run both experts
image = base(
    prompt=prompt,
    num_inference_steps=n_steps,
    denoising_end=high_noise_frac,
    output_type="latent",
).images

image = refiner(
    prompt=prompt,
    num_inference_steps=n_steps,
    denoising_start=high_noise_frac,
    image=image,
).images[0]
image.save("base+refiner.png")

python run_sd_xl_base_1.0+refiner.py运行后:

来看一下针对提示词"A beautiful sexy girl"生成的图片,好棒!​​​​​​​

 2.4.2 SD 2.0

安装的python库同SDXL 1.0,同样采用diffusers的DiffusionPipeline下载模型

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

from diffusers import DiffusionPipeline
import torch

#pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")
prompt = "a beautiful sexy girl"
image = pipe(prompt).images[0]
image.save("sd-xl.png")

python run_sd.py运行后 

来看一下效果:

对比来看,SDXL 1.0要更强一些,当然在实际的应用中,要花非常多的精力去抽卡、调正反向提示词,前往C站下载并使用别人训练好的lora与embedding。这是一门大学问。

2.5 模型排名

在huggingface上,我们将文生图(text-to-image)模型按下载量从高到低排序:在开源模型领域,stabilityai的stable-diffusion没有对手!闭源领域,独有Midjourney!

三、总结

本文对文生图/图生图(text-to-image/image-to-image)从概述、SD技术原理、SD文生图实战、模型排名等方面进行介绍,读者可以基于DiffusionPipeline使用文中的极简代码进行文生图的初步体验,如果想更加深入的了解,再次推荐您使用stable-diffusion-webui。

期待您的3连+关注,如何还有时间,欢迎阅读我的其他文章:

《Transformers-Pipeline概述》

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

《Transformers-Pipeline 第一章:音频(Audio)篇》

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

《Transformers-Pipeline 第二章:计算机视觉(CV)篇》

【人工智能】Transformers之Pipeline(五):深度估计(depth-estimation)​​​​​​​

【人工智能】Transformers之Pipeline(六):图像分类(image-classification)

【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)​​​​​​​

【人工智能】Transformers之Pipeline(八):图生图(image-to-image)

【人工智能】Transformers之Pipeline(九):物体检测(object-detection)

【人工智能】Transformers之Pipeline(十):视频分类(video-classification)

【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)

【人工智能】Transformers之Pipeline(十二):零样本物体检测(zero-shot-object-detection)

《Transformers-Pipeline 第三章:自然语言处理(NLP)篇》

【人工智能】Transformers之Pipeline(十三):填充蒙版(fill-mask)

【人工智能】Transformers之Pipeline(十四):问答(question-answering)

【人工智能】Transformers之Pipeline(十五):总结(summarization)

【人工智能】Transformers之Pipeline(十六):表格问答(table-question-answering)

【人工智能】Transformers之Pipeline(十七):文本分类(text-classification)

【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

【人工智能】Transformers之Pipeline(二十):令牌分类(token-classification)

【人工智能】Transformers之Pipeline(二十一):翻译(translation)

【人工智能】Transformers之Pipeline(二十二):零样本文本分类(zero-shot-classification)

《Transformers-Pipeline 第四章:多模态(Multimodal)篇》

【人工智能】Transformers之Pipeline(二十三):文档问答(document-question-answering)

【人工智能】Transformers之Pipeline(二十四):特征抽取(feature-extraction)

【人工智能】Transformers之Pipeline(二十五):图片特征抽取(image-feature-extraction)

【人工智能】Transformers之Pipeline(二十六):图片转文本(image-to-text)

【人工智能】Transformers之Pipeline(二十七):掩码生成(mask-generation)

【人工智能】Transformers之Pipeline(二十八):视觉问答(visual-question-answering)

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

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

相关文章

​【香菇带你学Mysql】Mysql超长执行sql定位和优化【建议收藏】

本文为MySQL数据库管理员和开发人员提供了一套全面的超时SQL定位和优化解决方案。通过合理运用这些方法和技巧,可以显著提升MySQL数据库的性能和稳定性,减少超时SQL语句的发生,确保数据库的高效运行。 0. 引言 最近某个Mysql数据库频繁告警…

统信UOS激活系统故障

统信UOS激活系统故障 1. 离线环境下如何激活系统 ①点击右下角的授权管理 ②点击“激活” ③输入激活码,并点击确定 ④离线环境下此时会弹出二维码,使用微信去扫码,按照提示确定激活 ⑤微信确定以后,激活端会显示成功 2. 激活过程中提示服务器连接失败 激活时如果提示服…

Java多商户新零售超市外卖商品系统

解锁新零售奥秘,多商户外卖超市商品系统大揭秘! 🌟 开篇:新零售时代的浪潮 在这个日新月异的数字化时代,新零售已悄然成为商业变革的新风口。想象一下,足不出户就能逛遍全城商家,心仪商品一键…

智算与大模型人才白皮书学习

目录 智算定义 智算的相关政策 公司的智算战略 服务提供者的定义及服务内容 智算人才需求 典型智算参与者的角色要求 业务流程全过程的分解 自己的定位 智算定义 智算通过智能化技术手段优化和提升技术系统的功能和性能,是为满足未来人工智能发展 和相关应用…

如何快速发现SIM卡托潜在问题?

手机SIM卡托通常是指放置SIM卡的卡槽或卡托。SIM卡托位于手机的侧面或顶部,用于插入SIM卡以连接到移动网络。通常,用户可以通过将SIM卡插入手机SIM卡托来激活手机服务、接收通话、发送短信和使用移动数据。SIM卡托一般设计成易于插拔,使用户能…

DataWhale AI夏令营-英特尔-阿里天池LLM Hackathon

英特尔-阿里天池LLM Hackathon 项目思路项目背景项目思路 Lora微调Qwen模型使用ipex_llm推理加速Gradio交互 项目名称:医疗问答助手 项目思路 项目背景 在当今医疗领域,智能问答系统正在逐步成为辅助医疗诊断的重要工具。随着自然语言处理技术的发展&…

基于STM32的智能家居灯光控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码灯光控制代码应用场景 智能家居灯光控制办公环境智能照明常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居技术的发展,灯光控制系统在提升家居生活品质…

尝鲜 HarmonyOS NEXT 开发环境搭建

申请好 HarmonyOS NEXT的开发套件白名单后,就可以下载最的开发套件了,最新的开发工具更新时间是2024-06-17,DevEcoStudio5.0-API12-x86-402。下载后是这样的: 我用的是 MAC PRO,所以下载的是 MAC 版,这里有…

VMware Linux 虚拟机设置了共享文件夹找不到如何解决?

如果在‌虚拟机中设置了‌共享文件夹但找不到,可能是因为没有正确执行挂载操作。挂载操作是将主机上的共享文件夹与虚拟机中的某个目录关联起来的步骤。 目前已经设置了共享文件夹,但是在Linux 上并没有找到 执行以下操作: mkdir /mnt/hgf…

云原生第一次作业

一、实验准备 1、准备一台rhel7的主机,并开启主机的图形 2、配置好可用IP 3、做kickstart自动安装脚本后面需要用到DHCP,关闭VMware DHCP功能 一、kickstart的安装和配置 安装 yum install system-config-kickstart 配置 安装httpd yum install httpd -y\n\n…

投资充电桩源码 共享充电桩投资理财源码 金融理财源码 最新理财投资源码php 投资理财网站源码

海外共享项目投资源码,投资充电桩源码 共享充电桩投资理财源码 金融理财源码 最新理财投资源码php 投资理财网站源码 源码下载:https://download.csdn.net/download/m0_66047725/89612921 更多资源下载:关注我。

软件测试学习笔记

测试学习 1. 测试流程2. Bug的提出什么是bugbug 的描述bug 级别 3. 测试用例的设计什么是测试用例测试用例应如何设计基于需求的设计方法等价类边界值场景法正交表法判定表法错误猜测法 4. 自动化测试回归测试自动化分类 5. 安装 webdriver-manager 和 selenium第一个web自动化…

SAP MM学习笔记 - 豆知识05 - Customer Exit 实例,MM01上定义Customer Exit 来Check评估Class

上一章讲了一些MM模块的豆知识。 - MM01中设定的安全在库和最小安全在库 - MM01/MMSC/Customize自动 扩张物料的保管场所 - MM01中定义生产订单的默认入库保管场所 - VA01受注票中设定禁止贩卖某个物料 SAP MM学习笔记 - 豆知识03 - 安全在库和最小安全在库,扩…

java使用opencv

一、windows安装opencv 下载地址:https://opencv.org/releases/ 下载后安装 本人安装目录 目录说明: build:基于windows构建 java:开发关注 x64、x86对应windows操作系统位数 sources:开源源码 二、java使用ope…

java之多线程篇

一、基本概念 1.什么是线程? 线程就是,操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。简单理解就是:应用软件中互相独立,可以同时运行的功能 2.什么是多线程? 有了多线…

高清无水印视频素材哪里找?分享几个热门的高清无水印素材网站

一个好的短视频离不开精彩的素材,但高清视频素材哪里找?今天小编就跟大家分享五个可以下载高清无水印短视频素材的网站,如果你还不知道从哪里可以下载高清视频素材,赶紧进来看看吧!~ 1、稻虎网 首推的是稻…

leetcode数论(​3044. 出现频率最高的质数)-质数判断

前言 经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字: 最多有 8 条路径可以选择&#xff1…

宝兰德JVM参数查看及优化

最近生产环境宝兰德服务总是莫名奇妙的宕掉,很是搞人心态(幸好是集群服务器多,总有一台提供服务),初步排查是内存溢出导致,需要进行宝兰德JVM进行调整 调整宝兰德(BES)JVM参数通常涉…

Spring源码解析(29)之AOP动态代理对象创建过程分析

一、前言 在上一节中我们已经介绍了在createBean过程中去执行AspectJAutoProxyCreator的after方法,然后去获取当前bean适配的advisor,如果还不熟悉的可以去看下之前的博客,接下来我们分析Spring AOP是如何创建代理对象的,在此之前…

38. 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离,编辑距离总结篇

确定dp数组以及下标的含义。dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。确定递推公式。这一类问题,基本是要分析两种情况:s[i - 1] 与 t[j - 1]相等;s[i - 1] 与 t[j - 1] 不相等。当s[i - 1] 与 t[j -…