Paint Transformerで、高速に1枚の画像から油絵を描く

1.はじめに

 以前、1枚の画像から油絵を描くプロセスを作成する技術をご紹介しました。今回ご紹介するのは、その技術を高速化したPaint Transformerという技術です。

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

2.Paint Transformer とは?

 下記が学習のフレームワークで、速さの秘密は複数のストロークを並行して予測してキャンバス画像とターゲット画像の差を最小化するようなパラメータを求める構成にあります。

 まず、背景ストロークセットSb(Background Stroke_Sb)と前景ストロークセットSf(Forground Stroke_Sf)をランダムにサンプリングします。次に、Stroke Rendererを使って、空のキャンバス(Blank Canvas)にSbをレンダリングしてキャンバス画像Ic(Canvas Image Ic)を生成し、キャンバス画像IcにSfをレンダリングしてターゲット画像It(Target Image It)を生成します。

 そして、IcとItからStroke PredictorでストロークSr(Prediction Stroke)を予測し、Stroke Rendererで予測画像Irを生成します。ここで、学習するのはStroke Predictorのみで、Stroke Rendererは微分可能なモジュールです。ロスは、ストロークレベルとピクセルレベルの2つから構成されています。

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

3.コード

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

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

 最初に、1枚の画像から油絵を作成するプロセスを動画にしてみましょう。まず、inference/inputフォルダーの中にある画像(jpg)を指定します。自分の画像でやってみたい方は、inference/inputにドラッグ&ドロップで画像をアップロードして指定して下さい。

 画像から油絵を作成するプロセスを作成します。プロセスは、inference/output/yui に連番の静止画(jpg)として保存され、最終画像はinference/output/yui.jpgで保存されます。

 保存されたプロセスからgifとmp4を作成します。gifはinference/output/process.gifとして、mp4はinference/output/process.mp4として保存されます。

 mp4を再生してみましょう。

 

 次に、高速化処理が可能になったので、ついでに動画の油絵化をやってみましょう。まず、動画を静止画にバラシます。

 バラシた静止画を油絵に変換し、inference/frameフォルダーに保存します。所用時間は、GPUがP100の時に、1280×720で1分/枚、640×360で15秒/枚位かかります。但し、フルHD1920×1080まで大きくすると、cuda out of memory で落ちますのでご注意を。

 変換した油絵の静止画からmp4を作成します。

 ちょっと時間はかかりますが、動画が油絵化できると映像の表現力がアップしそうですね。

 では、また。

2022.6 colab リンク追加

 写真から油絵と作成動画を2段階の解像度で生成できるリンクを追加しました。

(オリジナルgithub)https://github.com/Huage001/PaintTransformer

(twitter投稿)

コメントを残す

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

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

ABOUTこの記事をかいた人

アバター

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