僕のCGアカデミア

グラフィクス系(主にキャラクターアニメーションに関する)論文やアクティビティを簡単に紹介するログ

論文紹介: paGAN: Real-time Avatars Using Dynamic Textures

こんにちは、iwanao731です。Facial関連論文めちゃめちゃ読んでるので忘れないうちに!

概要

paGAN: Real-time Avatars Using Dynamic Textures Nagano et al., SIGGRAPH ASIA 2018

youtu.be

入力画像一枚の顔から、Identityを保ったままfine-sclaeの新たな表情を生成する技術に関する論文。ニュートラルの表情一枚だけだと、別の表情の際のシワ等の効果を足すことは難しいが、それを何人もの人の無表情と表情の組み合わせから、conditional Generative Adversarial Networkを使用し、もっともらしい表情やその際のシワ等の情報を推定することを可能にしている。顔だけでなく、目や口内の情報も生成可能。ポイントは形状と表情テクスチャに相関関係があることを仮定し、表情生成の際に動的にテクスチャをブレンドする点。

関連研究

近年、画像上の表情を変える画像ベースの技術[1][2][3][4]が提案されてきているが、CGモデルのように様々な角度で見ることは難しい。

特に以下2つの論文は、二次元上の表情のリターゲットを実時間で再現することを可能にしている。

youtu.be

youtu.be

しかしながら、もとの人物の表情や構内情報を別の人物に転写すると違和感が大きい上に、新たなsubjectへのトレーニングに手間がかかる。本論文では転写は行わず、無表情の単一画像から、UV空間上の高精細なもっともらしい表情画像や口内、眼球画像を生成する。また、一度トレーニングしたらそれ以降はどんな入力画像人物に対しても違和感なく適応することができる。

また、従来のGANを用いた手法は写実的な顔表現が可能だが、その制御が難しくスキントーンやライティングに対する調整が難しかったが、paGAN (photo-real avatar GAN)は、テクスチャをそれぞれに分解することにより、その調整を可能にしている。それらのテクスチャは最終的に3D morphable modelが入力画像にfitすることによって実現される。

paGANの生成部分はGPUが必要となるため、スマートフォンデバイスでの実現は難しいが、一度計算したFACSに基づいた各表情のテクスチャ(sparse set of key expression textures)を生成すれば、その情報を元にスマートフォン上でも表情を再現することができる。

youtu.be

[7] Real-Time Facial Animation with Image-based Dynamic Avatars, Cao et al., SIGGRAPH 2016 [ 論文 ]

Caoらの手法とは異なり、本論文はimage-based facial blendshapesであるため、複雑な皮膚の変形やdiffuseやspecularといった反射の分離を要求しない上に、複数の画像も要求しない。Caoらの手法では表情をいくつか与える必要があり、その情報から口内や目の情報を取得しているが、本手法は、正面写真一枚から口内や目の動きも再現可能である。

youtu.be

[8] Face Transfer with Multilinear Models, Vlasic et al., (2005)

Vlasic et al. (2005)は、identityとexpressionの相関関係を考慮した表情生成を可能にした一方、トレーニング時に使用した多くの人の表情を線形に補間するため、high frequency detailを失ってしまう。Jiemenezら[9]のクオリティがあれば問題ないが、一体のモデルを作成するのに一つ一つの表情を取得する必要があり、非常に大変な作業である。

[9] A Practical Appearance Model for Dynamic Facial Color, Jimenez et al. (2010)

提案手法

f:id:iwanao731:20200601004602p:plain
System overview (論文より)

無表情画像に対して、morphable modelをフィッティングし、そのidentityを保ちながら、別の表情を生成し、無表情のマスク、無表情を変形した際のマスク、そして、normalとdepth情報を元に、表情変化後のもっともらしい表情のテクスチャを生成する。その後、キー表情分のテクスチャを作り、実時間にブレンドすることで表情アニメーションを再現。

Dynamic Texture Synthesis

f:id:iwanao731:20200601004451p:plain
Discriminator for expression synthesis (論文より)

基本的には、提案手法の概要でも話している通り、masked neutral imageとdeformed neutral + gaze、expression(depth + normal)の3つの情報からシワなどの詳細の載った表情のテクスチャを作るところが鍵となる。その生成部分は、以前紹介したHuynhらの論文でも使っていたIsolaらのImage-to-Image Translation [ 論文 ]を用いている。

Image-to-Image Translation with Conditional Adversarial Networks

Bulding FACS Textures

一度学習してしまえば、入力画像に親しい表情を(動画であればフレームごとに)推定することは可能であるが、(毎フレーム)その処理をするには負荷がかかりすぎる上に、ハイエンドのGPUが必要となるため、モバイルでの実装は困難になる。そこで、一度、ハイエンドのGPUでリアルタイム用の表情テクスチャを表情個分作っておけば、実時間でその画像をブレンドすることでモバイルでの表現も可能になる。

f:id:iwanao731:20200601195043p:plain
FACS expressions and corresponding activation masks (論文より)

それを実現する際に、すべてのUV空間をブレンドすることも実質可能であるが、表情の細かい部分が僅かに変わってしていたりしてアーティファクトになってしまうため、表情ごとのUV activationマスクというものを考慮して計算を行う。UV activationマスクは、UV空間の頂点IDから、無表情と表情付きの3D頂点位置の誤差を計算し、その誤差に応じて、UV頂点に色付けをしていく。その後、Gaussian Blurをかけると、接続していない箇所がきちんと消えていいらしい。

この手法は理論的には正しいが、何十個もある表情にすべて作るためにアクターに各表情を作ってもらうのも難しいため、簡単にできる表情K個(論文では6個)だけ作るようだ。実時間での表情テクスチャのブレンディングはpixel shaderで行っているらしい。

その他(目や口)

  • 目に関しては、20個のテクスチャを事前に用意して、gaze trackerの結果に応じて、nearest neighborで近い目のテクスチャを持ってきて、compositeしているらしい。
  • これは目の色パターンを20個用意しているわけではなく、目の方向のパターンを20個用意しているっぽい。
  • 口は、300パターンのテクスチャを用意。口のブレンドは、nearest neighborではなく、以下の論文を使っているそう。
  • 具体的には、nearest neighborで見つけた50個の口内テクスチャをweighted median blendingという手法でblendしている。(pixel shaderで実装)

youtu.be Synthesizing Obama: Learning Lip Sync from Audio, Suwajanakorn et al., SIGGRAPH 2017 [ 論文 ]

データセットに関して

  • メモ程度
    f:id:iwanao731:20200601201304p:plain
    データセットリスト (論文より)

結果

f:id:iwanao731:20200601201533p:plain
Gallery of synthesized results (論文より)

f:id:iwanao731:20200601201659p:plain
Expression Transfer Result (論文より)

f:id:iwanao731:20200601201733p:plain
Avatar method comparison (論文より)

Limitation

f:id:iwanao731:20200601201825p:plain
Failure cases (論文より)

  • 入力の顔向きが正面じゃない
  • 顔のシャドウ
  • 手などのオクルージョン
  • 加えて、歯がかけている人は、正しい歯になってしまったりする様子。

雑感

  • 比較がたくさんあって内容盛り沢山な論文。やってるプロセスは理にかなっている。
  • Image-based avatarなので、正面画像で生成したとしても、トラッキング中に横向いて口を開いたりすると口内がおかしい感じに見えるんじゃないかなと予想。口を大きく開いて、横を向いている画像が論文中に見当たらなかったので。
  • 以下の論文みたいに目や口のジオメトリを用意したほうが、ゲームエンジンなどでは組み込みやすいかな。

iwanao731.hatenablog.com