3DDFA_V2 は dense reconstruction しなければ MIT ライセンスで使えると思っていた。これは間違いで、 dense reconstruction 以外でも顔の morphable model を利用していて、このデータは学術用途以外にはフリーではない。気づいていなかった。手法を理解せずに使おうとしているのがバレバレである。まあ遊びで使うだけだから問題ないけれど、せっかくなら緩いライセンスのものが嬉しい。
Google の MediaPipe という大掛かりなフレームワークにも、特徴点の z 座標を出力できる学習済みのモデルがある。ただこれを MediaPipe の外で使うのは大変そう。謎フレームワークに従って書かれたソースの解読が必要だし、処理もそこそこ複雑に見える。
https://github.com/google/mediapipe/tree/master/mediapipe/graphs/face_mesh
最初はこのディレクトリをずっと眺めていたけれど、ここに欲しい情報はなくて、
https://github.com/google/mediapipe/tree/master/mediapipe/modules
こっちにある。 face mesh の実態は face_detection -> face_landmark -> face_geometry の合成。 face_detection と face_landmark は独立した深層学習器で、前者で検出したものを rotate & crop して後者に渡す。 face_geometry は純粋に幾何学というか線形代数的な処理である。
どうも一旦 z を捨てて (追記: 捨てていなかった) 顔形状モデルとマッチングしているようなことが書いてある。考えてみると、パースペクティブカメラの画像の一部を切り取って特徴点の 3d 座標を推定したとき、その z は何なのかそもそも謎である。いちおう weak perspective camera という、局所的に平行投影されるモデルを仮定している…ことになっているけれど、本当に学習データがこれに沿っているわけではないと思う。単なる近似。
それなら 3DDFA のように最初から形状モデルを仮定して (論文を読んでいないので本当に仮定しているかは知らん) 学習したほうがいいのでは、と思ってしまうが、
Real-time Facial Surface Geometry from Monocular Video on Mobile GPUs
Face Mesh の人たち曰く、 PCA してパラメーターを抽出した morphable model は片目だけを閉じられないなど問題があるらしい。