AI多模态教程:DeepSeek多模态模型解析及实践指南

AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台,涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100+应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等干货。

AIGCmagic社区知识星球

截至目前,星球内已经累积了2000+AICG时代的前沿技术、干货资源以及学习资源;涵盖了600+AIGC行业商业变现的落地实操与精华报告;完整构建了以AI绘画、AI视频、大模型、AI多模态以及数字人为核心的AIGC时代五大技术方向架构,其中包含近500万字完整的AIGC学习资源与实践经验。

论文链接:Janus/janus_pro_tech_report.pdf at main · deepseek-ai/Janus · GitHub

前言

Janus 是 DeepSeek 团队提出的一个统一多模态理解与生成的模型,能够在单一模型中实现图像理解和文本到图像生成的双重任务。在多模态理解方面,Janus可以处理图像描述、视觉问答(VQA)、地标识别、文字识别等多种任务;在多模态生成方面,Janus也可以根据输入的文本描述生成高质量的图片。Janus-Pro是其最新的升级版本。

Janus的核心创新点在于将多模态理解与生成的视觉编码进行解耦,从而缓解了这两个任务潜在存在的冲突。Janus-Pro在此基础上,优化训练策略(包括增加训练步数、调整数据配比等)、增加数据(包括使用合成数据等)、扩大模型规模(扩大到70亿参数),从而同时提高了模型的多模态理解和生成能力。


Janus 模型架构

Janus和Janus-Pro结构一致,均使用两个独立的编码器来理解和生成图像,而不像之前的做法依赖单个编码器来处理这两项任务。对于图像理解,Janus 使用 SigLIP 编码器将图像转换为丰富的语义特征;而对于图像生成,Janus 使用 VQ Tokenizer 将图像转换为离散标记。这种解耦的设计带来两个收益:

1)将多模态理解与生成的视觉编码解耦,缓解了多模态理解和生成不同粒度需求的冲突;

2)理解和生成任务都可以分别采用各领域最先进的编码技术,可输入其他模态例如点云或音频数据,并使用统一的Transformer进行处理。

对于纯文本理解、多模态理解和视觉生成任务,Janus采用独立的编码方法将原始输入转换为特征,然后通过统一的自回归 Transformer 进行处理。具体来说:

文本理解:使用大语言模型(LLM)内置的分词器将文本转换为离散的 ID,并获取每个 ID 对应的特征表示。

多模态理解:使用 SigLIP 视觉编码器从图像中提取高维语义特征。这些特征从 2D 网格展平为 1D 序列,并通过一个两层MLP的理解适配器Adaptor将这些图像特征映射到 LLM 的输入空间。

视觉生成:使用 VQ Tokenizer将图像转换为离散的 ID。将 ID 序列展平为 1D 后,使用一个生成适配器Adaptor将每个 ID 对应的码本嵌入映射到 LLM 的输入空间。然后,将这些特征序列连接起来,形成一个多模态特征序列,随后输入到 LLM 中进行处理。

在纯文本理解和多模态理解任务中,Janus都是使用 LLM 内置的预测头进行文本预测;而在视觉生成任务中,Janus使用随机初始化的预测头进行图像预测。整个模型是使用 Next-Token-Prediction 的方式进行训练的,采用 causal attention mask,和 LLM 的训练方式一致,遵循自回归框架。


Janus代码解析

代码目录:PaddleMIX/paddlemix/models/janus at develop · PaddlePaddle/PaddleMIX · GitHub

(1)文本生成代码

调用模型的 generate 方法生成回答。

输入参数包括:

  • input_ids: 文本输入的 token ID 序列。
  • inputs_embeds: 处理后的嵌入向量。
  • position_ids: 位置 ID 序列。
  • attention_mask: 注意力掩码,用于指示哪些位置是有效的输入。
  • pad_token_id, bos_token_id, eos_token_id: 分别表示填充、开始和结束的特殊 token ID。
  • max_new_tokens: 最大生成的新 token 数量,这里设置为 128。
  • do_sample: 是否使用采样生成文本,这里设置为 False,表示使用贪婪解码。
  • use_cache: 是否使用缓存机制加速生成。

