ダークサイドにようこそ!

旅行 / 散歩 / プログラミング / 映像制作 / ブレイクダンス

StyleGAN3で色々と遊んでみた ~TouchDesignerによる加工や偽シャニマスなど~

f:id:hahaeatora:20211208225543j:plain

最近公開された(2021年10月ぐらい)Nvidia社のStyleGAN3で遊んでみたのでその備忘録や作例をご紹介。

github.com

nvlabs.github.io

 

以下はarXivにある論文「Alias-Free Generative Adversarial Networks」のAbstractより抜粋。

We observe that despite their hierarchical convolutional nature, the synthesis process of typical generative adversarial networks depends on absolute pixel coordinates in an unhealthy manner. This manifests itself as, e.g., detail appearing to be glued to image coordinates instead of the surfaces of depicted objects. We trace the root cause to careless signal processing that causes aliasing in the generator network. Interpreting all signals in the network as continuous, we derive generally applicable, small architectural changes that guarantee that unwanted information cannot leak into the hierarchical synthesis process. The resulting networks match the FID of StyleGAN2 but differ dramatically in their internal representations, and they are fully equivariant to translation and rotation even at subpixel scales. Our results pave the way for generative models better suited for video and animation.

論文ちゃんと読んでいないのですが、これまでのStyleGANだと生成画像が絶対的なピクセル座標に依存しているように見える問題(公式のデモ動画を見ると分かるが顔が動いても肌面が動いていないように見える)がありましたがこれを改善し、更に生成画像の平行移動や回転にも対応できるそうです。前のStyleGAN2-ADAと比べ学習コストも少し削減したらしい。毎度のことですがNvidia Source Code Licenseなので普通には商用利用できません!Nvidiaさんに相談してください!

 

公式実装で遊ぶ

そんなStyleGAN3をColaboratory上で試せるデモを用意してくれている方がいました、感謝。MacBook使いだとローカルでの環境構築は厳しい。

colab.research.google.com

 

※久しぶりに上記ノートブックを開いたら「Generate 🎵 music video」というセルが追加されていたので試してみた。

 

 

実行メモとして「Generate an interpolation video」セルのstop_seed値はstart_seed値より大きくしないとエラーが出て怒られます。こちらのセルを実行するとGANでよく見かけるモーフィング動画を出力することができます。この動画を素材としてTouchDesignerでオーディオリアクティブにしたりdisplaceやslitscan等のエフェクトをかけて遊んだ映像が以下(顔がぐるぐる動くのでこれらのエフェクトと相性が良さそうと思いました)。

youtu.be

youtu.be

 

ただフレームレート数の少ない動画をオーディオリアクティブにするとカクカクになったり、スリットスキャンにかけるとギザギザの模様が出たりするので既存のソースコードを改造してフレームレート数を調整できるようにしました。本家リポジトリgen_video.py→gen_interp_video()にてモーフィング動画の作成を行なっているのですが、imageio.get_writerにてFPS=60と決め打ちになっているのをコマンドライン引数(Clickを使っている)で指定できるように修正しただけです。

 

更に以下の記事も読ませていただきました。動画にしか興味がなくてチェックしていなかったのですが、静止画出力用のgen_images.pyにてアフィン変換による画像のtransformに対応しているらしい。

qiita.com

 

gen_video.pyでは連番画像を生成して動画に変換しているだけなのでgen_images.pyと同じように拡大縮小や回転を行うことができます。gen_interp_video()内のG.synthesis()で画像生成する前にtransform用の処理を加えればokです。そんな感じでtransformしてみた動画が以下。

youtu.be

youtu.be

動画1つ目について補足すると、左上はx方向の縮小、右上はy方向の縮小、左下はxy方向の縮小、右下はxy方向の拡大です。上記した@nishihaさんのQiita記事にて、sx=1.0より小さくした場合はグロテスクになると記載があり試さずにはいられませんでした。

動画2つ目は回転でangle値を少しずつずらしただけ。これ学習データの水増し段階で回転した画像も学習させたら似たような出力になるのかな。

visualizer.pyも面白そうなんですがまだ触ってません……

 

Hugging Faceのデモで遊ぶ

Hugging Face SpacesというMLアプリをデプロイできるサービス上にStyleGAN3+CLIPのデモがありま……なんですが本記事の執筆時に久しぶりに開いたらエラー画面になっていました(残念)。

以前、こちらのデモを使ってアイドルマスターシャイニーカラーズのアイドルさんっぽい誰かを生成して遊んだりしてました。需要が全く無いにもかかわらず素材を全部生成するのに数日かかりました。映像だけご紹介。

youtu.be

 

CLIP連携に関しては以下の記事(VQGAN+CLIP)でもご紹介しているのでよければご覧ください。

note.com

 

……この記事を書いていたら@_naterawさんがStyleGAN3のデモをアップしてくれていたのでさっそくこちらも試してみました。

youtu.be

上記デモで継ぎ目のseed値が同じになるように映像素材を作成、TouchDesignerでオーディオリアクティブに、DaVinci Resolveで素材配置です(カラグレしてないのでTDでも出来る)。なんか良い感じになりました。

 

さいごに

以上、StyleGAN3で色々と遊んだ記録でした。自前のデータセットでの学習も試してみたいが色々とリソース不足ですな……

 

hahaeatora.hateblo.jp

hahaeatora.hateblo.jp

note.com