マルチモーダル開発
中級
DeepSeekマルチモーダル開発実践:Janus-Pro画像理解と生成
2026-08
16 分钟阅读
#Janus-Pro
#多模态
#图像理解
#图像生成
#视觉编码
Janus-Pro 概要
Janus-Pro-7B は、DeepSeek が 2025 年 1 月にリリースしたオープンソースの統合マルチモーダルモデルです。中核となる革新は、視覚エンコーディングの分離(Decoupled Visual Encoding)にあり、「理解」と「生成」の2つの経路にそれぞれ独立した視覚エンコーダを設計することで、従来の統合マルチモーダルモデルにおける理解と生成の品質のトレードオフを打破しました。
コアアーキテクチャ
| 経路 | エンコーダ | 機能 |
|---|
| 理解経路 | SigLIP エンコーダ | 高レベルのセマンティック特徴を抽出し、視覚理解に使用 |
| 生成経路 | VQ Tokenizer | 画像を離散トークンに変換し、画像生成に使用 |
画像理解:視覚質問応答
from transformers import AutoModelForCausalLM
from janus.models import MultiModalityCausalLM, VLChatProcessor
from PIL import Image
import torch
model_path = "deepseek-ai/Janus-Pro-7B"
vl_chat_processor = VLChatProcessor.from_pretrained(model_path)
tokenizer = vl_chat_processor.tokenizer
vl_gpt = AutoModelForCausalLM.from_pretrained(
model_path,
trust_remote_code=True,
torch_dtype=torch.bfloat16,
device_map="auto"
).eval()
# 画像質問応答
conversation = [
{
"role": "<|User|>",
"content": "\nこの画像には何が写っていますか?詳しく説明してください。",
"images": ["images/demo.jpg"],
},
{"role": "<|Assistant|>", "content": ""},
]
prepare_inputs = vl_chat_processor(
conversations=conversation,
images=[Image.open("images/demo.jpg")],
force_batchify=True
).to(vl_gpt.device)
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,
max_new_tokens=512,
do_sample=False,
)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(f"理解結果: {answer}")
画像生成:テキストから画像へ
# テキストから画像生成
gen_conversation = [
{
"role": "<|User|>",
"content": "画像を生成してください:かわいいオレンジ色の猫が窓辺に座っていて、日差しが降り注いでいます。",
},
{"role": "<|Assistant|>", "content": ""},
]
gen_inputs = vl_chat_processor(
conversations=gen_conversation,
force_batchify=True
).to(vl_gpt.device)
gen_inputs_embeds = vl_gpt.prepare_inputs_embeds(**gen_inputs)
gen_outputs = vl_gpt.language_model.generate(
inputs_embeds=gen_inputs_embeds,
attention_mask=gen_inputs.attention_mask,
pad_token_id=tokenizer.eos_token_id,
max_new_tokens=2048,
do_sample=True,
temperature=0.8,
)
# 生成された視覚トークンを画像にデコード
generated_tokens = gen_outputs[0]
decoded_image = vl_gpt.gen_vision_model.decode_code(
generated_tokens,
shape=[384, 384] # Janus-Pro 固定解像度
)
decoded_image.save("generated_cat.png")
print("画像は generated_cat.png として保存されました")
理解能力のシナリオ
| シナリオ | プロンプト例 | 出力 |
|---|
| 画像キャプション | "この画像を詳しく説明してください" | 自然言語による説明 |
| 視覚質問応答 | "画像には何人いますか?" | 人数の回答 |
| OCR文字認識 | "画像内のテキストを抽出してください" | テキスト内容 |
| 視覚推論 | "次に何が起こるか推測してください" | 推論分析 |
生成のコツ
- プロンプトは具体的に:シーン、スタイル、色、構図を記述
- スタイル指定に対応:"ゴッホ風"、"サイバーパンク"、"水彩画"
- 解像度は384×384固定で、超大画像には不向き
- temperature で創造性を制御:0.5は写実的、0.9は創造的
- 1回の生成に約5〜15秒かかる(ハードウェアによる)
デプロイ要件
| 構成 | 最小 | 推奨 |
|---|
| GPU | 16GB VRAM | 24GB+ VRAM |
| メモリ | 32GB | 64GB |
| ディスク | 30GB | 50GB |
Janus-Pro は、コンシューマー向けGPU(RTX 4090など)でスムーズに動作し、マルチモーダル開発の入門に理想的な選択肢です。