(2)图像生成代码

1.方法: generate

2.参数:

  • mmgpt:JanusMultiModalityCausalLM类就是一个Janus模型的实例,负责生成图像和文本。
  • vl_chat_processor: 多模态对话处理器,用于处理文本和图像的输入。
  • prompt: 输入的文本提示,用于引导图像生成。
  • temperature: 采样温度,控制生成的随机性。值越低,生成结果越稳定。
  • parallel_size: 并行生成的图像数量。
  • cfg_weight: Classifier-Free Guidance(CFG)权重,用于控制条件生成和无条件生成的混合比例。
  • image_token_num_per_image: 每张图像对应的 token 数量。
  • img_size: 生成图像的尺寸。
  • patch_size: 图像分割的 patch 尺寸。

3.步骤:

1)文本处理:使用vl_chat_processor的分词器将文本提示编码为输入ID,然后转换为Paddle张量。

2)初始化token:创建一个用于存储输入token和生成图像token的张量。对于并行生成的每个样本,都复制输入token,并在奇数索引的样本中插入填充token。

3)输入Embedding:将token转换为模型可以理解的Embedding形式。

4)生成图像token:通过一个循环,逐步生成图像的每个token。在每个步骤中:

  • ·更新position id 以反映当前token生成的位置序号。
  • ·使用模型的语言模型部分生成下一个token的概率分布。
  • ·根据条件和无条件生成的 logits 以及温度调整概率分布。
  • ·使用paddle.multinomial根据调整后的概率分布采样下一个token。
  • ·使用生成的token生成图像Embedding,并更新输入Embedding以用于下一次迭代。

5)解码图像:将生成的图像token解码为图像数据。

6)后处理和保存:将解码后的图像数据标准化为0-255之间的整数,并保存为JPEG文件。


Janus快速体验

飞桨星河社区教程链接:

【PaddleMIX】快速体验DeepSeek的多模态理解生成模型 - 飞桨AI Studio星河社区

我们以Janus-Pro-1B为例,在单卡V100上只需7G显存即可推理完成图像理解和图像生成。

下载 PaddleMIX代码库:

# clone PaddleMIX代码库
git clone https://github.com/PaddlePaddle/PaddleMIX.gitcd PaddleMIX

安装PaddlePaddle环境

# 提供三种 PaddlePaddle 安装命令示例,也可参考PaddleMIX主页的安装教程进行安装# 3.0.0b2版本安装示例 (CUDA 11.8)
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/# Develop 版本安装示例
python -m pip install paddlepaddle-gpu==0.0.0.post118 -f https://www.paddlepaddle.org.cn/whl/linux/gpu/develop.html# sh 脚本快速安装
sh build_paddle_env.sh

安装PaddleMIX环境

# 提供两种 PaddleMIX 依赖安装命令示例# pip 安装示例,安装paddlemix、ppdiffusers、项目依赖、paddlenlp
python -m pip install -e . --user
python -m pip install -e ppdiffusers --user
python -m pip install -r requirements.txt --user
python -m pip install paddlenlp==3.0.0b3 --user# sh 脚本快速安装
sh build_env.sh

图像理解命令

# Janus/Janus-Pro understanding
python paddlemix/examples/janus/run_understanding_inference.py \--model_path="deepseek-ai/Janus-Pro-1B" \--image_file="paddlemix/demo_images/examples_image1.jpg" \--question="描述一下这个图片。" \--dtype="bfloat16"

结果:

这张图片展示了一只红熊猫,它正趴在木板上,背景是一些树枝和绿色的树叶。红熊猫的毛色主要是棕色和白色,它的耳朵和脸部有明显的白色毛发,眼睛周围有白色的斑纹。红熊猫看起来非常可爱,它似乎在休息或观察周围的环境。

图像生成命令

