20170819 CV勉強会 CVPR 2017
Transcript of 20170819 CV勉強会 CVPR 2017
Photorealistic Facial Texture Inference Using Deep Neural
NetworksPaneo株式会社
吉田一星
吉田一星
自己紹介
・未踏ソフトウェア創造事業出身のエンジニア社長・前職はヤフーで、コンピュータビジョンやAR/VRを世界に先駆けてスマートフォンに応用したアプリを色々と立ち上げていました・去年の6月に起業し、一枚の顔写真から3Dモデルを自動で生成するソーシャルVRサービス「EmbodyMe」をVive/Oculusでリリース
Paneo株式会社 CEO
3D顔形状の推定
• 顔の3D形状の推定は、近年のCVPRで盛り上がりだしてきている
• Learning Detailed Face Reconstruction From a Single Image
• End-To-End 3D Face Reconstruction With Deep Neural Networks
• Fast 3D Reconstruction of Faces With Glasses
• 3D Face Morphable Models In-The-Wild
• Parametric T-Spline Face Morphable Model for Detailed Fitting in Shape Subspace
• DenseReg: Fully Convolutional Dense Shape Regression In-The-Wild
• Face Normals "In-The-Wild" Using Fully Convolutional Networks
• Regressing Robust and Discriminative 3D Morphable Models With a Very Deep Neural Network
• 去年は5件ほど、一昨年以前は1~2件ほどしかなかった
紹介する論文
• 写真一枚からフォトリアリスティックな3D Face Modelを作りたい
• そのための鍵となるフォトリアリスティックな顔テクスチャ(Albedo)をDNNで推定する
• 低解像度の写真や、横顔など部分的な写真からも推定可能
• 一言で言うと、Neural Style Transferを顔のテクスチャ推定に応用
• arXivで見て、実装しようとしていた論文だったので紹介
Photorealistic Facial Texture Inference Using Deep Neural NetworksShunsuke Saito, LingyuWei, Liwen Hu, Koki Nagano, Hao Li
紹介する論文
Neural Style Transfer
A Neural Algorithm of Artistic Style (2015)Leon A. Gatys, Alexander S. Ecker, Matthias Bethge
Content Style Style Transfer
• 学習済みのVGG16のある層の値を使う
• 入力画像をCNNに通したある層の値と、ランダムなノイズ画像をCNNに通した層の値で損失関数を定義する
• CNNの重みは固定で、ノイズ画像のピクセルの値を推定するのがポイント
• CNNのある層における入力画像とノイズ画像の値を最小化するように、ノイズ画像の元のピクセルの値を推定する
Neural Style Transfer
Content画像の層の値ノイズ画像の層の値
• Contents画像について、浅い層の画像では入力画像に近いが、深い層では画像の内容だけが保持されている
• Style画像も同様に
Neural Style Transfer
• Style画像についても同様に損失関数を定義するが、その層のグラム行列の値を比較している。また、複数層のグラム行列の値を見ている
• グラム行列は、ある層におけるフィルター同士の値の相関を見ていて、画像の位置関係は見ていない(=スタイル)
Neural Style Transfer
Style画像のレイヤーのグラム行列の値
ノイズ画像のレイヤーのグラム行列の値
• Contentの損失関数と、Styleの損失関数を合わせた損失関数を定義する
• その損失関数を最小化するようなノイズ画像を推定すると、Content画像にStyleが適用され、Style Transferが実現できる
• LBFSで推定している
• 損失関数の重み(α,β)や、層の選び方、初期のノイズ画像の選び方によって質感を変えることができる
Neural Style Transfer
• 3D Morphable Modelで、低解像度なテクスチャを推定し、Contentとする
• 写真から高解像度なテクスチャのグラム行列を推定し、Styleとする
• ContentとStyleを合わせた損失関数を最小化するようにノイズ画像のピクセルの値を推定すると、フォトリアリスティックなテクスチャが生成できる
今回の論文の概要
低解像度なテクスチャを推定
• PCAで学習した顔形状、表情形状、テクスチャの3D Morphable Model。主成分ベクトルの線形結合で表され、その重みを推定する
• 入力画像と3DMMのピクセルの比較、顔の特徴点の位置の比較、顔の平均に近づけるような正則化項からなる損失関数を最小化して重みを推定
• 得られた3DMMのテクスチャをContentの入力画像して使う
高解像度なテクスチャのStyleを推定
• 高解像度の顔画像データベースからそれぞれの顔のテクスチャを作る。その複数のCNN層のグラム行列を求め、その線形結合で表されるモデルを作る
• 592人の人種、年齢、性別が異なる高精細な顔画像が含まれるChicago Face Databeseを使用
• 線形結合をしてもリアルな肌の画像になる
• 入力顔写真のピクセルから部分的なテクスチャを作り、見えているピクセルの部分だけマスクする
• 入力顔写真のテクスチャのCNN層のグラム行列と、顔データベースのテクスチャのグラム行列の線形結合モデルを比較する損失関数を定義
• 入力顔写真のグラム行列に近い、顔データベースのグラム行列の線形結合モデルのパラメータを推定する
高解像度なテクスチャのStyleを推定
• 凸関数になるように制約(Σ_w=1, w>=0)を加えないと、不自然な結果になる
• 顔データベースのグラム行列の線形結合モデルのパラメータから(マスクされていない)全体のテクスチャのグラム行列を作る
高解像度なテクスチャのStyleを推定
• 3DMMの低解像度なテクスチャのCNN層の値と、ランダムなノイズ画像のCNN層の値を比較する損失関数を定義(Content)
• 顔データベースのグラム行列の線形結合と、ランダムなノイズ画像のCNN層のグラム行列を比較する損失関数を定義(Style)
• それらを合わせた損失関数を最小化
• 低解像度だが大まかな特徴を捉えたテクスチャ対して、高精細な肌のStyleが適用され、フォトリアリスティックなテクスチャが生成される
Style Transfer
色を保ったままStyle Transfer
• 色を保ったままStyle Transferをするため、Content、StyleともにYIQ色空間に変換し、Y(輝度)のみでStyle Transferを行う
• 輝度の平均と分散を整え、正規化する
• Style Transferを行った後に、ContentのIQチャンネルを結合する
球面調和関数、顔のセグメンテーション
• 入力顔写真からテクスチャを生成する際に、前処理として球面調和関数での照明を推定し、除去している
• 顔形状の法線ベクトルを元に照明を推定
• また、写真から顔部分をセグメンテーションしている。著者の前の論文の高速でオクルージョンに強い顔のセグメンテーションアルゴリズムを使用
• 3DMMのパラメータの推定で入力画像と3DMMのピクセルの比較の際にも、球面調和関数で照明を除去し、そのパラメータも学習に含めている。また顔のセグメンテーションもしている
• 顔データベースからテクスチャを生成する際にも球面調和関数での照明の除去をしているが、すべての画像で一定の照明条件で撮影されているので、すべての画像でグローバルなものとして推定している。また、フラッシュの反射を取り除くため、SUV色空間に変換し、Sのピークを取り除いている。
CNNについて
• CaffeNet、VGG16、VGG19を比較し、VGG19を使用
• Contentには深い層、Styleには浅い層(複数)を使用
• Styleには5層を適用している。層が少ないと以下のようにブラーがかかってしまう。
評価実験
• Amazon Mechanical Turkを使って定性的に行う
• Light Stage(大掛かりな設備でのキャプチャ)と比べても、遜色ない評価が得られた
解決法一緒に研究開発をしていただける社員を募集しています!「 Paneo Wantedly」でGoogle検索してご連絡下さい!
Paneo Wantedly