多模态(2):DeepSeek-Janus 统一多模态模型

大模型向量数据库云通信
  1. 统一多模态 ========

上一篇内容中,我们以 OpenAI 为例,进行了常见的多模态场景的实战,主要涉及了 DALL-E、TTS 和 GPT-4o 这几个大模型。 不知道大家有没有发现一个问题:通过这种方式实现的多模态,没有办法在同一个模型中同时完成多模态的输入输出,而是需要为每一种模态单独部署一个模型,这实际上会造成大量的资源浪费!例如,用户使用文生图功能时,只需要调用 DALL-E 模型,而此时 TTS 模型就是闲置状态,算力利用率非常低。

那有没有什么解决方案呢?这就是统一多模态大模型要解决的问题。

统一多模态大模型是近年来人工智能领域的重要发展方向,旨在通过一个统一的架构处理和融合多种模态的数据(如文本、图像、视频、音频等),实现跨模态的理解、推理与生成能力。这类模型的核心目标是打破传统单模态模型的局限性,通过多模态联合学习提升模型的通用性和智能化水平。

传统多模态模型通常依赖多个独立模块分别处理不同模态的数据(如单独处理文本和图像的编码器),而统一多模态大模型采用 单一模型架构 ,通过共享的神经网络参数和跨模态注意力机制,直接实现多模态数据的联合编码与解码。例如,输入可以是“文本+图像”,输出可以是“文本+视频”的组合。

Google 是最早开始研究统一多模态的团队之一,它早在2023年12月发布的 Gemini 1.0,就是一款 原生多模态(natively multimodal)大模型, 从训练初期即支持文本、图像、视频、音频、代码等多种模态的联合理解与生成,无需依赖单模态模型的拼接。它最新发布的 Gemini 2.0 的多模态能力非常强大,大家感兴趣可以去官网了解下。

picture.image

而在国内,DeepSeek 开源的 Janus 模型,也是通用多模态模型的佼佼者。下面我们就来介绍一下 Jenus。

  1. Janus-Pro 简介 ===============

Janus-Pro 是由 DeepSeek 团队开发的一款统一多模态大模型,于 2025.01.27 发布,它在上一个版本的基础上进行了全方位的增强,显著提高了多模态理解和视觉生成能力。

picture.image

在 Janus 的 Github 主页上,可以看到官方发布的评测结果:

  • 图片识别方面超越TokenFlow和开源的Llava架构等;
  • 在图片生成方面,根据权威榜单GenEval和DPG-Bench的评测结果, 超越了DALL-E 3和Stable Difusion 3 Medium。

picture.image

picture.image

picture.image

可以说,Janus-Pro 是目前国内最成熟的统一多模态大模型。

而且,Janus-Pro 发布了 1B 和 7B 两个版本,其中 1B 的版本因为模型规模较小、推理成本低,非常适合用于端侧部署的小模型,这对于智能设备开发多模态的功能来说,是一个非常大的福音。

  1. Janus-Pro 图像识别 =================

下面,我们就使用 Janus-Pro 进行一下图像识别功能的实战。为了便于演示,我使用 1B 这个版本,理论上 7B 的效果会比 1B 强一些。

由于 DeepSeek 官方并没有提供 Janus 的在线 API,所以我们需要将模型下载到本地,通过私有部署的方式进行调用 。话不多说,直接开始。

资源准备

首先需要把资源准备好,主要就是 GPU。这里我列了一个表格,给出了不同模型对于不同功能下的资源预估,大家可以作为参考。

picture.image

我们使用的是 1B 的模型,应该不需要太多资源,所以我在 AutoDL 上直接租一块 32G 显存的 GPU 应该就足够了。下面是具体的环境配置:

picture.image

模型代码下载

首先,从 Github 上将 Janus 的代码 clone 下来。

  
git clone https://github.com/deepseek-ai/Janus.git

picture.image

接下来,安装依赖

  
pip install -e .

picture.image

执行到这里,模型的代码及相关依赖就 ready 了。之后,我们需要下载模型的权重文件。

因为 Janus 是国产的 DeepSeek 出品的模型,所以我们从 ModelScope平台上下载是最方便的。

权重文件下载

想要从 ModelScope 上面下载模型,可以直接安装 ModelScope 的依赖库:

  
pip install modelscope

