CLIPassoで、抽象的なスケッチを描く

1.はじめに

 今回ご紹介するのは、ディープラーニングによって画像から抽象的なスケッチを描くCLIPassoという技術です。

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

2.CLIPassoとは?

 今まで画像のエッジを捉えたスケッチを描く技術は色々提案されているものの、抽象的なスケッチを描く技術はありませんでした。CLIPassoは、画像をベクトルに変換できるCLIPを活用することで、これを可能にしています。

 下記がCLIPassoの概要図です。与えられた画像から特徴量を抽出し微分可能なRasterizerを通してスケッチ描きます。そして、CLIPではこのスケッチと与えられた画像それぞれをベクトル化し、COS類似度が最大になるように誤差逆伝播でパラメータの最適化を行うわけです。このとき、スケッチを描くときのストローク数を調整すると抽象度を調整できます。

3.コード

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

 まず、セットアップを行います。

 セットアップが完了したら、必ず「ランタイム/ランタイムを再起動」をクリックすることを忘れずに行なって下さい。これを行わないとこの後のコードが正常に動作しません。

 

 run_object_sketching.py を使ってスケッチを作成します。引数は、target_imageで画像の指定(target_imagesフォルダにある画像から指定します)、num_sketchで作成回数(作成したものの中から後でBestを選択します)、mask_objectで画像の背景の有無(無:0, 有:1)、fix_scaleでスケールを固定かどうか(固定:0, 自動:1)、num_strokesでスケッチのストローク回数(4, 8, 16, 32 の中から選択可能です)です。

自分で用意した画像を使いたい場合は、test_imagesフォルダにアップロードしてください。なお、colabのGPUだと結構時間が掛かりますのでゆっくりお待ちください(P100で作成回数1回当たり7分くらい掛かります)。

 

 それでは、スケッチを生成するプロセスの動画を見てみましょう。

 いかがだったでしょうか?極少ない線で画像の本質を表現するような技術、面白いですよね。

 では、また。

(オリジナルgithub)https://github.com/yael-vinker/CLIPasso

(twitter投稿)

2 件のコメント

    • tさん
      ご連絡ありがとうございます。
      diffvgのインストール時にtensorflowのバージョン切り替えが上手くいっていなかったことが原因でした。
      以下を追加し、修正済みです。再度、お試し下さい。
      %tensorflow_version 1.x

  • コメントを残す

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

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

    ABOUTこの記事をかいた人

    アバター

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