最新融合多模态的理解和生成的大一统transform架构,show-o模型部署

Show-o是由字节跳动和新加坡国立大学Show Lab共同研发的一个多模态大模型,统一了多模态理解和生成。

Show-o的创新之处在于它将自回归和离散扩散建模相结合,以适应不同和混合模态的输入和输出。

Show-o模型的架构基于预训练的大型语言模型(LLM),并采用了离散去噪扩散来模拟离散图像标记,简化了额外文本编码器的需求。

Show-o采用了统一的提示策略,将图像和文本标记化后形成输入序列,并通过全方位的注意机制处理不同类型的信号,结合了因果注意和全面注意,以适应性地混合和变化。

Show-o在自回归生成图像时所需的采样步骤大约减少了20倍,显著减少了计算资源的消耗,并提高了模型的应用灵活性。

Show-o还天然支持多种下游应用,如文本引导的图像修复和外推,而无需任何微调,进一步展示了其作为下一代基础模型的潜力。

其中github项目地址:https://github.com/showlab/Show-o。

一、环境安装

1、python环境

建议安装python版本在3.10以上。

2、pip库安装

pip install torch==2.2.1+cu118 torchvision==0.17.1+cu118 torchaudio==2.2.1 --extra-index-url https://download.pytorch.org/whl/cu118

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

3、show-o模型下载

git lfs install

git clone https://huggingface.co/showlab/show-o

4、show-o-w-clip-vit模型下载

git lfs install

git clone https://huggingface.co/showlab/show-o-w-clip-vit

5、magvitv2模型下载

git lfs install

git clone https://huggingface.co/showlab/magvitv2

、功能测试

1、运行测试

(1)图片理解的python代码
 

