cedro-blog

CLIP reward によるきめ細やかな画像キャプションの生成

1.はじめに

 今回ご紹介するのは、ファインチューニングしたCLIPを活用することによって従来よりもきめ細やかな画像キャプショニングを可能にする CLIP reward という技術です。

*この論文は、2022.5に提出されました。

2.CLIP reward とは?

 下記の図が CLIP reward の概要です。左側は、CLIP Reward for Descriptive Captioning と呼び、 CLIP を活用した一般的な画像キャプショニングの学習の流れを表しています。画像と Captioning Model が生成した文 を CLIP に入力して類似度を計算し、その類似度が最大化する様に Captioning Model にフィードバックを掛けます。今回のポイントは、この左側の学習の前に右側の ファインチューニングをやっておくことです。

 右側のImprove Grammar by Finetuning Text Encoder を説明します。 Caption(参照キャプション)と Caption Noise処理(ランダム繰り返し/削除/挿入/交換/シャッフル)をして生成した Negative Caption を CLIP Text Enc(テキストエンコーダ)に入力します。次の Grammar Reward は バイナリクロスエントロピーを使用して Caption なら「1」、Negative Caption なら「0」と目標設定します。

 そして、Text Enc Grammer Reward を共同で Finetuning することによって CLIPに文法的な知識を注入することが出来、きめ細やかな画像キャプショニングが可能になります。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、セットアップを行います。device : cuda, reward : clips_grammar の設定で実行します。

 

 images フォルダに格納されているサンプル画像を見てみましょう。自分の用意した画像を使いたい場合は、このフォルダに画像(jpg)をアップロードして下さい。

 それでは、画像キャプショニングをやってみましょう。picture:に表示されたサンプル画像の中からファイル名を選んで記入し実行します。

[‘a line of three jockeys racing on their horses in the field with spectators behind them’]

 もう1つやってみましょう。今度は、picture : 43.jpgです。

[‘a young woman holding a cell phone with a cartoon character on the background’]

 結構細部まで画像キャプショニング出来ていますね。

 では、また。

(オリジナルgithub)https://github.com/j-min/CLIP-Caption-Reward