TargetCLIPで、画像のスタイルを転送する

1.はじめに

 今まで、ある画像から別の画像へ色やテクスチャを転送する「スタイル転送」という技術がありましたが、今回ご紹介するのはもっと自然なスタイル転送を可能にする「TargetCLIP」と言う技術です。

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

2.TargetCLIPとは?

 TargetCLIPは、ある画像の概念的な「スタイル」と別の画像の客観的な「コンテンツ」を全く新しい画像に組み合わせる技術です。この技術は、画像を生成するStyleGAN2とCLIPが持っている画像を特徴ベクトルに変換するモジュールを組み合わせることによって実現されています。

 2つの損失関数を使用します。1つ目は、ターゲット画像とソース画像をそれぞれCLIPでエンコードしたベクトルのCOS類似度をできるだけ上げるような関数。2つ目は、ソースの変換前後の画像をそれぞれCLIPでエンコードしたベクトルのCOS類似度をできるだけ上げるような関数です。

 この2つの損失関数を最適化することによって、下記のような結果が得られます。

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

3.コード

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

 最初に、セットアップをおこないます。まず、画像から逆算してStyleGAN2のベクトルを求めるためのフレームワークe4eをセットアップします。

 続いて、TargetCLIP本体をセットアップします。

 サンプル画像を読み込みます。自分の用意した画像を読み込む場合は、TargetCLIP/picフォルダーに画像を保存し、image_nameをそのファイル名に変更してください。ここでは、’./TargetCLIP/pic/01.png’ を指定しています。

 顔を所定の位置で切り取り水平にする処理(align処理)を行い、その画像を表示します。

 align処理した画像からStyleGAN2のベクトルを逆算で求めます。そして、そのベクトルで生成した画像とオリジナル画像を並べて表示します。右が逆算、左がオリジナルの画像です。

 スタイルを転送するためのターゲットの画像を選択します。’Elsa’, ‘Joker’など9種類のターゲットが用意されています。ここでは、’Elsa’を選択します。

  変換係数を設定してスタイルを転送します。そしてその結果を表示します。

 変換係数を徐々に変化させたときの静止画から動画を作成します。作成した動画は、./TargetCLIP/output.mp4 に保存されます。

 作成した動画を再生します。

 どうでしょうか。実写にディズニープリンセスのスタイルが上手く転送されているのが分かると思います。

 では、また。

(オリジナルgithub) https://github.com/hila-chefer/TargetCLIP

4 件のコメント

  • 先生の作るipynbと解説がとても有益です!
    このレポジトリでは独自の画像をtargetにすることは困難(学習が必要)ですよね。
    Stargan-v2でトレーニング済みモデルを使ったスタイル転送(厳密には合成?)を取り扱う予定はありませんか。
    Celeb-Aを使って学習したモデル等に日本人の顔を入力して出力した結果と手順を拝見したいです。

    • 出川さん
      独自の画像をターゲットにするのに学習は必要ありません、e4eで潜在変数(1,18,512)に変換するだけです。コードを少し書き換えれば十分できますので、トライしてみては。
      それは面倒だということであれば、次回2枚の実写の顔画像をブレンドする手法をご紹介するので、それをお楽しみに!

  • ご返信ありがとうございます!

    左様でしたか。
    コードからご指摘の事実を伺い知ることすらできず、大変失礼しました。
    私はプログラミングが大の苦手で、それが故に先生の作るノートブックやGoogle Colabの存在が有難い限りです。
    なおも先生のご厚意に甘んじて恐縮ですが、実写の顔画像をブレンドする手法のご紹介を是非お願い致します!

    e4eについては過去の記事(http://cedro3.com/ai/e4e/)で概要は掴めたものの、潜在変数(1,18,512)に変換できる該当箇所の特定までは至りませんでした。
    (#@markdown Upload an image to ~”で始まるコードセルに記述するのかと推測しますが、見当違いですかね。)

  • 過去の記事を拝読し、色々と察しました。
    独自の画像を用いる場合には、潜在変数を取得してNampyを作る工程を踏まないといけないんですね。
    それに伴うコードの書き換えには自信がありません。
    大人しく、実写画像×実写画像のブレンド(StyleMixing)についての記事が投稿される時を待つことにしますね。

    P.S./
    BlendGANも試しました!
    こちらは手元の画像での試用は容易だったものの、AAHQを用いているので絵画調になるんですね。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

    ABOUTこの記事をかいた人

    アバター

    ディープラーニング・エンジニアを趣味でやってます。E資格ホルダー。 好きなものは、膨大な凡ショットから生まれる奇跡の1枚、右肩上がりのワクワク感、暑い国の新たな価値観、何もしない南の島、コード通りに動くチップ、完璧なハーモニー、仲間とのバンド演奏、数えきれない流れ星。