はじめに
Liquid R&Dチームの小倉です。今回は3DDFAを用いて顔画像からその感情の表出であるところの表情を抽出し、それを他人に移植することで間接的ですが感情の移植を試みたいと思います。
手順
以下の流れで感情(表情)を移植します
- 抽出元、移植先から顔3次元情報を抽出、それから顔2次元情報を復元
- 抽出元の顔3次元情報の中の表情成分を移植先の顔3次元情報の表情成分に移植
- 表情成分が移植された顔3次元情報から顔2次元情報を復元
- 移植先の元の顔2次元情報と表情成分移植後に復元された顔2次元情報を使用して移植先の顔画像を変換
顔3次元情報(3DMM)
今回顔画像からの表情の抽出は、まず顔検出をFaceBoxesで行い、3DDFA_V2 (3DDFAの後継)で検出された顔領域から顔3次元情報を抽出し、その顔3次元情報の中の表情成分を切り取る事で行います。この顔3次元情報は界隈で3DMM(3D Morphable Model)と呼ばれており、以下3DMMと呼んでいきます。
3DDFA形式の3DMM
顔の3次元情報の一般的な呼称として3DMMという言葉が最初 に出てきたのは20年ほど前ですが、それから各自で様々な形式 が開発、提案されてきました。
今回使用する3DDFA形式の3DMMは62次元のベクトルで、内訳は以下の様になっています
- アフィン変換成分(12次元)
- 形状成分 (40次元)
- 表情成分 (10次元)
アフィン変換成分はカメラ座標から顔の中心への変換行列(3x3の回転成分+3x1の移動成分)となっており、形状成分と表情成分はそれぞれ A 3D Face Model for Pose and Illumination Invariant Face RecognitionとFaceWarehouse: a 3D Facial Expression Database for Visual Computingを元にした特徴量をPCAで次元削減したものになっています。
3DMMを見てみる
実際に顔画像を入力してみて出力された3DMMを見てみます。左から入力画像、アフィン変換成分(p vec)、形状成分(shp_vec)、表情成分 (exp_vec)となっています。一番右の表情成分に注目すると、感情が無い顔ではあまり値が入っておらず、感情が有る顔ではそれなりに値が入っているのがわかります。
今回はこの表情成分のみを抽出元から移植先にコピーすることで感情の移植を図ります
(アフィン変換成分に関しては移動成分を省略しているため、回転成分の9次元のみを表示しています)
顔2次元情報(ランドマーク)
顔の2次元情報も様々な形式がありますが、今回は現状最も一般的に使われている68点の形式のものを用います。目、鼻、口、輪郭の各点が画像中の2次元座標で表現されています。
3DMM(3次元)から68点ランドマーク(2次元)への変換
3DMMからこの2次元情報(以下ランドマークと呼びます)を計算する際は、生出力である3DMMの形状成分(alpha_shp
)、表情成分(alpha_exp
), アフィン変換成分(p
, offset
)から顔を3D再構成した後に該当のランドマークを画像座標に射影して計算されます。また、この際には3DDFA V2がモデル学習時の正規化で使用された平均、偏差などを使用する必要があります。
vertex = p @ (u_base + w_shp_base @ alpha_shp + w_exp_base @ alpha_exp).reshape(3, -1, order='F') + offset
ランドマークを見てみる
先程抽出した3DMMをランドマークに変換すると以下の様になります
入力顔画像 | ランドマーク | ランドマーク重畳後 |
---|---|---|
画像変換
今回はMoving Least Squaresという手法で画像を変換します。詳細は元論文をご参照下さい。実装はこちらをお借りします。
感情の移植
それでは感情を移植してみます。
まず移植先としては、先程から感情が無い顔の例で登場していた弊社CTO大岩をそのまま用います。
そして抽出元としては、感情がわかりやすくてインターネットで探しやすい、顔画像認識界隈でおなじみトランプ元大統領を用います。
それでは、喜怒哀の感情がむき出しのトランプ元大統領の感情を、感情の無いCTO大岩の顔に移植していきます(楽は喜とかぶっている気がするので今回は省略します)
喜
抽出元
上機嫌です
移植
喜びがちょっと漏れ出ています
怒
抽出元
トランプ元大統領といえばこの顔
移植
何か言いたげです
哀
抽出元
珍しく落ち込んでいます
移植
どこか物憂げです
感情の増幅
さて感情の移植はしてみましたが、移植前の顔にあまりに感情が無いせいか移植後の顔でもまだ感情の物足りなさが否定できません。そこで、感情の無い顔の表情成分がほぼ0だった事から表情成分を増幅して移植してみるとどうなるかを見てみます。使用する画像は移植の時と同じです。
喜
だいぶ口角が上がっています
怒
怒りが抑えきれずに吠えています
哀
今にも泣き出しそうです
おわりに
今回は3DDFAを用いた感情の移植と増幅を行ってみました。抽出元、移植先共に画像1枚で画像変換時の補完もしていないので、移植後の画像は正直かなり不自然な感じになっていますが、とりあえず3DDFA形式の3DMMの表情成分が果たしている役割の一端は確認できたかと思います。
Liquid R&Dチームでは、例えば今回使用したFaceBoxes、3DDFAといったOSSの性能検証もこの様に楽しく行っています。そして、感情の無い顔の持ち主として登場したCTO大岩ですが、本当はこの様に顔画像を乱用しても笑顔で許してくれる感情溢れる良い人です。
長めの補足
ちなみに顔の表情を抽出して他の顔に移植することはみんな興味があるようで結構昔からやられていて、そもそも3DDFA形式3DMMの表情成分のベースとなっているFaceWarehouse: a 3D Facial Expression Database for Visual Computingでも他人間、本人間での表情の移植がやられています。
またGANが登場してからというもの、学習データセットと移植先画像によっては人間の目では生成されたものかどうかの判断がつかないほどに自然な移植が行われるようになっています
さらに学習済みモデル・コードの公開、計算資源、クラウド環境利用の一般化が進み、インターネットさえ繋がれば誰でも簡単に移植が出来るようになっています。以下はsonyさんが提供しているニューラルネットワークライブラリnnablaにて実装された、First Order Motion Model(元ソース)のサンプルコードのGoogleColab上のノートブックにて、トランプ元大統領の映像とCTO大岩の画像を入力して実行した結果です。
このように、現在はもはやどの画像がオリジナルでどの画像が生成されたものかが人間の目では判断がつかないという時代になってきています。Liquidではこの現状を受け止めながら、真贋判定技術の開発に取り組んでいます。