KNOWLEDGE - COLUMN ナレッジ - コラム

AIを使って画像にキャプションを付けてみよう

コラムイメージ

関連するソリューション

業務改革

AI

グローバルイノベーションセンター
テクニカルスペシャリスト 黒住 好忠

こんにちは、テクニカルスペシャリストの黒住です。


数多くの写真や画像ファイルを管理していると、目的の画像を「文章で検索したい」と思うことはありませんか?

数百枚の画像ファイルであれば目で見て探すことも可能ですが、ファイル数が数万~数十万枚以上になると、目で見ながら探す方法は現実的ではありません。とはいえ、画像を文章で検索するためには、「それぞれの画像に対して文章の説明を付けておく」必要があり、この作業を全て手作業で行う事も現実的ではありません。


そこで今回は、「画像に対する説明文(キャプション)を、AIを使って自動で生成する」方法について取り上げたいと思います。

 

キャプション生成プログラム

早速ですが、以下のコードで「画像に対してキャプションを自動生成」できます。

画像のキャプション生成をスクラッチで開発しようとすると非常に大変なのですが、事前学習済みのAIモデルを利用すれば、非常に簡単に、わずか数十行のコードで画像のキャプション生成を実現できます。

なお、今回は CoCa(Contrastive Captioner)と呼ばれるモデルを利用して画像のキャプションを生成しています。

# AIを使って画像にキャプションを付ける
import open_clip  # pip install open_clip_torch
import torch
from PIL import Image

# GPUが利用できる場合はGPUを使う
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# AIモデルの読み込み
model, _, transform = open_clip.create_model_and_transforms(
    "coca_ViT-L-14",
    pretrained="mscoco_finetuned_laion2B-s13B-b90k",
    device=device,
)

# 画像の読み込み(必要に応じてファイル名を変更)
img = Image.open("./img/01.jpg").convert("RGB")

# 画像からキャプションを生成
im = transform(img).unsqueeze(0).to(device)
with torch.no_grad(), torch.cuda.amp.autocast():
    generated = model.generate(im, seq_len=20)

# キャプションを人間が読める文章に変換して表示
caption = (
    open_clip.decode(generated[0].detach())
    .split("<end_of_text>")[0]
    .replace("<start_of_text>", "")
)
print(caption)

 

色々な画像のキャプション例

実際にどのようなキャプションが生成されるのか、いくつかの画像を使って試してみました。なお、キャプションは「英語」で出力されるため、キャプションの日本語訳もあわせて記載しています。
※「Caption」に続く文章が、実際にCoCoが生成した英文のキャプションです。

 

サンプルイメージ


Caption: a woman running in the snow with a dog.
日本語訳:雪の中を犬と一緒に走る女性。


最初は、雪の中を犬と一緒に走っているようなスナップ写真です。人の性別は、写真を細かく観察しないと判断しづらいのですが、AIではきちんと「女性」と認識しているようです。
厳密には「背負われて走っている」のですが、そこまでは判断できませんでした。


 

サンプルイメージ


Caption: a group of football players are playing a game.
日本語訳:フットボールの選手たちが試合をしている。


こちらはフットボールの写真ですね。AIが「ボールに着目しているのか、ヘルメットに着目しているのか、それとも選手たちのポーズに着目しているのか」分かりませんが、正しくフットボールの試合だと判断出来ています。


 

サンプルイメージ


Caption: a group of people sitting around a table with papers.

日本語訳:テーブルを囲んで書類を持っている人たち。

私の解釈では、チームメンバーがミーティングしている様子ですね。実際に手に持っているのは、タブレット端末やペン、マグカップだったりするのですが、AIのキャプションでは「書類」と判断されていますね。
厳密に言うと「書類」は手に持っていませんが、他の要素については正しく説明できています。


 

サンプルイメージ


Caption: a man holding a microphone and a guitar.

日本語訳:マイクとギターを持つ男性。

これはライブ中の写真だと思われます。キャプションは「マイクとギターを持つ男性」という感じで、見たそのままの状態が文章で表現されています。「歌っている」というキーワードも欲しいところですが、キャプションとしては正しい内容になっています。


 