import os
from PIL import Image
from tqdm import tqdm
import numpy as np
import torch
import wandb
from models import Showo, MAGVITv2
from prompting_utils import UniversalPrompting, create_attention_mask_for_mmu, create_attention_mask_for_mmu_vit
from utils import get_config, flatten_omega_conf, image_transform
from transformers import AutoTokenizer
from models.clip_encoder import CLIPVisionTower
from transformers import CLIPImageProcessor
import conversation as conversation_lib# Set environment variables
os.environ["TOKENIZERS_PARALLELISM"] = "true"# Set up conversation template
conversation_lib.default_conversation = conversation_lib.conv_templates["phi1.5"]
SYSTEM_PROMPT = ("A chat between a curious user and an artificial intelligence assistant. ""The assistant gives helpful, detailed, and polite answers to the user's questions.")
SYSTEM_PROMPT_LEN = 28def get_vq_model_class(model_type):if model_type == "magvitv2":return MAGVITv2else:raise ValueError(f"model_type {model_type} not supported.")def initialize_wandb(config):resume_wandb_run = config.wandb.resumerun_id = config.wandb.get("run_id", None)if run_id is None:resume_wandb_run = Falserun_id = wandb.util.generate_id()config.wandb.run_id = run_idwandb_config = {k: v for k, v in flatten_omega_conf(config, resolve=True)}wandb.init(project="demo",name=config.experiment.name + '_mmu',config=wandb_config,)return run_iddef prepare_model_and_tokenizer(config, device):tokenizer = AutoTokenizer.from_pretrained(config.model.showo.llm_model_path, padding_side="left")uni_prompting = UniversalPrompting(tokenizer, max_text_len=config.dataset.preprocessing.max_seq_length,special_tokens=("<|soi|>", "<|eoi|>", "<|sov|>", "<|eov|>", "<|t2i|>", "<|mmu|>", "<|t2v|>", "<|v2v|>", "<|lvg|>"),ignore_id=-100, cond_dropout_prob=config.training.cond_dropout_prob)vq_model = get_vq_model_class(config.model.vq_model.type)vq_model = vq_model.from_pretrained(config.model.vq_model.vq_model_name).to(device).eval()vision_tower = CLIPVisionTower("openai/clip-vit-large-patch14-336").to(device)clip_processor = CLIPImageProcessor.from_pretrained("openai/clip-vit-large-patch14-336")model = Showo.from_pretrained(config.model.showo.pretrained_model_path).to(device).eval()return tokenizer, uni_prompting, vq_model, vision_tower, clip_processor, modeldef process_image(image_path, config, device):image_ori = Image.open(image_path).convert("RGB")image = image_transform(image_ori, resolution=config.dataset.params.resolution).to(device).unsqueeze(0)pixel_values = CLIPImageProcessor.preprocess(image_ori, return_tensors="pt")["pixel_values"]return image, pixel_values.squeeze(0)def generate_response(model, tokenizer, uni_prompting, vision_tower, pixel_values, image_tokens, question, device, configs):batch_size = 1if configs.model.showo.w_clip_vit:conv = conversation_lib.default_conversation.copy()conv.append_message(conv.roles[0], question)conv.append_message(conv.roles[1], None)prompt_question = conv.get_prompt().strip()input_ids_system = tokenizer(SYSTEM_PROMPT, return_tensors="pt", padding="longest").input_idsassert input_ids_system.shape[-1] == 28input_ids_system = input_ids_system.to(device)input_ids = tokenizer(prompt_question, return_tensors="pt", padding="longest").input_ids.squeeze(0)input_ids_combined = torch.cat([(torch.ones(1, 1) * uni_prompting.sptids_dict['<|mmu|>']).to(device),input_ids_system,(torch.ones(1, 1) * uni_prompting.sptids_dict['<|soi|>']).to(device),(torch.ones(1, 1) * uni_prompting.sptids_dict['<|eoi|>']).to(device),input_ids], dim=1).long()image_embeddings = vision_tower(pixel_values[None]).squeeze(0)image_embeddings = model.mm_projector(image_embeddings)text_embeddings = model.showo.model.embed_tokens(input_ids_combined)input_embeddings = torch.cat([text_embeddings[:, :2 + SYSTEM_PROMPT_LEN, :],image_embeddings,text_embeddings[:, 2 + SYSTEM_PROMPT_LEN:, :]], dim=1)attention_mask = create_attention_mask_for_mmu_vit(input_embeddings, system_prompt_len=SYSTEM_PROMPT_LEN)[0].unsqueeze(0)cont_toks_list = model.mmu_generate(input_embeddings=input_embeddings,attention_mask=attention_mask,max_new_tokens=100,top_k=1,eot_token=tokenizer.eos_token_id)else:input_ids = tokenizer('USER: \n' + question + ' ASSISTANT:', return_tensors='pt')['input_ids']input_ids = torch.cat([(torch.ones(1, 1) * uni_prompting.sptids_dict['<|mmu|>']).to(device),(torch.ones(1, 1) * uni_prompting.sptids_dict['<|soi|>']).to(device),image_tokens,(torch.ones(1, 1) * uni_prompting.sptids_dict['<|eoi|>']).to(device),(torch.ones(1, 1) * uni_prompting.sptids_dict['<|sot|>']).to(device),input_ids], dim=1).long()attention_mask = create_attention_mask_for_mmu(input_ids, int(uni_prompting.sptids_dict['<|eoi|>']))cont_toks_list = model.mmu_generate(input_ids=input_ids,attention_mask=attention_mask,max_new_tokens=100,top_k=1,eot_token=uni_prompting.sptids_dict['<|eot|>'])cont_toks_list = torch.stack(cont_toks_list).squeeze()[None]text_response = tokenizer.batch_decode(cont_toks_list, skip_special_tokens=True)[0]return text_responseif __name__ == '__main__':config = get_config()run_id = initialize_wandb(config)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")tokenizer, uni_prompting, vq_model, vision_tower, clip_processor, model = prepare_model_and_tokenizer(config, device)file_list = os.listdir(config.mmu_image_root)responses = ['' for _ in range(len(file_list))]images = []for i, file_name in enumerate(tqdm(file_list)):image_path = os.path.join(config.mmu_image_root, file_name)image, pixel_values = process_image(image_path, config, device)images.append(image)image_tokens = vq_model.get_code(image) + len(uni_prompting.text_tokenizer)for question in config.question.split(' *** '):text_response = generate_response(model, tokenizer, uni_prompting, vision_tower, pixel_values, image_tokens, question, device, config)responses[i] += f'User: {question}\nAnswer: {text_response}\n'images = torch.cat(images, dim=0)images = torch.clamp((images + 1.0) / 2.0, 0.0, 1.0) * 255.0images = images.permute(0, 2, 3, 1).cpu().numpy().astype(np.uint8)pil_images = [Image.fromarray(image) for image in images]wandb_images = [wandb.Image(image, caption=responses[i]) for i, image in enumerate(pil_images)]wandb.log({"multimodal understanding": wandb_images}, step=0)

