VLM入門【画像を理解するAIの基礎知識】
目次
VLM(Vision Language Model)を使えば、AIが画像を理解して質問に答えられます。
この記事では、VLMの基礎知識とローカルでの活用方法を解説します。
VLMとは
概要
VLM(Vision Language Model) は、画像とテキストの両方を理解できるAIモデルです。
【従来のLLM】
テキスト → AI → テキスト
【VLM】
画像 + テキスト → AI → テキスト
LLMとの違い
| 項目 | LLM | VLM |
|---|---|---|
| 入力 | テキストのみ | 画像 + テキスト |
| 処理 | 言語理解 | 画像 + 言語理解 |
| 用途 | 文章生成・分析 | 画像分析・説明 |
| サイズ | 比較的小さい | 大きめ |
仕組み
【処理の流れ】
1. 画像を画像エンコーダーで処理
2. 画像の特徴を抽出
3. テキストと統合
4. 言語モデルで処理
5. 回答を生成
VLMでできること
画像の説明
【入力】写真 + 「この画像を説明して」
【出力】「この画像には青い空の下に
白い建物が写っています...」
質問応答
【入力】グラフ画像 + 「売上が最も高い月は?」
【出力】「7月が最も高く、約500万円です」
文字認識(OCR)
【入力】文書画像 + 「書かれている内容は?」
【出力】「書類のタイトルは...内容は...」
図面・地図の読み取り
【入力】地図画像 + 「主要な道路を教えて」
【出力】「画像には国道○号線が
南北に走っており...」
具体的な活用シーン
| シーン | 活用例 |
|---|---|
| 現場写真分析 | 状況の自動説明 |
| 図面読み取り | 仕様の抽出 |
| 帳票処理 | データ抽出 |
| 品質検査 | 異常検出 |
| 地図分析 | 地物の特定 |
主なVLMモデル
LLaVA
【特徴】
・オープンソース
・バランスの良い性能
・日本語対応あり
【サイズ】
7B, 13B, 34B
【Ollama】
ollama pull llava
ollama pull llava:13b
Qwen2-VL
【特徴】
・Alibaba開発
・日本語性能が高い
・高い画像理解能力
【Ollama】
ollama pull qwen2-vl
Llama 3.2 Vision
【特徴】
・Meta開発
・最新のVLM
・高性能
【Ollama】
ollama pull llama3.2-vision
比較
| モデル | 日本語 | 性能 | サイズ |
|---|---|---|---|
| LLaVA 7B | ○ | 良 | 4.5GB |
| LLaVA 13B | ○ | 優 | 8GB |
| Qwen2-VL | ◎ | 優 | 5GB |
| Llama 3.2 Vision | ○ | 優 | 6GB |
ローカルでの利用方法
Ollamaでの利用
# モデルのダウンロード
ollama pull llava
# 対話モードで起動
ollama run llava
# 画像を指定して質問
>>> /image C:\path\to\photo.jpg
>>> この画像を説明してください
Pythonからの利用
import requests
import base64
def analyze_image(image_path, prompt):
# 画像をBase64エンコード
with open(image_path, 'rb') as f:
image_data = base64.b64encode(f.read()).decode('utf-8')
# Ollama APIを呼び出し
response = requests.post(
'http://localhost:11434/api/generate',
json={
'model': 'llava',
'prompt': prompt,
'images': [image_data],
'stream': False
}
)
return response.json()['response']
# 使用例
result = analyze_image(
'photo.jpg',
'この画像を日本語で説明してください'
)
print(result)
バッチ処理
import os
def process_images(folder_path, prompt):
results = []
for filename in os.listdir(folder_path):
if filename.lower().endswith(('.jpg', '.png', '.jpeg')):
image_path = os.path.join(folder_path, filename)
result = analyze_image(image_path, prompt)
results.append({
'filename': filename,
'analysis': result
})
return results
# フォルダ内の画像を一括処理
results = process_images(
'photos/',
'この現場写真の状況を説明してください'
)
実践的な使い方
現場写真の分析
def analyze_site_photo(image_path):
prompt = """
この現場写真を分析してください:
1. 作業の状況
2. 確認できる設備・機材
3. 安全面で気になる点
4. 天候・時間帯の推測
"""
return analyze_image(image_path, prompt)
図面からの情報抽出
def extract_from_drawing(image_path):
prompt = """
この図面から以下を読み取ってください:
1. 図面のタイトル
2. 縮尺
3. 主な寸法
4. 特記事項
"""
return analyze_image(image_path, prompt)
帳票のデータ抽出
def extract_form_data(image_path):
prompt = """
この帳票から情報を抽出してください。
JSON形式で回答:
{
"日付": "",
"担当者": "",
"項目": [],
"金額": ""
}
"""
return analyze_image(image_path, prompt)
地図の分析
def analyze_map(image_path):
prompt = """
この地図画像を分析してください:
1. 表示されている地域
2. 主な道路・鉄道
3. 目立つ施設・建物
4. 地形の特徴
"""
return analyze_image(image_path, prompt)
活用のコツ
プロンプトの工夫
【具体的に指示する】
× 「画像を分析して」
○ 「画像に写っている建物の数と種類を教えて」
【形式を指定する】
「箇条書きで回答してください」
「JSON形式で回答してください」
【観点を示す】
「安全面の観点から分析してください」
「コスト削減の観点から評価してください」
画像の前処理
【効果的な画像】
・明るく鮮明
・対象が中央に
・適切な解像度
【避けるべき画像】
・暗すぎる/明るすぎる
・ぼやけている
・対象が小さすぎる
複数回の分析
def detailed_analysis(image_path):
# 1回目:全体概要
overview = analyze_image(image_path, "全体を説明して")
# 2回目:詳細分析
details = analyze_image(image_path, "詳細を分析して")
# 3回目:特定の観点
specific = analyze_image(image_path, "問題点を指摘して")
return {
'overview': overview,
'details': details,
'specific': specific
}
注意点と限界
VLMの限界
【苦手なこと】
・小さな文字の読み取り
・複雑な図面の完全な理解
・正確な数値の読み取り
・専門的な判断
【得意なこと】
・概要の把握
・大まかな分類
・説明文の生成
・簡単なOCR
精度について
【確認が必要なケース】
・数値データ
・専門的な内容
・重要な判断
・法的に重要な情報
【そのまま使えるケース】
・概要説明
・分類・タグ付け
・下書き作成
リソース要件
【必要スペック】
・GPU:8GB VRAM以上推奨
・メモリ:16GB以上
・ストレージ:モデルサイズ+α
【処理時間の目安】
・簡単な分析:数秒
・詳細な分析:10〜30秒
・バッチ処理:画像あたり10〜30秒
まとめ
VLMの特徴
・画像とテキストを同時に理解
・画像の説明・分析が可能
・OCR機能も備える
・ローカルで動作可能
活用シーン
・現場写真の分析
・図面の読み取り
・帳票のデータ抽出
・地図の分析
始め方
1. Ollamaをインストール
2. ollama pull llava
3. 画像を指定して質問
4. 徐々に活用範囲を広げる
関連記事
お問い合わせ
VLMの活用についてのご相談は、お気軽にお問い合わせください。
最終更新: 2025年1月