🚀 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までご連絡ください。