LESSON 30分

ストーリー

田中VPoE
マルチモーダルAIの全体像を掴んだところで、今最も注目されているVision Language Models(VLM)を深掘りしよう
あなた
GPT-4VやClaude Visionですよね。画像を見て質問に答えられるモデルですか?
田中VPoE
そうだ。ただ「画像を見る」だけではない。テキストの指示と組み合わせて、画像の分析、比較、文字読み取り、さらにはコード生成まで行える。NetShop社の商品画像管理や品質検査に直結する技術だ
あなた
具体的にどうやって画像を「理解」しているんですか?
田中VPoE
その仕組みを理解することで、プロンプト設計やモデル選定が適切にできるようになる。見ていこう

VLMのアーキテクチャ

基本構造

VLMは大きく3つのコンポーネントで構成されます。

┌─────────────────────────────────────────┐
│           Vision Language Model          │
│                                         │
│  ┌─────────┐  ┌──────────┐  ┌────────┐ │
│  │ Visual  │  │Projection│  │  LLM   │ │
│  │ Encoder │→│  Layer   │→│ (言語  │ │
│  │(ViT等)  │  │          │  │ モデル) │ │
│  └─────────┘  └──────────┘  └────────┘ │
│       ↑                         ↑       │
│    [画像入力]              [テキスト入力]  │
└─────────────────────────────────────────┘
コンポーネント役割具体例
Visual Encoder画像をベクトル表現に変換ViT, CLIP Vision
Projection Layer画像ベクトルをLLMの入力空間にマッピングLinear層, Q-Former
LLMテキストと統合して推論・生成GPT-4, Claude, Gemini

処理フロー

1. 画像を受け取る
2. Visual Encoderでパッチ分割 → 特徴量抽出
   (例: 224x224画像 → 16x16パッチ × 196個 → 各パッチのベクトル)
3. Projection Layerで画像トークンに変換
4. テキストトークンと結合してLLMに入力
5. LLMが統合的に推論し、テキストを生成

主要VLMの比較

GPT-4V / GPT-4o (OpenAI)

from openai import OpenAI
import base64

client = OpenAI()

# 画像をBase64エンコードして送信
with open("product_image.jpg", "rb") as f:
    image_data = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "この商品画像を分析し、商品説明文を生成してください"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/jpeg;base64,{image_data}",
                        "detail": "high"  # low / high / auto
                    }
                }
            ]
        }
    ],
    max_tokens=1000
)

Claude Vision (Anthropic)

import anthropic
import base64

client = anthropic.Anthropic()

with open("invoice.pdf", "rb") as f:
    image_data = base64.b64encode(f.read()).decode()

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/png",
                        "data": image_data
                    }
                },
                {
                    "type": "text",
                    "text": "この請求書から、発行日、金額、宛先を抽出してJSON形式で返してください"
                }
            ]
        }
    ]
)

Gemini (Google)

import google.generativeai as genai
from PIL import Image

genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-pro-vision")

image = Image.open("product.jpg")
response = model.generate_content(
    ["この画像に含まれる全てのテキストを読み取ってください", image]
)

VLMの能力と限界

得意なタスク

タスク説明精度目安
画像キャプション画像の内容を自然言語で説明
VQA(視覚質問応答)画像に関する質問に回答
OCR(文字認識)画像内のテキスト読み取り中〜高
画像比較2枚の画像の差分を分析中〜高
チャート・グラフ解析グラフのデータを読み取り分析
レイアウト理解文書の構造を理解中〜高

注意すべき限界

1. ハルシネーション: 画像に存在しない情報を「見た」と報告する
2. 空間推論の弱さ: 正確な位置関係や距離の把握が苦手
3. 小さい文字の読み取り: 低解像度の画像では精度が落ちる
4. 数値の正確性: 数字の読み取りで誤りが生じることがある
5. 複数画像の比較: 細かい差分の検出は不得意

プロンプト設計のコツ

効果的なプロンプトパターン

【具体的な指示】
悪い例: "この画像を見てください"
良い例: "この商品画像から、商品名、色、サイズ、素材を抽出してJSON形式で出力してください"

【段階的な分析指示】
"この画像を以下の手順で分析してください:
1. 画像全体の概要を説明する
2. 商品の特徴を列挙する
3. 品質上の問題点があれば指摘する
4. 最終的な評価をA/B/Cで判定する"

【出力形式の指定】
"以下のJSON形式で出力してください:
{
  \"product_name\": \"商品名\",
  \"category\": \"カテゴリ\",
  \"defects\": [\"問題点のリスト\"],
  \"quality_score\": \"A/B/C\"
}"

画像解像度の設定

設定トークン消費用途
low少ない全体的な画像理解、分類
high多いOCR、詳細な分析、品質検査
auto自動判断汎用(推奨)

モデル選定ガイド

要件推奨モデル理由
汎用的な画像理解GPT-4oバランスが良い
詳細な文書分析Claude Vision長文コンテキストに強い
大量バッチ処理Geminiコストパフォーマンスが良い
オンプレ要件LLaVA / InternVLローカル実行可能
リアルタイム処理GPT-4o mini低レイテンシ

まとめ

項目内容
VLMの構造Visual Encoder + Projection Layer + LLM
主要モデルGPT-4V/4o, Claude Vision, Gemini
得意分野キャプション、VQA、OCR、レイアウト理解
注意点ハルシネーション、空間推論の弱さ、数値精度
プロンプト設計具体的指示、段階的分析、出力形式指定

チェックリスト

  • VLMの3つのコンポーネント(Visual Encoder, Projection Layer, LLM)を説明できる
  • 主要VLM(GPT-4V, Claude Vision, Gemini)のAPIを使ったコードを理解した
  • VLMの得意・不得意を把握し、適切なモデル選定ができる
  • 効果的なプロンプト設計パターンを理解した

推定所要時間: 30分