cedro-blog

Toonify Youeselfで自分の顔をリアルなアニメ顔に変換する

1.はじめに

「Toonify Yourself」という自分の顔をアニメ顔に変換してくれるWebサービスが大人気です。但し、あまりにもアクセスが集中したためサーバーコストがかさみ現在はサービスが中断されています。

 自分の顔をアニメ顔に変換できるなんて面白いと思いませんか?やってみたいがサービス中止では諦めるしかないと思ったあなた、心配いりません。

 コードは公開されていますので、今回は、Webサービスを使わずに自分のアニメ顔を作る方法をご紹介します。

2.Toonify Yourselfとは?

  Toonify Yourself は、2つのStyleGAN2を組み合わせています。1つは、FFHQの顔画像70,000枚を学習したBaseモデル、もう1つはBaseモデルに300枚のアニメ顔をファインチューニングしたFine turningモデルです。

 BaseモデルとFine turningモデルの両方に同じ潜在変数w(1,18,512)を入力すると、Fine turningモデルの出力にはBaseモデルの出力と相関が高いアニメ顔が現れます。しかし、学習するアニメデータはCGや手書きの混在しているためアニメ顔の画質は低いです。そこで、この2つのモデルを組み合わせます。

  低解像度(顔の向きや形などに影響)にFine turningモデルを使い、高解像度(照明やテクスチャなどに影響)にBaseモデルを使うことで、リアルなアニメ顔の出力が得られます。これをBlendedモデルと呼びます。

 StyleGAN2では、任意の顔の潜在変数wの探索が可能ですので、任意の顔のアニメ顔への変換が可能になるわけです。

3.コード

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

 最初に、セットアップを行います。

  ffhqモデル(Baseモデル)とblendedモデルをダウンロードします。

 必要な関数を定義します。

 まず、アニメ化したい顔が写っている画像(rawフォルダーにあるサンプル)から、顔部分を切り出します。

  rawフォルダーにある画像から、dlibを使いalign(顔が直立するように回転させる)し、設定範囲を切り取った画像(*.png)をalignedフォルダーに保存します。

※自分の顔の写った画像など自分のオリジナルの画像をアニメ顔に変換したい場合は、その画像をrawフォルダーに保存しておいて下さい。

 次に、切り取った顔画像を生成する潜在変数wを見つけます。

  alignedフォルダーの顔画像に出来るだけ似た顔画像を生成する潜在変数wを求め、潜在変数を generate/*.npy に保存し、潜在変数wから生成した画像を generate/*.png に保存します。表示されているのは、潜在変数wから生成した画像です。

 そして、潜在変数wを元に、Blendedモデルでアニメ画像を生成します。

 潜在変数w(generated/*.npy)を読み込み、Blendedモデルでアニメ画像を生成しgenerated/*-toon.jpgで保存し、使用した潜在変数は全て変数latentsに保存します。

 最後に、変数latentsからトランジションを作成します。

 潜在変数 latnts の0番目→1番目→2番目→0番目にトランジションするGIFです。my/gif/anime.gifに保存されます。

 色々な顔画像で試してみて楽しんで下さい。では、また。

(Twitterへの投稿)