Edited at

OpenFace について調査中


注意:異なるプロジェクトを1つのものと勘違いして書いてしまっていました。修正中

OpenFaceの記事についてのリンクを別項目として抜き出しました。

OpenFace がOpenCVやDlibに依存しつつも、それらにない機能を提供していることに気づいたからです。

顔の動作を分析するための機能もその一つです。

この記事を書いた後に、OpenFaceのバージョンも上がっていること。

OpenFace 2.0.3: an open source facial behavior analysis toolkit

次のような論文も書かれているなどもあります。

OpenFace 2.0: Facial Behavior Analysis Toolkit Tadas Baltrušaitis, Amir Zadeh, Yao Chong Lim, and Louis-Philippe Morency, IEEE International Conference on Automatic Face and Gesture Recognition, 2018

https://fg2018.cse.sc.edu/FG2018-booklet.pdf

2018年7月の時点でみるに、頻繁にメンテナンスされているようです。


OpenFace の論文

OpenFace の性能を論文ベースで理解するには次の論文を参照してください。

OpenFace: an open source facial behavior analysis toolkit

OpenFace_table1.png

論文中のTable 1には、各ライブラリが、どのような機能を実現しているのかの一覧となっています。

OpenFaceが機能の網羅性が高いことがそれらの比較の中でわかります。

Facial Action Unit Recognitionを実現しているライブラリはそう多くないことがわかります。

視線推定(Gaze)も実現しているライブラリはそう多くありません。

OpenFace_Table3_4_5.png

Head Pose esitmationの誤差が他の比較したライブラリに比べて少ないことがTable4, Table5 で示されています。

最新の顔ライブラリとしては、着目すべきライブラリが抜けていることがあることに注意が入ります。


インストールしたいライブラリかどうかを見極めよう

OpenFace がインストールするに値するライブラリかどうかは、YoutubeにあるOpenCvに関する動画などを参考にして調べてみてください。


Githubから入手する


Commercial license

For inquiries about the commercial licensing of the OpenFace toolkit please contact innovation@cmu.edu



OpenFaceのインストール(Docker)

Quickstart usage of OpenFace with Docker (thanks Edgar Aroutiounian)

私としては、Dockerを利用したインストールを推奨します。そうでなければ、PythonやOpenCVやdlibなどのバージョンの組み合わせで苦労するはずです。私の場合もDockerの設定を利用してようやく、各種の例題が使えるようになったところです。

# build/bin/FaceLandmarkImg -f sample1.jpg

sample1.jpgsample1.jpg

processed.jpg

face_det_000000.png face_det_000000.bmp

検出結果のなどが以下のファイルに出力されます。

processed/sample1.csv

その中にはAU(Facial Action Unit)の結果も含まれています。以下はその一部を表示させたものです。

image.png


OpenFaceのインストール手順

https://github.com/TadasBaltrusaitis/OpenFace/wiki/Unix-Installation

Requirement TBB, dlib, OpenBLAS, and OpenCV

頭部の向きの推定も含んでいる。


Facial Action Unit

OpenFaceには顔の動作を分析するための機能Facial Action Coding System (FACS)も含まれている。これは商用の顔ライブラリであってもなかなか含まれていないものです。

- Facial Action Unit Recognition

-aus output the Facial Action Units


OpenFace is able to recognize a subset of AUs, specifically: 1, 2, 4, 5, 6, 7, 9, 10, 12, 14, 15, 17, 20, 23, 25, 26, 28, and 45.


それぞれの番号のAUが何を意味するのかはWikipediaを参照してください。

Gaze tracking (image of it in action)


コマンドラインでの使い方

https://github.com/TadasBaltrusaitis/OpenFace/wiki/Command-line-arguments

github の wiki上にある記述はWindowsを想定した次のような記述になっています。

FaceLandmarkImg.exe -f "C:\my images\img.jpg"

それらは適宜、次のように読みかえます。

# build/bin/FaceLandmarkImg -f sample1.jpg

OpenFace wiki Documentation

コマンドの使い方は、1枚の画像ファイルを指定することも、期別に複数のファイルを指定することも、入力画像ディレクトリを指定することもできるように作られている。

Single image analysis

-f <filename> the image file being input, can have multiple -f flags

Batch image analysis

-fdir <directory> - runs landmark detection on all images (.jpg, .jpeg, .png, and .bmp) in a directory

ライブラリの使い方を見るには

それぞれのサンプルプログラムのソースコードを読むのがよさそうです。

今の時点ではpythonバインディングはないようです。

腕に覚えのある人は、pythonバインディングを作って提供する手があります。

YoutubeでOpenFaceを検索する。

https://www.youtube.com/results?search_query=OpenFace

OpenFaceを利用したもの

FACSvatar v0.2.7-Alpha

PyPI openface-reader 0.2.4

github A small Python package for reading OpenFace files.

PyPi exploface 0.0.0.dev5


OpenFaceのダウンロード後のディレクトリ

以下のライブラリが含まれているので巨大なディレクトリになります。

lib/3rdParty/CameraEnumerator

lib/3rdParty/OpenBLAS

lib/3rdParty/OpenCV3.4

lib/3rdParty/boost

lib/3rdParty/dlib

lib/3rdParty/tbb


未確認の内容

Age, Genderについては、このメモを書いている時点では、OpenFaceには含まれていない様子。

十分に顔画像の正規化ができているのだから、十分な数のデータとしかるべき学習があれば、性能が高いものが作られても不思議ではない。

dlibでの画像の正規化を持ちている開発中の各種オープンソースがOpenFaceに合流してくれればうれしいな。


私見:


  • OpenFaceを使う際には、Cudaを使えるマシンを使用することです。


  • 商用ライブラリを導入する際には、性能の比較をする際の一つのリファレンスにOpenFaceを用いることが考えられます。



    • 5年前に改良が止まってしまった商用ライブラリの場合には、深層学習ベースのOpenCVの顔検出、dlibの顔検出などの方が、顔検出の性能が上回っている場合があります。

    • オープンソースの顔ライブラリが向上しているといっても、実効速度のチューニングは、よくメンテナンスされている種類の商用ライブラリの方が性能が高いことが多いです。そのような商用ライブラリは、国内外を十分に調査することです。



  • 顔の特徴点landmarkの導出は、顔照合や顔の属性判定など多くの顔ライブラリの性能のベースを決めるものです。十分に性能の高い顔の特徴点を決めるライブラリを用いて、それをベースに発展的な機能を開発すべきでしょう。


  • 顔のライブラリを選択する際の注意点としては、アジア系の顔に対しても十分な性能があるのかをしかるべきデータベースで確認することです。


  • 顔ライブラリの機能のうち必要な機能が少ない場合(検出だけ)や、顔の検出が正面顔だけとれればよいなどの条件のときには、負荷量の少ないライブラリを選択する可能性もあります。



商用ライブラリの開発者へのお願い

オープンソースのライブラリの性能ががあっているといっても、サポートのある商用ライブラリの価値はあります。

オープンソースのノウハウは開示されています。オープンソースに負けないでそれ以上の性能を維持し続けてください。

オープンソースの性能はえてして偏ったデータセットで性能が優れているだけであって、あなたが使いたいデータの入力に対して性能が高いとは限りません。(例:東洋人やアフリカ系の顔に対しては、西洋系の顔ほど性能が確保できていないことがあります、西洋系で訓練された年齢推定ライブラリは、東洋系の人に対して適切な値を返しません。)


関連情報

qiita 深層学習が用いられている顔の属性推定について調査中


顔照合のOpenFaceの情報は

OpenFace(顔照合) について調査中に別項目にいたしました。