cedro-blog

CLIPDraw で、文から絵を描かせる

1.はじめに

 2021年1月に、OpenAI が画像とテキストの類似度を測定できる CLIP を公開して以来、色々な画像生成系のネットワークと組み合わせて「文から絵を描く」のタスクが提案されています。このブログでも今まで、ディスクリートVAEBigGANStyleGANとの組み合わせをご紹介して来ました。

 今回ご紹介するのは、最適化プロセスを工夫することによって、「文から絵を描く」のタスクを今までとは違った生成過程で表現できる CLIPDraw という技術です。

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

2.CLIPDraw

 下記の図が、CLIPDraw のフレームワークです。CLIP は、画像エンコーダーとテキストエンコーダーから構成され、画像とテキストから同じ次元の特徴ベクトルを得ることができるので、そのCOS類似度を計算すると類似度が分かります。従って、これを利用して指定したテキストに最も適合した画像を求めれば良いわけです。

 今回のポイントは、初期値にランダムなベジェ曲線を使い、指定されたテキストに最も一致するように、勾配降下法でこれらの曲線を徐々に調整する手法を取ることです。途中で使われている Image Augumentation は、作成した絵の特徴ベクトルの値を安定させるためのものです。

 それでは、早速コードを動かしてみましょう。

3.コード

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

 まず、ライブラリーをインストールします。

 

 次に、Colab Notebook の左上にある、ランライム/「ランタイムを再起動」をクリックして下さい(クリックしないで次に進むと、後でエラーが発生しますので注意)。

 次に、ライブラリーのインポートとクラス・関数の定義を行います。

 

 次に、CLIPをロードします。

 

 そして、テキストから絵を生成します。5行目の prompt = に、テキストを入力して実行して下さい。ここでは、prompt = “Watercolor painting of an underwater submarine.”(水中の潜水艦の水彩画)としています。

 

 最後に生成プロセスの動画を作成します。作成した動画は以下に保存されます。diffvg/res/out_longer.mp4(ベジェ曲線調整)、diffvg/res/out_strokes_longer.mp4(ストローク)

 これは、「ベジェ曲線調整」の方の動画です。

 それでは、違うテキストでいくつか生成してみましょう。

prompt = "Watercolor painting of a woman holding a parasol."(傘をさした女性の水彩画)

prompt = "Watercolor painting of a woman riding a bicycle."(自転車に乗っている女性の水彩画)

 では、また。