🚀 Janus-Pro
Janus-Pro是一种新颖的自回归框架,它将多模态理解和生成进行了统一。该框架通过将视觉编码解耦为独立的路径,同时仍使用单一、统一的Transformer架构进行处理,解决了以往方法的局限性。这种解耦不仅缓解了视觉编码器在理解和生成任务中的角色冲突,还增强了框架的灵活性。Janus-Pro超越了以往的统一模型,其性能与特定任务模型相当甚至更优。它的简单性、高灵活性和有效性使其成为下一代统一多模态模型的有力候选者。
🚀 快速开始
Janus-Pro是一个统一的多模态理解和生成模型,它将视觉编码解耦,用于多模态理解和生成任务。它基于DeepSeek-LLM-1.5b-base/DeepSeek-LLM-7b-base构建。
Github仓库
✨ 主要特性
- 统一多模态理解和生成,解决了以往方法的局限性。
- 通过解耦视觉编码,缓解了视觉编码器在理解和生成任务中的角色冲突,增强了框架的灵活性。
- 超越了以往的统一模型,性能与特定任务模型相当甚至更优。
💻 使用示例
基础用法
单图像推理
以下是使用单图像进行视觉理解的示例:
import torch
from PIL import Image
import requests
from transformers import JanusForConditionalGeneration, JanusProcessor
model_id = "deepseek-community/Janus-Pro-1B"
messages = [
{
"role": "user",
"content": [
{'type': 'image', 'url': 'http://images.cocodataset.org/val2017/000000039769.jpg'},
{'type': 'text', 'text': "What do you see in this image?"}
]
},
]
processor = JanusProcessor.from_pretrained(model_id)
model = JanusForConditionalGeneration.from_pretrained(
model_id, torch_dtype=torch.bfloat16, device_map="auto"
)
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
generation_mode="text",
tokenize=True,
return_dict=True,
return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)
output = model.generate(**inputs, max_new_tokens=40, generation_mode='text', do_sample=True)
text = processor.decode(output[0], skip_special_tokens=True)
print(text)
高级用法
文本到图像生成
Janus还可以通过将生成模式设置为image
,根据提示生成图像,如下所示:
import torch
from transformers import JanusForConditionalGeneration, JanusProcessor
model_id = "deepseek-community/Janus-Pro-1B"
processor = JanusProcessor.from_pretrained(model_id)
model = JanusForConditionalGeneration.from_pretrained(
model_id, torch_dtype=torch.bfloat16, device_map="auto"
)
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "A dog running under the rain."}
]
}
]
prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(
text=prompt,
generation_mode="image",
return_tensors="pt"
).to(model.device, dtype=torch.bfloat16)
model.generation_config.num_return_sequences = 2
outputs = model.generate(
**inputs,
generation_mode="image",
do_sample=True,
use_cache=True
)
decoded_image = model.decode_image_tokens(outputs)
images = processor.postprocess(list(decoded_image.float()), return_tensors="PIL.Image.Image")
for i, image in enumerate(images["pixel_values"]):
image.save(f"image{i}.png")
📄 许可证
本代码仓库遵循MIT许可证。Janus-Pro模型的使用需遵循DeepSeek模型许可证。
📚 详细文档
模型概述
属性 |
详情 |
模型类型 |
统一的多模态理解和生成模型 |
构建基础 |
DeepSeek-LLM-1.5b-base/DeepSeek-LLM-7b-base |
多模态理解视觉编码器 |
SigLIP-L,支持384 x 384图像输入 |
图像生成分词器 |
来自此处,下采样率为16 |
引用信息
@article{chen2025janus,
title={Janus-Pro: Unified Multimodal Understanding and Generation with Data and Model Scaling},
author={Chen, Xiaokang and Wu, Zhiyu and Liu, Xingchao and Pan, Zizheng and Liu, Wen and Xie, Zhenda and Yu, Xingkai and Ruan, Chong},
journal={arXiv preprint arXiv:2501.17811},
year={2025}
}
联系我们
如果您有任何问题,请提出issue或通过service@deepseek.com与我们联系。