画像と言葉の壁を壊す「マルチモーダルAI」の衝撃
AIハック術師のハヤトです。
結論から言います。もしあなたが「大量の画像ファイルの中から、特定の写真を探すのに疲れている」なら、あるいは「ECサイトやブログの画像にタグ付けする作業を自動化したい」と考えているなら、この記事はあなたのためのものです。
今回は、OpenAIが開発した画期的なAIモデル「CLIP」を使って、「テキストで画像を検索できるAI」をPythonで自作します。
「AIモデルを作るなんて難しそう」と思いましたか?大丈夫です。Hugging Faceというライブラリを使えば、わずか数行のコードで実装できます。しかも、Google Colabを使えば無料で、今すぐブラウザ上で動かせます。
単なる知識ではなく、「明日から使える自分専用の画像処理ツール」を手に入れましょう。
1. CLIPとは何か?:AIが「目」と「言葉」を持った日
CLIP(Contrastive Language-Image Pre-training)は、2021年にOpenAIが発表したマルチモーダルAIモデルです。
従来のAIと何が違うのか?
これまでの画像認識AIは、人間が「これは猫」「これは犬」とラベルを付けたデータセット(教師データ)で学習していました。そのため、「猫」と教わっていない「ペルシャ猫」という種類を認識するのは苦手でした。
一方、CLIPはインターネット上の4億ペアもの画像とテキストを学習しています。これにより、以下のようなことが可能です。
- ゼロショット学習: 事前に学習していないカテゴリでも、自然言語で説明すれば認識できる。
- 意味の理解: 「犬」という単語だけでなく、「雪の中を走るゴールデンレトリバー」といった文脈を画像と結びつけられる。
CLIP vs 従来の画像認識
| 機能 | 従来の画像認識 (ResNetなど) | CLIP (マルチモーダル) |
|---|---|---|
| 学習データ | ラベル付き画像 (固定) | Web上の画像+テキスト (自然言語) |
| 柔軟性 | 低い (学習したラベルのみ) | 極めて高い (どんな言葉でも検索可) |
| タグ付け | 「dog」 | 「a happy dog running in snow」 |
| 応用先 | 工場検品、顔認証 | 画像検索、生成AIのプロンプト理解 |
この技術は、現在世界を席巻している画像生成AI(Stable Diffusionなど)の「プロンプトを理解する能力」の基礎にもなっています。
2. 独自の深掘り:なぜ今、CLIPを学ぶべきなのか?
ここからは、AIハック術師としての私の視点です。
CLIPを学ぶ最大のメリットは、「独自のクリエイティブ・ワークフローを構築できること」にあります。
例えば、あなたが数万枚の写真素材を持っているブロガーやデザイナーだとしましょう。既存のストックフォトサービスは便利ですが、自分のローカルフォルダにある過去の素材を探すのは至難の業です。
CLIPを使えば、以下のようなツールを自作できます:
- ローカル画像検索エンジン: フォルダ内の全画像をスキャンし、「夕暮れの海」と打つだけで該当する写真をピックアップする。
- 自動タグ付けボット: アップロードした画像に自動で「風景」「ビジネス」「青色」などのタグを付与し、SEOを強化する。
- 動画のシーン検索: 動画をフレームごとに画像化し、「誰かが笑っているシーン」だけを抽出する。
これらを外部の有料APIで行うとコストがかかりますが、CLIP(特に軽量モデル)なら手元のPCやGoogle Colabで無料で動かせます。これが「技術を武器にする」ということです。
3. 実践ガイド:やってみよう
それでは、実際にPythonでCLIPを動かしてみましょう。今回は最も手軽なGoogle Colabでの実行を想定しています。
Step 1: 必要なライブラリのインストール
まずは、Hugging Faceの transformers ライブラリと画像処理用の pillow をインストールします。
!pip install transformers pillow torch requests
Step 2: モデルのロードと画像準備
次に、OpenAIの学習済みモデル(openai/clip-vit-base-patch32)を読み込みます。これは精度と速度のバランスが良い標準的なモデルです。
from PIL import Image
import requests
from transformers import CLIPProcessor, CLIPModel
# モデルとプロセッサのロード
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# テスト画像のダウンロード(猫の画像を使用)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
# 画像を表示してみる(Colabの場合)
display(image)
Step 3: 画像とテキストのマッチング(推論)
ここがCLIPの真骨頂です。画像に対して、いくつかの「テキスト候補」を与え、AIに「どれが一番この画像に近いか」を判断させます。
# 候補となるテキストリスト
# AIにこれらの中から正解を選ばせます
choices = ["a photo of a cat", "a photo of a dog", "a photo of a car", "food"]
# 前処理と推論の実行
inputs = processor(text=choices, images=image, return_tensors="pt", padding=True)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # 画像とテキストの類似度スコア
probs = logits_per_image.softmax(dim=1) # 確率(%)に変換
# 結果の表示
print("画像に対する各ラベルの確率:")
for i, choice in enumerate(choices):
print(f"{choice}: {probs[0][i].item():.4f}")
実行結果の例
コードを実行すると、以下のような出力が得られます(数値は変動します)。
a photo of a cat: 0.9985
a photo of a dog: 0.0012
a photo of a car: 0.0001
food: 0.0002
CLIPが圧倒的な自信を持って「これは猫の写真だ(99.8%)」と判断していることがわかります。
Tips: よくあるエラーと対処法
- RuntimeError: … size mismatch…
画像サイズが大きすぎる、あるいは破損している場合に起きます。image.resize((224, 224))などでリサイズ処理を入れると安定します。 - GPUを使いたい場合
Colabのランタイム設定をGPUに変更し、model.to("cuda")とinputs.to("cuda")をコードに追加してください。処理速度が数倍になります。
4. まとめ
今回は、PythonとCLIPを使って、画像とテキストをつなぐマルチモーダルAIを実装しました。
ポイントの整理:
- CLIPは画像とテキストを同じ「意味の空間」で理解するAI。
- ラベル付けなしで、どんな言葉でも画像を検索・分類できる。
- Hugging Faceを使えば、Python数行で実装可能。
この技術を応用すれば、「自社商品の画像自動整理」や「スマートなフォトアルバム」など、アイデア次第で無限のツールが生み出せます。ぜひ、あなたの手持ちの画像で試してみてください。
AIを活用して、単純作業から解放されましょう。


コメント