# Janus/Janus-Pro generation
python paddlemix/examples/janus/run_generation_inference.py \--model_path="deepseek-ai/Janus-Pro-1B" \--prompt="江边有一艘船。" \--dtype="bfloat16"

结果:

PaddleMIX中已经复现了Janus 和 Janus-Pro 的推理流程,通过解析代码我们也更深入地理解模型的实现细节和技术创新,跟着教程链接一起动手实践一下吧!


推荐阅读

AIGCmagic社区介绍:

2025年《AIGCmagic社区知识星球》五大AIGC方向全新升级!

AI多模态核心架构五部曲:

AI多模态模型架构之模态编码器:图像编码、音频编码、视频编码

AI多模态模型架构之输入投影器:LP、MLP和Cross-Attention

AI多模态模型架构之LLM主干(1):ChatGLM系列

AI多模态模型架构之LLM主干(2):Qwen系列

AI多模态模型架构之LLM主干(3):Llama系列  

2025年《AIGCmagic社区知识星球》五大AIGC方向全新升级!

AI多模态模型架构之模态生成器:Modality Generator

AI多模态实战教程:

AI多模态教程:从0到1搭建VisualGLM图文大模型案例

AI多模态教程:Mini-InternVL1.5多模态大模型实践指南

AI多模态教程:Qwen-VL升级版多模态大模型实践指南

AI多模态实战教程:面壁智能MiniCPM-V多模态大模型问答交互、llama.cpp模型量化和推理


技术交流

加入「AIGCmagic社区」,一起交流讨论,涉及AI视频、AI绘画、数字人、多模态、大模型、传统深度学习、自动驾驶等多个不同方向,可私信或添加微信号:【lzz9527288】,备注不同方向邀请入群!

更多精彩内容,尽在AIGCmagic社区」,关注了解全栈式AIGC内容!

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

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

相关文章

【银河麒麟高级服务器操作系统实例】虚拟机桥接网络问题分析及处理

更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…

使用腾讯ncnn加速推理yolo v9对比opencv dnn

前面博客 【opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9 介】 绍了 yolov9 详细使用方式,重参数化、导出端到端模型,使用 torch、opencv、tensorrt 以及 paddle 的测试。 由于存在移动端推理部署的需求,需要进行加速处理&…

前端小食堂 | Day10 - 前端路由の时空裂隙

🕳️ 今日穿梭指南:两种维度の路由宇宙 1. Hash 模式:锚点の量子隧道 // 手动创建路由监听器 window.addEventListener(hashchange, () => {const path = location.hash.slice(1) || /; console.log(进入哈希宇宙:, path); renderComponent(path); }); // 编程…

C语言学习笔记-进阶(7)字符串函数3

1. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1中第⼀次出现的位置&#x…

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…

PHP:phpstudy无法启动MySQL服务问题解决

文章目录 一、问题说明二、解决问题 一、问题说明 我的Windows10系统,之前安装过MySQL5.7的版本。 然后,用phpstudy安装MySQL8,并启动MySQL8。 发生无法启动的情况。 二、解决问题 1、删除本地MySQL7的服务 net stop MySQL //这里的服务名…

Nginx(基础安装+配置文件)

目录 一.Nginx基础 1.基础知识点 2.异步非阻塞机制 二.Nginx安装 2.1安装nginx3种方式 1.包管理工具安装(yum/apt) 2.本地包安装(rpm/dpkg) 3.源码编译安装 3.1 源码编译安装nginx流程(ubuntu) 1.…

C++ Windows下屏幕截图

屏幕截图核心代码(如果要求高帧率,请使用DxGI): // RGB到YUV的转换公式 #define RGB_TO_Y(r, g, b) ((int)((0.299 * (r)) (0.587 * (g)) (0.114 * (b)))) #define RGB_TO_U(r, g, b) ((int)((-0.169 * (r)) - (0.331 * (g)) …

修改jupyter notebook的工作空间

