【Python×AI】5分で自作!画像検索・分類AI「CLIP」完全実装ガイド【コピペOK】

PythonでマルチモーダルAI「CLIP」を実装する完全ガイド 生成AIクリエイティブ
【Python×AI】5分で自作!画像検索・分類AI「CLIP」完全実装ガイド【コピペOK】

画像と言葉の壁を壊す「マルチモーダル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を活用して、単純作業から解放されましょう。

コメント

タイトルとURLをコピーしました