我们在 ModelScope 上面搜索,就可以找到 Janus-Pro-1B 这个模型。

picture.image

复制模型名称,直接下载到本地即可。因为权重文件比较大,所以这个过程可能比较耗时,请大家耐心等待。

  
modelscope download --model deepseek-ai/Janus-Pro-1B --local\_dir ./Janus-Pro-1B

picture.image

图像识别实战

至此,模型的代码和权重文件都有了,万事俱备,我们可以开始调用模型了。我准备了这样一张梗图,看看 Janus 是否能捕捉到其中的内涵。

picture.image

参考代码如下:

  
# 导入依赖  
import torch  
from transformers import AutoModelForCausalLM  
from janus.models import MultiModalityCausalLM, VLChatProcessor  
from janus.utils.io import load_pil_images  
  
# 指定模型路径  
model_path = "./Janus-Pro-1B"  
  
# 加载VLChatProcessor  
vl_chat_processor: VLChatProcessor = VLChatProcessor.from_pretrained(model_path)  
  
# 加载分词器  
tokenizer = vl_chat_processor.tokenizer  
  
# 加载vl_gpt  
vl_gpt: MultiModalityCausalLM = AutoModelForCausalLM.from_pretrained(  
    model_path, trust_remote_code=True  
)  
vl_gpt = vl_gpt.to(torch.bfloat16).cuda().eval()  
  
# 读取图片,构造Prompt  
image = "./梗图.png"  
question = "帮我解释下这张图的内涵,使用中文回答"  
conversation = [  
    {  
        "role": "<|User|>",  
        "content": f"<image_placeholder>\n{question}",  
        "images": [image],  
    },  
    {"role": "<|Assistant|>", "content": ""},  
]  
  
pil_images = load_pil_images(conversation)  
prepare_inputs = vl_chat_processor(  
    conversations=conversation, images=pil_images, force_batchify=True  
).to(vl_gpt.device)  
  
# 生成输入内容的Embedding,使得模型能够理解  
inputs_embeds = vl_gpt.prepare_inputs_embeds(**prepare_inputs)  
  
# 调用模型,生成响应  
outputs = vl_gpt.language_model.generate(  
    inputs_embeds=inputs_embeds,  
    attention_mask=prepare_inputs.attention_mask,  
    pad_token_id=tokenizer.eos_token_id,  
    bos_token_id=tokenizer.bos_token_id,  
    eos_token_id=tokenizer.eos_token_id,  
    max_new_tokens=512,  
    do_sample=False,  
    use_cache=True,  
)  
  
# 对响应内容进行解码  
answer = tokenizer.decode(outputs[0].cpu().tolist(), skip_special_tokens=True)  
  
# 打印最终结果  
print(f"{prepare_inputs['sft_format'][0]}", answer)

Janus 最终生成了如下回答:

  
这张图片通过对比展示了大脑在学习前后的变化。  
上半部分显示了一个正常的大脑,  
下半部分则幽默地展示了一个平滑、类似果冻的物体,  
暗示大脑在毕业后变得“平滑”或“没有皱纹”。  
图片上的文字意思是:“研究指出:每当你学会某些事情时,大脑的褶皱就会增加;  
我从学校毕业之后:”,这表明作者自嘲地说自己在毕业后停止了学习,  
导致大脑失去了复杂性。  
整个图片以幽默的方式表达了对于停止学习的调侃。

可以看出,即使是 Janus-Pro-1B 这么小的模型,也仍然具备了非常强的图像理解能力。

小结

本篇文章中,我们详细介绍了统一多模态的概念及优势,并且以 Janus-Pro 为例,演示了如何进行模型的本地部署与图像识别,可以看出,效果还是非常不错的。

多模态是目前大模型领域非常热门的一个方向,并且还在快速发展中,经常会有新的技术突破出现。其中,统一多模态是一条比较重要的技术路线,它力求通过一种通用的模型架构,来实现多种不同模态输入输出之间的互相转换,通过整合多种感知与生成能力,推动AI向更接近人类认知的多模态智能迈进。目前 Google 的 Gemini 和 DeepSeek 的 Janus 都在主推这种架构,我们可以持续关注相关的进展。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论