手把手教你通过PaddleHub快速实现输入中/英文本生成图像(Stable Diffusion)

news2024/10/6 10:36:06

近来,基于Diffusion的文图生成模型比较火,用户输入一句话,模型就可以生成一副对应的图像,还是很有意思的。本文记录了通过PaddleHub快速实现上述任务的过程,以供参考。

1、安装PaddlePaddle

PaddleHub底层依赖于百度自研的开源框架PaddlePaddle,可以根据官方提供的方式来快速安装,目前文档还是挺全面的。

官方链接如下:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html

安装前需要确定系统相关的环境,以下是我选择的安装命令:

python -m pip install paddlepaddle-gpu==2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

 2、安装PaddleHub

PaddleHub开源了较为丰富的预训练模型,涵盖大模型、CV、NLP、Audio、Video、工业应用主流六大品类的 360+ 预训练模型。这里我们主要是会用到其中的文图生成模型,包括Stable Diffusion和Disco Diffusion两种。

https://github.com/PaddlePaddle/PaddleHub/blob/develop/README_ch.md

!pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple

3、模型推理

PaddleHub对于模型封装的已经很完善了,通过几行代码即可快速调用文图生成模型的接口。以下是PaddleHub上的介绍,先来看看示例Stable Diffusion模型的效果。

官方示例链接如下:

https://aistudio.baidu.com/aistudio/projectdetail/4512600

Stable Diffusion是一种潜在扩散模型(Latent Diffusion), 属于生成类模型,这类模型通过对随机噪声进行一步步地迭代降噪并采样来获得感兴趣的图像,当前取得了令人惊艳的效果。相比于Disco Diffusion, Stable Diffusion通过在低纬度的潜在空间(lower dimensional latent space)而不是原像素空间来做迭代,极大地降低了内存和计算量的需求,并且在V100上一分钟之内即可以渲染出想要的图像。

from PIL import Image
import paddlehub as hub

# 导入模型
module = hub.Module(name='stable_diffusion')

# 生成图像
result = module.generate_image(text_prompts="A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.", output_dir='stable_diffusion_out')

# 将生成过程存成gif
result[0].chunks[-1].chunks.save_gif('beautiful_painting.gif')

输入:A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.

输出默认是512*512的图像,如下:

4、更多的测试

到这里,我们就可以开始测试更多的输入了,大胆的尝试吧。如果设置seed的话,每次运行会生成不一样的图。

输入:A tree on the hilltop in autumn.

 

 生成过程如下:

 输入:A man face.

 输入:A woman face.

5、尝试中文输入

上面提到的Stable Diffusion模型,暂时还不支持以中文作为输入。目前支持中文输入的模型给出了两个,都是Disco Diffusion的模型,生成图像的速度相对Stable Diffusion慢了很多,需要耐心等待。

官方示例链接如下:

https://aistudio.baidu.com/aistudio/projectdetail/4444998

示例代码如下:

​
from PIL import Image
import paddlehub as hub

# 导入模型
module = hub.Module(name='disco_diffusion_ernievil_base')

# 生成图像
result = module.generate_image(text_prompts="孤舟蓑笠翁,独钓寒江雪。", style='油画', width_height= [1280, 768], output_dir='孤舟蓑笠翁_油画', seed=1853109922)

# 将生成过程存成gif
​result[0].chunks.save_gif('孤舟蓑笠翁.gif')

输入:孤舟蓑笠翁,独钓寒江雪。

6、问题解决方案

在使用的过程中,可能会出现一些问题,这里也记录下来。

问题1:无法使用GPU

解决方案:有可能是安装的PaddlePaddle不是gpu版本,需要卸载安装gpu版。

先使用如下命令查看当前安装的paddle和相关套件的版本:

pip list| grep paddle

查询信息如下:

paddle-bfloat                      0.1.7
paddle2onnx                        1.0.0
paddlefsl                          1.1.0
paddlehub                          2.3.0
paddlenlp                          2.4.0
paddlepaddle-gpu                   2.3.2.post111

如果确实有CPU版本,可通过如下命令卸载:

pip uninstall paddlepaddle

之后再选择合适的gpu版本来安装。

参考资料:https://github.com/PaddlePaddle/PaddleHub/issues/1301

问题2:Segmentation fault (core dumped)

解决方案:可能是cudnn版本不匹配导致的,建议检查cuda、cudnn以及paddlepaddle-gpu的版本是否匹配。

参考资料:https://github.com/PaddlePaddle/PaddleHub/issues/1301


体验下来,会发现参数中的text_prompts很重要,并不是任意的输入都能生成很好的图。在某些情况下,可以明显感觉到效果不太好,也是后续研究中需要重点解决的问题。  

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

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

相关文章

ChatGPT工作提效之生成开发需求和报价单并转为Excel格式

ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 一、提出需求如何撰写百度地图标注开发的需求文档 二、针对性地连续提问推荐下一下百度地图标注文档的详细需求列表如何撰写百度地图标注开发的技术规范如何确定百度地图标注开发后的部署计划... 三、生成报价单四、运营…

【2023 · CANN训练营第一季】进阶班 应用开发深入讲解→模型推理

