VL开源模型实现文本生成图片

一、 基础知识

根据描述生成图片的视觉-语言模型(Vision-Language Models, VL 模型)是近年来多模态生成领域的热点研究方向。这些模型能够根据自然语言描述生成高质量的图像,广泛应用于艺术创作、设计辅助、虚拟场景构建等领域。

1  根据描述生成图片的 VL 模型

1.1 DALL·E 系列

模型简介

  • DALL·E:由 OpenAI 提出,基于 GPT-3 架构,能够根据文本描述生成高质量的图像。

  • DALL·E 2:DALL·E 的升级版,生成图像的分辨率和质量更高,支持更复杂的文本描述。

特点

  • 支持零样本生成(Zero-Shot Generation)。

  • 能够生成高度符合文本描述的图像。

  • 支持图像编辑(如修改图像中的特定部分)。

应用场景

  • 艺术创作、广告设计、虚拟场景构建等。

 1.2 Stable Diffusion

模型简介

  • 由 Stability AI 提出,基于扩散模型(Diffusion Model),能够根据文本描述生成高质量的图像。

  • 开源且可定制,支持用户训练自己的模型。

特点

  • 生成图像的分辨率高,细节丰富。

  • 支持文本到图像生成、图像修复、图像编辑等多种任务。

  • 计算效率较高,适合在消费级硬件上运行。

应用场景

  • 艺术创作、游戏设计、个性化内容生成等。

3. Imagen

模型简介

  • 由 Google 提出,基于扩散模型和大型语言模型(如 T5),能够根据文本描述生成高质量的图像。

  • 强调文本理解的准确性和图像生成的真实性。

特点

  • 生成图像的质量极高,细节逼真。

  • 支持复杂的文本描述。

  • 在文本-图像对齐方面表现优异。

应用场景

  • 广告设计、虚拟场景构建、教育辅助等。

4. CogView

模型简介

  • 由清华大学提出,基于 Transformer 架构,专门用于文本到图像生成。

  • 支持中文和英文文本描述。

特点

  • 对中文文本的支持较好。

  • 生成图像的分辨率较高。

  • 支持多种风格的图像生成。

应用场景

  • 中文内容创作、广告设计、教育辅助等。

5. MidJourney

模型简介

  • 由 MidJourney 团队开发,专注于艺术风格的文本到图像生成。

  • 通过 Discord 平台提供服务,用户可以通过文本指令生成图像。

特点

  • 生成图像具有独特的艺术风格。

  • 支持多种艺术风格(如油画、水彩、科幻等)。

  • 用户交互友好,适合非技术用户使用。

应用场景

  • 艺术创作、个性化内容生成、社交媒体等。

6. Parti (Pathways Autoregressive Text-to-Image)

模型简介

  • 由 Google 提出,基于自回归模型(Autoregressive Model),能够根据文本描述生成高质量的图像。

  • 强调生成图像的多样性和文本-图像对齐能力。

特点

  • 支持长文本描述。

  • 生成图像的多样性高。

  • 在复杂场景生成方面表现优异。

应用场景

  • 广告设计、虚拟场景构建、教育辅助等。

7. Make-A-Scene

模型简介

  • 由 Meta (Facebook) 提出,结合文本描述和用户绘制的草图生成图像。

  • 强调用户控制和生成图像的细节。

特点

  • 支持用户通过草图控制生成图像的布局。

  • 生成图像的细节丰富。

  • 适合需要高精度控制的应用场景。

应用场景

  • 艺术创作、设计辅助、虚拟场景构建等。

示例

  • 输入:文本 "A forest with a river running through it." 和用户绘制的草图。

  • 输出:一张符合描述和草图的森林河流图片。

8. VQGAN+CLIP

模型简介

  • 结合 VQGAN(一种生成对抗网络)和 CLIP(一种视觉-语言模型),能够根据文本描述生成图像。

  • 开源且易于定制。

特点

  • 生成图像的风格多样。

  • 支持用户自定义生成过程。

  • 计算资源需求较低。

应用场景

  • 艺术创作、个性化内容生成、社交媒体等。

2. 各模型需要的计算资源 