サンプルイメージ


Caption: a cell phone sitting on top of a net bag.

日本語訳:網状の袋の上に置かれた携帯電話。


少しメッセージ性のある写真です。網状のバッグの上に、リサイクルマークが表示された携帯電話が置かれているため、エコロジーに関するメッセージが込められた写真になります。
キャプションは「網状の袋の上に置かれた携帯電話」となっており、やはり「見た状態をそのまま表現」した印象で、写真に込められたメッセージは読み取れていないようです。

なお、写真に込められたメッセージを読み取れないのは、AIモデルの学習に利用されたデータセットに「そのようなメッセージ性のある文章が含まれていなかったから」という理由によるものです。AIモデル自身がアイデアを膨らませて答えを導き出すことは無いため、学習していない内容については答えを導き出すことが出来ません)


 

サンプルイメージ


Caption: a person wearing red shoes is laying in a hammock.
日本語訳:赤い靴を履いた人がハンモックに寝そべっている。


特定の部分にクローズアップして、色々と見切れている写真です。膝から下だけが写った写真なので状況の判断が難しいと思っていたのですが、何の問題も無くキャプションを生成できています。部分的な写真にもかかわらず、「ハンモックに寝そべっている」という状態まで正確に文章化されていますね。


 

サンプルイメージ


Caption: a painting of a woman 's face on a wooden fence.
日本語訳:木の柵に描かれた女性の顔の絵。


木製のフェンスの写真ですが、そのフェンスの上に人の顔が描かれています。この写真に対して、AIがどのようなキャプションを生成するか興味があったのですが、「木の作に描かれた女性の顔の絵」という形で、見事に「木製のフェンス」と「そこに描かれた女性の顔」という2つの要素を正確に表現できています。
涙のような滴も描かれているので何らかのメッセージが込められた絵のようにも見えますが、さすがにそこまでは読み取れていないようです。


 

サンプルイメージ


Caption: a glass of liquid with a droplet of liquid in it.
日本語訳:液体の滴が入った、液体のグラス。


最後の写真は、人間が見てもよく分からない写真です。泡のような物が写っているので、グラスに入った液体の写真のようにも見えますが、はっきりとしたことは分かりません。
AIが生成したキャプションでは「液体が入ったグラスに、水滴が入っている」という感じになっており、きちんと「グラスや液体、水滴」などを認識しているようです。色も一般的な水の色と異なっていますが、これを液体だと判断できた点には驚きでした。

 

CoCaの応用など

今回は、「画像のキャプションを生成」する簡単な処理でしたが、生成されたキャプションの活用や、他のAIと組み合わせた様々な応用が考えられます。

例えば、撮り溜めた写真に自動でキャプションを設定して「文章で写真を検索」したり、キャプションに対して「感情(ネガティブ、ポジティブなど)を判断」したり、「キャプションを他の言語に変換」したり、様々な事が簡単に行えます。
また、上記のサンプル画像には載せていませんが、アニメ調の画像に対しても正しくキャプションを生成できるため、様々な種類(ジャンル)の画像に対してキャプション生成が利用できます。

CoCaは、最近流行の基盤モデル(Foundation Model)に位置づけられるモデルです。そのため、アイデア次第で幅広いタスクで活用出来るため、興味があれば色々と試してみてくださいね。

それではまた、次回のコラムでお会いしましょう。

 

リンク集

記事に関連する情報へのリンクです。(いずれも外部サイトへのリンクとなります)


当サイトの内容、テキスト、画像等の転載・転記・使用する場合は問い合わせよりご連絡下さい。

エバンジェリストによるコラムやIDグループからのお知らせなどを
メルマガでお届けしています。

メルマガ登録ボタン


黒住 好忠

株式会社インフォメーション・ディベロプメント フェロー

この執筆者の記事一覧

関連するソリューション

業務改革

AI

関連するナレッジ・コラム

AI倫理~AIとの向き合い方と制度~

ITエンジニアの現地作業 ミスを減らす!作業本番のポイントとは

NTTのIP網移行と、通信の未来とは