1 模型离线推理 各步要解析如下: Host&Device内存管理与数据传输: Host&Device上的内存申请与释放,内存间的相互拷贝;模型加载:将离线的om文件加载到Device上;在样例的资源初始化模块中进行。模型输入输出准备∶根据禹线om的输入输出,在Device…

微信小程序富文本组件mp-html

功能介绍 支持在多个主流的小程序平台和 uni-app 中使用支持丰富的标签(包括 table、video、svg 等)支持丰富的事件效果(自动预览图片、链接处理等)支持设置占位图(加载中、出错时、预览时)支持锚点跳转、…

【Linux】在Linux操作系统下对于权限的理解

目录 ❤️前言 正文 Linux下的不同用户 Linux的权限管理 文件访问者的分类 文件类型和访问权限 文件访问权限的修改方法 默认权限 目录权限 粘滞位 🍀结语 ❤️前言 大家好!今天这篇文章主要是关于Linux操作系统下对于各种权限的理解问题&#…

AI人工智能预处理数据的方法和技术有哪些?

AI人工智能 预处理数据 在人工智能(Artificial Intelligence,简称AI)领域中,数据预处理是非常重要的一环。它是在将数据输入到模型之前对数据进行处理和清洗的过程。数据预处理可以提高模型的准确性、可靠性和可解释性。 本文将…

Springboot +spring security,基于多种方式配置登录用户:memory、jdbc、MyBatis

一.简介 前面章节所有的用户信息(用户名和密码)都是基于配置文件配置的,这篇文章学习基于多种方式配置登录用户,比如: memory(内存)jdbcMyBatis 二.创建项目 如何创建一个SpringSecurity项目,前面文章已…

Python入门【序列、列表简介、列表的创建 、列表元素的增加、列表元素的删除 】(四)-全面详解(学习总结---从入门到深化)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

微服务架构初探

大家好,我是易安!我们今天来谈一谈微服务架构的前世今生。 我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的…

chatgpt赋能Python-pythonfalse

PythonFalse: Python中的False值 在Python编程语言中,布尔(Boolean)是一种基本数据类型,它只有两个值:True和False。这篇文章将讨论Python中的False值,并提供有关如何使用它的指南。 什么是PythonFalse PythonFalse…

chatgpt赋能Python-pythongil

Python GIL(全局解释器锁)介绍 Python GIL 是全局解释器锁(Global Interpreter Lock)的简称,它是 Python 解释器中的一个重要概念。GIL 的作用是确保任何时间只有一个线程在执行 Python 指令,以防止多个线…

jsonmodels.model.base

欢迎来到猫子酱的学习之旅 jsonmodels.model创建模型用法验证 validate()验证器 Validators自定义验证器(**)默认值转换为Python结构(和JSON)为您的模型创建JSON模式(***) (结合Draft7Validator)结构和对象…

蓝桥杯单片机串口通信学习提升笔记

今日得以继续蓝桥杯国赛备赛之旅: 有道是 “不知何事萦怀抱,醒也无聊,醉也无聊,梦也何曾到谢桥。” 那我们该如何 让这位诗人纳兰 “再听乐府曲 ,畅解相思苦”呢? 那就建立起串口通信吧! 我…

论文阅读_音频表示_W2V-BERT

信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: w2v-BERT: Combining Contrastive Learning and Masked Language Modeling for Self-Supervised Speech Pre-Training name_ch: W2V-BERT:结合对比学习和Mask语言建模进行自监督语音预训练 pape…

Redis实现全局唯一Id

Redis实现全局唯一Id 全局唯一Id简介二、Redis实现全局唯一Id实践2.1添加RedisIdWorker配置类2.2测试类 全局唯一Id简介 系统当中有些场景如果使用数据库自增ID就存在一些问题: id的规律性太明显受单表数据量的限制 场景分析:如果我们的id具有太明显的…

基于UDP和TCP套接字实现简单的回显客户端服务器程序

目录 1. 套接字 2. 基于UDP 套接字实现的简单客户端 服务器程序 3. 基于TCP套接字实现的简单客户端 服务器程序 1. 套接字 之前我们有分享到协议分层这个概念,其中就讲到上层协议调用下层协议,下层协议给上层协议提供支持,这里支持指的是就是socket套接字,它是操作系统给应用…

宁波市天一杯 --- Crypto wp

文章目录 secretrsa secret 题目: p134261118796789547851478407090640074022214132682000430136383795981942884853000826171189906102866323044078348933419038543719361923320694974970600426450755845839235949167391987970330836004768360774676424958554946…

坦克大战进阶--发射子弹

坦克大战进阶–发射子弹 1. 坦克大战0.3 1.1 分析 利用线程基础的知识,把坦克大战再次进阶一下:当我们按下J键,坦克就能够发射一颗子弹。 1.2 思路 当发射一颗子弹后,就相当于启动一个线程Mytank 有子弹的对象,当…

MSP432笔记5——外部中断

所用单片机型号:MSP432P401r 今日继续我的MSP432电赛速通之路。 外部中断是个很有用的配置 STM32几乎每个I/O口都能配置复用为外部中断 但MSP432并不是这样。 我经过查阅数据手册发现支持中断的引脚为: P1^0~ P1^7 P3^0~ P3^7 P5^0~ P5^…

Gateway服务网关入门

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…

【网络字节序】

网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送…