画像を理解するAIの基礎知識
VLM入門
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での利用
bash
# モデルのダウンロード
ollama pull llava
# 対話モードで起動
ollama run llava
# 画像を指定して質問
>>> /image C:\path\to\photo.jpg
>>> この画像を説明してください
Pythonからの利用
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)
バッチ処理
python
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/',
'この現場写真の状況を説明してください'
)
実践的な使い方
現場写真の分析
python
def analyze_site_photo(image_path):
prompt = """
この現場写真を分析してください:
1. 作業の状況
2. 確認できる設備・機材
3. 安全面で気になる点
4. 天候・時間帯の推測
"""
return analyze_image(image_path, prompt)
図面からの情報抽出
python
def extract_from_drawing(image_path):
prompt = """
この図面から以下を読み取ってください:
1. 図面のタイトル
2. 縮尺
3. 主な寸法
4. 特記事項
"""
return analyze_image(image_path, prompt)
帳票のデータ抽出
python
def extract_form_data(image_path):
prompt = """
この帳票から情報を抽出してください。
JSON形式で回答:
{
"日付": "",
"担当者": "",
"項目": [],
"金額": ""
}
"""
return analyze_image(image_path, prompt)
地図の分析
python
def analyze_map(image_path):
prompt = """
この地図画像を分析してください:
1. 表示されている地域
2. 主な道路・鉄道
3. 目立つ施設・建物
4. 地形の特徴
"""
return analyze_image(image_path, prompt)
活用のコツ
プロンプトの工夫
具体的に指示する
- × 「画像を分析して」
- ○ 「画像に写っている建物の数と種類を教えて」
形式を指定する
- 「箇条書きで回答してください」
- 「JSON形式で回答してください」
観点を示す
- 「安全面の観点から分析してください」
- 「コスト削減の観点から評価してください」
画像の前処理
効果的な画像
- 明るく鮮明
- 対象が中央に
- 適切な解像度
避けるべき画像
- 暗すぎる/明るすぎる
- ぼやけている
- 対象が小さすぎる
複数回の分析
python
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. 徐々に活用範囲を広げる
関連記事
