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秒かかる(ハードウェアによる)

デプロイ要件

構成最小推奨
GPU16GB VRAM24GB+ VRAM
メモリ32GB64GB
ディスク30GB50GB

Janus-Pro は、コンシューマー向けGPU(RTX 4090など)でスムーズに動作し、マルチモーダル開発の入門に理想的な選択肢です。