未完......

更多详细的欢迎关注:杰哥新技术

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

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

相关文章

web基础之SSRF

1、内网访问 题目提示&#xff1a;访问位于127.0.0.1的flag.php&#xff1b;直接利用ssrf漏洞访问?url127.0.0.1/flag.php 2、伪协议读取文件 &#xff08;1&#xff09;题目提示&#xff1a;尝试去读取一下Web目录下的flag.php吧 &#xff08;2&#xff09;什么是伪协议&a…

【鸿蒙】HarmonyOS NEXT星河入门到实战6-组件化开发-样式结构重用常见组件

目录 1、Swiper轮播组件 1.1 Swiper基本用法 1.2 Swiper的常见属性 1.3 Swiper的样式自定义 1.3.1 基本语法 1.3.2 案例小米有品 2、样式&结构重用 2.1 Extend:扩展组件(样式、事件) 2.2 Styles:抽取通用属性、事件 2.3 Builder:自定义构建函数(结构、样式、事…

无人机视角-道路目标检测数据集 航拍 8600张 voc yolo

数据集名称&#xff1a; 无人机视角-道路目标检测数据集 数据集规模&#xff1a; 图像数量&#xff1a;8600张拍摄方式&#xff1a;航拍&#xff08;使用无人机拍摄&#xff09;标注格式&#xff1a;支持VOC和YOLO格式 数据集内容&#xff1a; 该数据集由无人机从空中拍摄的…

Android10源码刷入Pixel2以及整合GMS

一、ASOP源码下载 具体可以参考我之前发布的文章 二、下载相关驱动包 这一步很关键,关系到编译后的镜像能否刷入后运行 下载链接:Nexus 和 Pixel 设备的驱动程序二进制文件 如下图所示,将两个驱动程序上传到Ubuntu服务器,并进行解压,得到两个脚本: 下载解压后会有两…

5.qml 如何管理好控制台打印输出

c 在工程文件里面加入&#xff0c;这个只是禁用了c端的打印 DEFINES QT_NO_WARNING_OUTPUT DEFINES QT_NO_DEBUG_OUTPUT qml 在pro里面添加 #CONFIG - declarative_debug #CONFIG - qml_debug DEFINES QT_QML_DEBUG_NO_WARNING禁用qml打印,在main.cpp中引入 qputenv…

git为不同的项目设置不同的提交作者

方法1&#xff1a;找到项目的.git文件夹打开 打开config在下面添加自己作者信息 [user]name 作者名email 邮箱方法2&#xff1a;直接在.git文件夹设置作者名&#xff08;不使用–global参数&#xff09; git config user.name "xxxxx"如果想要修改之前提交的…

【idea-安装】

JetBrains官⽹ : https://www.jetbrains.com/ 1.下载idea安装包&#xff0c;下载旧一些的版本&#xff0c;避免新版本的不稳定。 下载下来的安装包是exe格式的&#xff0c;直接点击运行。 点击Next 2.选择要下载的位置&#xff0c;点击下一步。 3.选择⽣成快捷⽅式和建⽴⽂件…

uniapp数据缓存和发起网络请求

数据缓存 uni.onStorageSync同步的方式将数据存储到本地缓存 <template><button click"onStorageSync()">存储数据</button> </template><script setup>const onStorageSync () > {// 存储数据uni.setStorageSync(username, 张三)…

刷题活动(旋转和翻转)

前两天打了CCPC网络赛&#xff08;让打老实了&#xff09;&#xff0c;现在认识到了刷题的重要性&#xff0c;于是我开创了这么个栏目&#xff0c;我们一起刷一下题。 还是在ACwing网站上刷题 旋转和翻转 首先&#xff0c;申一下题目&#xff0c;输入一个数字 n &#xff0c;来…

【堆的应用--C语言版】

前面一节我们都已将堆的结构&#xff08;顺序存储&#xff09;已经实现&#xff0c;对树的相关概念以及知识做了一定的了解。其中我们在实现删除操作和插入操作的时候&#xff0c;我们还同时实现了建大堆&#xff08;小堆&#xff09;的向上&#xff08;下&#xff09;调整算法…

JVM 调优篇2 jvm的内存结构以及堆栈参数设置与查看

一 jvm的内存模型 2.1 jvm内存模型概览 2.2 pc计数器 它是一块很小的内存空间&#xff0c;集合可以忽略不记&#xff0c;也是运行速度最快的存储区域。不会随着程序的运行需要更大的空间。 在jvm规范中&#xff0c;每个线程都有它自己的程序计数器&#xff0c;是线程私有的&…

DIC技术助力新能源汽车主机厂力学测试研发与整车性能提升

在新能源汽车研发过程中&#xff0c;非接触式全视场应变DIC测量方案&#xff0c;越来越受到汽车主机厂的信赖与认可。传统接触式传感器&#xff0c;在精度、灵活性和数据处理能力上存在局限。DIC技术可提供精确、高效、全视场、便捷的非接触式测量解决方案。 在汽车研发阶段&a…

C语言知识体系思维导图

为了更清晰地描述C语言知识体系&#xff0c;笔者用一个结构化的思维导图来概括其主要组成部分。见下&#xff1a; 这个思维导图旨在提供一个全面而系统的视角&#xff0c;帮助学习者逐步构建扎实的C语言知识体系。随着学习的深入&#xff0c;可以根据个人兴趣和职业需求&#x…

《Diffusion Models Without Attention》CVPR2024

摘要 这篇论文探讨了在高保真图像生成领域&#xff0c;去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Models, DDPMs&#xff09;的重要性。尽管DDPMs在捕捉复杂视觉分布方面表现出色&#xff0c;但在高分辨率图像生成上面临显著的计算挑战。现有的方法&…

计算机毕业设计 《计算机基础》网上考试系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

大模型分离架构学习记录

GPU Direct GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联&#xff0c;例如 NVIDIA 的 A100 或 H800&#xff0c;它们内部的 NVLink 互联可以达到 600GB 甚至 900GB。这种内部互联与外部以太网网络集群设计之间存在耦合关系。GPU 是单机多网卡的&#xff0c…

创意无限:五款AI绘画应用,让艺术创作更简单

随着人工智能技术的不断进步&#xff0c;AI绘画已经成为一个不可忽视的现象。在短视频平台上&#xff0c;用户只需轻触屏幕&#xff0c;就能生成风格各异的画作&#xff0c;这种一键生成的特效迅速吸引了大量关注。AI绘画技术的快速发展&#xff0c;不仅让艺术创作变得更加便捷…

国产化数据库挑战及发展趋势

非国产数据库如Oracle、MySQL和MSSQL等在某些领域占据重要地位&#xff0c;但国产数据库的市场份额正在逐步提升&#xff0c;特别是在政策支持和市场需求的双重推动下&#xff0c;国产数据库的替代进程正在加速。 一、国产数据库市场规模 2024年中国数据库市场规模预计为543.1亿…

Python 数学建模——灰色关联度分析

文章目录 介绍原理代码实例 介绍 灰色关联度分析&#xff0c;可以反映两个序列 X ( k ) X(k) X(k) 和 Y ( k ) Y(k) Y(k) 之间的联系&#xff0c;用 r r r 表征。然而&#xff0c; r r r 的绝对大小并没有过多的意义&#xff0c;它的意义只在不同的 r r r 进行比较时体现。…

C语言蓝桥杯:语言基础

竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数&#xff0c;用于查找…