Chainerで画像のキャプション生成


概要
Chainerを使って画像のキャプション生成を実装しました。画像を入力するとその説明文を生成します。ソースコードは以下にあります。
https://github.com/dsanno/chainer-image-caption
以下の論文のアルゴリズムを使いました。
Show and tell: A neural image caption generator
すでにChainerでキャプション生成を実装されている方もいたので、そちらも参考にしました。
Image caption generation by CNN and LSTM ~ Satoshi’s Blog from Bloomington

キャプション生成モデル

論文で使用するキャプション生成モデルは大きく分けて3つのネットワークで構成されています。

画像をベクトルに変換する${rm CNN}$
${rm CNN}$には、GoogleNetやVGG_ILSVRC_19_layers等の画像分類用の既存のモデルを使います。
Word embedding(単語からベクトルへの変換)$W_e$
ベクトルを入力し、次の単語の出現確率を出力する${rm LSTM}$

実装に使用したモデル
論文そのままの実装だとGPUメモリが足りなかったので変更して実装しました。

画像をベクトルに変換する${rm CNN}$ (入力: 224 x 224 x 3次元 出力: 4096次元)
画像の特徴ベクトルを${rm LSTM}$の入力に変換する行列$W_I$ (入力: 4096次元 出力: 512次元)
Word embedding(単語からベクトルへの変換)$W_e$ (入力: 単語ID 出力: 512次元)
${rm LSTM}$ (入力 512次元 出力: 512次元)
${rm LSTM}$の出力を単語の出現確率に変換する$W_w$ (入力 512次元 出力: 次元)

以降の論文のモデルに基づいて説明しますが、実際に使用したモデルに置き換えるのは難しくないと思います。

モデルの学習
学習対象は$W_e$と${rm LSTM}$です。${rm CNN}$は学習済みのパラメータをそのまま使用します。
学習データは画像$I$と単語列${S_t} (t = 0…..この記事の続きを読む

サイト名: Qiita - Python

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する


Leave a Reply

Your email address will not be published.