今天,我之前R配置jupyter工作空间,讲了各种语言内核分配不同的工作空间,虽然是方便管理,但有个问题就是需要每次都进入C盘的配置文件找到notebook的工作空间设置路径打开修改嘛。 因此,今天我编写了一个python脚本&am…

江科大51单片机笔记【9】DS1302时钟可调时钟(下)

在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…

电商行业门店管理软件架构设计与数据可视化实践

一、行业痛点与核心诉求 在电商多平台运营成为主流的背景下,企业普遍面临三大管理难题: ​数据碎片化:某头部服饰品牌2023年运营报告显示,其分布在8个平台的162家门店,日均产生23万条订单数据,但财务部门需要5个工作日才能完成跨平台利润核算。​成本核算失真:行业调研…

创新算法!BKA-Transformer-BiLSTM黑翅鸢优化算法多变量时间序列预测

创新算法!BKA-Transformer-BiLSTM黑翅鸢优化算法多变量时间序列预测 目录 创新算法!BKA-Transformer-BiLSTM黑翅鸢优化算法多变量时间序列预测预测效果基本介绍BKA-Transformer-BiLSTM黑翅鸢优化算法多变量时间序列预测一、引言1.1、研究背景和意义1.2、…

leetcode 95.不同的二叉搜索树 Ⅱ

首先分析一下什么是二叉搜索树。因为我本科学习数据结构的时候就是单纯背了一下题库,考试非常简单。现在额外补充学一些之前自己没有学过的内容。有序向量可以二分查找,列表可以快速插入和删除。二叉搜索树可以实现按照关键码访问。call by key .数据表现…

数据安全防线:备份文件的重要性与自动化实践

在数字化时代,信息已成为企业运营和个人生活的核心资源。无论是企业的核心数据、客户的敏感信息,还是个人的珍贵照片、重要文档,这些数据一旦丢失或受损,都可能带来不可估量的损失。因此,备份文件的重要性不言而喻&…

碰一碰发视频系统之写卡功能开发了,支持OEM

一、引言 在碰一碰发视频系统中,NFC(Near Field Communication,近场通信)技术扮演着关键角色。其中,写卡功能是实现用户与系统便捷交互的重要环节,通过将特定的视频相关信息写入 NFC 标签,用户…

【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解+代码解析]

看似不起眼的日复一日,总会在某一天让你看到坚持的意义。​​​​​​云边有个稻草人-CSDN博客 hello,好久不见! 目录 一. 排序的概念及运用 1. 概念 2. 运用 3. 常见排序算法 二. 实现常见排序算法 1. 插入排序 (1&…

python爬虫系列课程8:js浏览器window对象属性

python爬虫系列课程8:js浏览器window对象属性 一、JavaScript的组成二、document常见属性对象三、navigator对象一、JavaScript的组成 JavaScript可以分为三个部分:ECMAScript标准、DOM、BOM。 ECMAScript标准:即JS的基本语法,JavaScript的核心,描述了语言的基本语法和数…

快速使用PPASR V3版不能语音识别框架

前言 本文章主要介绍如何快速使用PPASR语音识别框架训练和推理,本文将致力于最简单的方式去介绍使用,如果使用更进阶功能,还需要从源码去看文档。仅需三行代码即可实现训练和推理。 源码地址:https://github.com/yeyupiaoling/P…

cannon g3810打印机设置

现在AI这么厉害,是不是很少人来这里搜索资料了。 不过我还是写一下。 买了一台cannon g3810打印机。一直都用USB打印,今天突然想用手机打印。于是又折腾了两个小时,终于折腾完了。 步骤如下: [1]打开官网,下载佳能…

使用 Arduino 和 ThingSpeak 通过 Internet 进行心跳监测

使用 Arduino 和 ThingSpeak 通过 Internet 进行心跳监测 在这个项目中,我们将使用 Arduino 制作一个心跳检测和监测系统,该系统将使用脉搏传感器检测心跳,并在与其连接的 LCD 上显示 BPM(每分钟心跳次数)读数。它还将使用 Wi-Fi 模块ESP8266将读数发送到 ThingSpeak 服务…