模型名称计算需求备注
DALL·E 系列需要大规模 GPU 集群,适合在云端运行。
Stable Diffusion中等可以在消费级 GPU 上运行,但高分辨率生成仍需较强算力。
Imagen基于大规模语言模型和扩散模型,计算需求较高。
CogView中等至高基于 Transformer,生成高分辨率图像时需要较强算力。
MidJourney中等通过云端服务提供,用户无需本地计算,但对服务器算力需求较高。
Parti基于自回归模型,生成高质量图像需要大量计算资源。
Make-A-Scene中等至高结合用户输入和生成模型,计算需求较高。
VQGAN+CLIP可以在消费级 GPU 甚至 CPU 上运行,计算需求最低。

二、VQGAN+CLIP 的使用示例

1. 前期准备:

1. 安装依赖

pip install torch torchvision ftfy regex tqdm clip
pip install torch torchvision
pip install taming-transformers

pip install pytorch_lightning==1.9.4  (taming-transformers 依赖于 pytorch_lightning

pip install git+https://github.com/openai/CLIP.git

2. 模型仅支持英文,若需要其他语言,需要安装多语言库(用于把其他语言转化成英文):

pip install multilingual-clip

2. 下载模型参数和配置:

2.1 模型权重 

  • vqgan_imagenet_f16_16384.ckpt
  • vqgan_imagenet_f16_1024.ckpt

2.2 VQGAN 配置文件: vqgan_imagenet_f16_16384.yaml 

  • vqgan_imagenet_f16_16384.yaml
  • vqgan_imagenet_f16_1024.yaml

3. 代码

import torch
import clip
from omegaconf import OmegaConf
from pytorch_lightning.callbacks import ModelCheckpoint
from taming.models.vqgan import VQModel
from torchvision import transforms
from torchvision.transforms.functional import to_pil_image# 加载 VQGAN 模型
def load_vqgan_model(config_path, model_path, device="cuda"):"""加载 VQGAN 模型:param config_path: VQGAN 配置文件的路径:param model_path: VQGAN 模型权重的路径:param device: 模型运行的设备(如 "cuda" 或 "cpu"):return: 加载好的 VQGAN 模型"""# 加载配置文件config = OmegaConf.load(config_path)# 初始化 VQGAN 模型model = VQModel(**config.model.params)# 将 ModelCheckpoint 添加到允许的全局变量列表中torch.serialization.add_safe_globals([ModelCheckpoint])# 加载模型权重,资源有限可以使用参数量小的模型state_dict = torch.load(model_path, map_location="cpu")["state_dict"]model.load_state_dict(state_dict, strict=True)# 将模型移动到指定设备model = model.to(device)model.eval()  # 设置为评估模式return model# 加载 CLIP 模型
device = "cuda" if torch.cuda.is_available() else "cpu"
clip_model, preprocess = clip.load("ViT-B/32", device=device)# 加载 VQGAN 模型
config_path = "vqgan_imagenet_f16_16384.yaml"  # 配置文件路径
model_path = "vqgan_imagenet_f16_16384.ckpt"  # 模型权重路径
vqgan_model = load_vqgan_model(config_path, model_path, device=device)# 定义文本描述
text_description = "A futuristic cityscape at night with neon lights"# 使用 CLIP 生成文本特征
text = clip.tokenize([text_description]).to(device)
with torch.no_grad():text_features = clip_model.encode_text(text)# 使用 VQGAN 生成图像
# 注意:VQGAN 本身不支持直接根据文本特征生成图像,需要结合其他方法(如优化过程)
# 计算资源有限的情况可以把num_steps调小一点50,image_size调小128
def generate_from_text_features(model, text_features, num_steps=50, image_size=128):"""根据文本特征生成图像(示例代码,需要结合优化过程):param model: VQGAN 模型:param text_features: 文本特征:param num_steps: 优化步数:param image_size: 生成图像的大小:return: 生成的图像(PIL 图像)"""# 初始化随机噪声图像noise = torch.randn(1, 3, image_size, image_size).to(device)noise.requires_grad_(True)# 优化器optimizer = torch.optim.Adam([noise], lr=0.01)# 优化过程for step in range(num_steps):optimizer.zero_grad()# 使用 VQGAN 编码和解码噪声图像quantized, _, _ = model.encode(noise)reconstructed_image = model.decode(quantized)# 将张量转换为 PIL 图像reconstructed_image_pil = to_pil_image(reconstructed_image.squeeze(0).cpu())  # 移除 batch 维度并转换为 PIL 图像# 使用 CLIP 的预处理函数preprocessed_image = preprocess(reconstructed_image_pil).unsqueeze(0).to(device)  # 添加 batch 维度并移动到设备# 使用 CLIP 提取图像特征image_features = clip_model.encode_image(preprocessed_image)# 计算损失(假设使用 CLIP 的相似度作为损失)loss = -torch.cosine_similarity(text_features, image_features).mean()# 反向传播和优化loss.backward()optimizer.step()print(f"Step {step + 1}/{num_steps}, Loss: {loss.item()}")# 将生成的图像转换为 PIL 图像generated_image = torch.clamp(reconstructed_image, -1, 1)  # 限制值范围generated_image = (generated_image + 1) / 2  # 反归一化到 [0, 1]generated_image = generated_image.squeeze(0).cpu()  # 移除 batch 维度并移动到 CPUreturn transforms.ToPILImage()(generated_image)# 生成图像
generated_image = generate_from_text_features(vqgan_model, text_features)# 保存生成的图像
generated_image.save("generated_cityscape.png")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯 之 第27场月赛总结

文章目录 习题1.抓猪拿国一2.蓝桥字符3.蓝桥大使4.拳头对决5.未来竞赛6.备份比赛数据 习题 比赛地址 1.抓猪拿国一 十分简单的签到题 print(sum(list(range(17))))2.蓝桥字符 常见的字符匹配的问题,是一个二维dp的问题,转化为对应的动态规划求解 力扣…

Ambari、Bigtop源码编译最新支持情况汇总

以下是目前的版本情况 支持了绝大部分的组件编译及安装 版本组件名称组件版本env 版本v1.0.5Ozone1.4.11.0.5Impala4.4.11.0.5Nightingale7.7.21.0.5Categraf0.4.11.0.5VictoriaMetrics1.109.11.0.5Cloudbeaver24.3.31.0.5Celeborn0.5.31.0.5v1.0.4Doris2.1.71.0.4v1.0.3Phoen…

仅靠prompt,Agent难以自救

Alexander的观点很明确:未来 AI 智能体的发展方向还得是模型本身,而不是工作流(Work Flow)。还拿目前很火的 Manus 作为案例:他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体,…

【Docker系列一】Docker 简介

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Sqoop 常用命令

Sqoop 是用于在 Hadoop 和关系型数据库(如 MySQL、Oracle 等)之间高效传输数据的工具。以下是常用的 Sqoop 命令及示例: CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键,用于唯一标识每一行name VAR…

连续型随机变量及其分布

连续型随机变量 数学公式可以看作一门精确描述事物的语言,比语言尤其是汉语的模糊性精确多了!离散型数据的处理可以通过枚举和相加进行处理。而连续型数据则没有办法这样处理。我们必须要通过函数和取值区间还有微积分计算。 [定义1&#x…

PostgreSQL_数据使用与日数据分享

目录 前置: 1 使用 1.1 获取前复权因子 1.2 查询股票的纵向数据 1.3 查询股票的横向数据 2 日数据分享(截止至:2025-03-21) 总结 前置: 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文。…

Rocky9.5基于sealos快速部署k8s集群

首先需要下载 Sealos 命令行工具,sealos 是一个简单的 Golang 二进制文件,可以安装在大多数 Linux 操作系统中。 以下是一些基本的安装要求: 每个集群节点应该有不同的主机名。主机名不要带下划线。 所有节点的时间需要同步。 需要在 K8s …

qt实现一个简单http服务器和客户端

一、功能简介 服务器&#xff1a; 登录功能、下载文件功能 客户端&#xff1a; 登录功能、下载文件功能、上传成绩功能 二、服务器代码 //HttpServer.h #ifndef HTTPSERVER_H #define HTTPSERVER_H#include <QMainWindow> #include <QTcpSocket> #include <QTc…

基于Python+Django的旅游管理系统

项目介绍 PythonDjango旅游管理系统 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括&#xff1a;首页、景点管理、门票管理、旅游资讯、在线反馈、。 - 后台功能包…

用数组模拟循环队列

设计一种循环队列&#xff0c;线性数据结构&#xff0c;其操作表现为 FIFO(先进先出)原则且队尾被连接在队首之后形成一个循环&#xff0c;称作“环形缓冲器” 循环队列的好处是可以利用这个队列之前使用过的空间&#xff0c;但是他的空间大小是固定的 循环队列我们使用单链表…

maven为什么发生依赖冲突?怎么解决依赖冲突?

maven为什么发生依赖冲突&#xff1f;怎么解决依赖冲突&#xff1f; 我们在开发的时候&#xff0c;偶尔会遇到依赖冲突的时候&#xff0c;一般都是NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError。打开搜索框又发现有这个类&#xff0c;明明就是引入进来了&…

从国家能源到浙江交通投资,全息技术在能源交通领域的创新应用

一、3D全息技术行业应用参数及设计制作要求 全息投影 全息投影技术通过激光器、全息片等设备&#xff0c;将物体的三维信息记录下来&#xff0c;并在特定条件下再现。应用参数包括投影距离、投影面积、投影亮度等。设计制作要求&#xff1a;高清晰度、高亮度、低噪音、稳定性好…

Adobe After Effects 操作

Adobe After Effects &#xff08;AE&#xff09;可以实现将多个元素进行合成&#xff0c;实现特殊效果。AE的项目文件是aep&#xff0c;可以将素材、层、效果等一切信息&#xff0c;保存在这个项目文件中。 AE的原理&#xff0c;和PS的原理非常类似。 操作界面 操作界面如…

Flutter使用自签证书打包ipa

在 Flutter 中使用自签证书打包 IPA 文件&#xff0c;可以通过以下步骤完成&#xff1a; 1. 准备自签证书 方式一 生成自签证书&#xff1a; 打开 钥匙串访问 应用。选择 证书助理 > 创建证书。按照提示填写证书信息&#xff0c;选择证书类型为 代码签名&#xff0c;并保存…

三.Go的第一个程序hello.go

新建hello.go,代码如下 package mainimport "fmt"func main() {fmt.Println("hello world") }编译hello.go 控制台终端为hello.go同级目录 执行 go build hello.go编译成功同级目录下生成 同名exe文件 也可以直接执行 go run hello.go解释如下 一 .…

WebLogic中间件常见漏洞

一、后台弱⼝令GetShell 1.环境搭建 cd vulhub-master/weblogic/weak_password docker-compose up -d 2.访问网站并登陆后台 /console/login/LoginForm.jsp 默认账号密码&#xff1a;weblogic/Oracle123 3.点击部署&#xff0c;点击安装&#xff…

【Unity3D】摄像机适配场景以及Canvas适配

目录 宽度不变策略 高度不变策略 宽度不变策略 开发分辨率 750*1334 (宽高比:0.56) 真机分辨率 1170*2532 (宽高比:0.46) 真机宽高比<开发宽高比&#xff0c;采用宽度不变策略 理由&#xff1a;小于代表真机高度比开发高度更大&#xff0c;因此不需要担心高度上…

Mysql笔记

目录 sql的DML 增加语句 删除语句和truncate 更新语句 replace语句 select查询语句 简单的查询 等值判断 不等判断 逻辑运算符 查询时的别名使用 常见的条件查询 分组 分组后筛选 结果排序 分页功能​​​​​​​ 分表 外键和多表关联 表与表之间的关联关系…

用Selenium+lxml库完成淄博链家网数据的爬取

一、淄博链家二手房网站地址 urlhttps://zb.lianjia.com/ershoufang/ 二、基本知识点总结 这个代码是一个使用 Selenium 和 lxml 库编写的网络爬虫&#xff0c;用于从链家网&#xff08;Lianjia&#xff09;的二手房列表页面中提取房屋信息。 代码结构 导入库&#xff1a; …