FaceMesh : リアルタイムで顔のキーポイントを検出する機械学習モデル
ailia SDKで使用できる機械学習モデルである「FaceMesh」のご紹介です。エッジ向け推論フレームワークであるailia SDKとailia MODELSに公開されている機械学習モデルを使用することで、簡単にAIの機能をアプリケーションに実装することができます。
FaceMeshの概要
FaceMeshはGoogleが2019年3月に公開した、画像から顔のキーポイントを検出する機械学習モデルです。論文は2019年7月に公開されました。
一般的な顔のキーポイント検出は68点 (x,y)なのですが、FaceMeshでは468点 (x,y,z)を得ることができます。また、468点の手動でのアノテーションは難しいため、3DMMのレンダリング画像で学習したモデルを使って、現実の画像に対してアノテーションを行っています。
FaceMeshはARによるバーチャル試着などに応用することができます。
FaceMeshのアーキテクチャ
FaceMeshでは、192x192解像度の顔の画像を入力として、468個の3次元のキーポイントを出力します。(x,y)は入力画像のピクセル座標、zはメッシュの重心からの相対的なdepth値です。
FaceMeshのモデルアーキテクチャはMobileNet系となっており、DepthwiseConvolutionとPointwiseConvolutionの組み合わせで構成されています。このモデルはMobile DeviceのGPUでリアルタイム推論が可能です。
キーポイントの検出を行う機械学習モデルでは、2Dのヒートマップを用いる場合が多いのですが、演算負荷が高いという問題と、Depthを推定できないという問題があります。そのため、FaceMeshでは3次元の座標を直接、計算しています。
学習には、モバイルカメラで撮影した30Kの画像を使用しています。モバイルカメラで撮影した画像には、センサーとライティングの多様性があります。
30Kの画像に対して、キーポイントである468点のアノテーションを行うには膨大な工数が必要となります。
そこで、3DMM(3D morphable model)を使ったレンダリング画像を使用し、3DMMの頂点のサブセットをGround Truthとします。また、ネットワークに分岐を作成し、3Dのlandamarkとは別に、2Dのlandmarkを推論する機構を追加、468点よりも少ない数のキーポイントでannotationした現実の画像をGround Truthとして、3Dと2Dを同時に最適化します。
こうして学習したモデルで推論することで、データセットの30%で、Refinementすれば再学習に使用できる品質のGround Truthを得ることができました。Ground Truthの頂点のRefinementのため、複数の頂点を同時に動かせるBrushツールを使用してアノテーションします。
こうして、学習とデータセット更新の作業を反復することで、精度の高いモデルを実現しています。
なお、FaceMeshは1フレームごとに処理するモデルなため、フレーム間でジッターが発生する場合があります。ARアプリケーションで使用する場合は、1次元の時間方向フィルタを導入することが推奨されています。
FaceMeshの使用方法
下記のコマンドでWEBカメラの映像に対してFaceMeshを適用することができます。
$ python3 facemesh.py -v 0
実行例です。
ax株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。ax株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。