顔認識アルゴリズム:constrained local model を調べてみた
TRANSCRIPT
![Page 1: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/1.jpg)
Constrained Local Model (CLM) SurveyJotaro Shigeyama (@JotaroUT)
![Page 2: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/2.jpg)
Constrained Local Model : CLM
CLM : 顔部位検出のためのアルゴリズム
CVの ObjectDetectorなどと組み合わせて用い、顔部位検出が可能
リアルタイム性が良く、多くのフレームワークにソースが公開
openFrameworks Processing javascipt webgl……...
Xiaoguang Yan,Constraint Local Model for Face Alignment, Tutorial
Cristinacce et.al. Feature Detection and Tracking with Constrained Local Models 2006
![Page 4: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/4.jpg)
CLM Pipeline
![Page 5: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/5.jpg)
CLM Modelモデルは 2つに分かれている
顔の特徴点モデル(形状モデル
特徴点周辺の画像モデル(パッチモデル
CLMではこの2つのモデルの情報を統合して効率的に顔部位検出を行う
→モデルがなければ検出できない
→モデル構築の話から
![Page 6: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/6.jpg)
CLM Architecture
![Page 7: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/7.jpg)
CLM Architecture
![Page 8: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/8.jpg)
CLM Model Building
顔画像とその顔に予め決められた位置にプロットされた特徴点の学習データを大量に用意する。(手作業)
CLMのモデルでは次のデータを学習する
特徴点の変形に関する情報
特徴点周りの顔画像の特性に関する情報
・・・
![Page 9: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/9.jpg)
特徴点に関する情報
特徴点は60 (=N)点用意
→120次元のベクトルを用意できる
すべての学習データ (=M)に対してベクトルを集め、並べた行列を構成する
*追記:ベクトルはすべて平均値で引いておく
![Page 10: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/10.jpg)
特徴点の主成分分析 (PCA)
顔の特徴点は顔の向きや姿勢・表情筋の変位によって変形する
しかしながら人間顔の変形の仕方はある程度パターンが有るはず・・・
→主成分分析でパターンを割り出したものをデータとしてとっておく
先ほどの行列 Xに対して、特異値を算出するが、 XTXの非ゼロ固有値が特異値の二乗になることを利用する。
固有値は降順にソートし、対応する固有値・固有ベクトル K個を用いることにする。 (Pは KxN行列に圧縮される。 bは固有顔の寄与率ベクトル)
![Page 11: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/11.jpg)
Point Distribution Modelの構成
先ほどの式をさらに一般化する
→与えられた特徴量 顔の姿勢・位置・スケール・変形の情報を含む
PDMはこの特徴量を定式化したもの(よく論文に出てくる)
s,R,t : 剛体運動に関するパラメータ
b : → →非剛体運動 つまり表情パラメータ CLMで注目
![Page 12: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/12.jpg)
特徴点周りの画像データ
特徴点周りの画像はある程度決まっているはず
「目頭の特徴点周りの画像は『目頭っぽい』画像をしているはずだ」
→人間顔に普遍的な点周辺の輝度情報があれば、顔・非顔判定ができる
SVMで顔・非顔トレーニングセットについて学習
wは顔画像データ xのフィルタ画像になっている
→Patch Expertsと呼ばれる判定用フィルタ
テンプレートマッチングのようにして使う
各特徴点周りについて学習させる
![Page 13: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/13.jpg)
CLM Architecture
![Page 14: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/14.jpg)
探索ステップ:
Viola−Johnes法で顔の位置を探索( OpenCVと同じ)
この時はまだ顔の大雑把な位置しかわからない
顔の位置・目の位置
最近は dlibの facedetectionを使う
顔部位の初期推定値を求める
平均顔を使う
目の位置から姿勢・拡大縮小
![Page 15: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/15.jpg)
探索ステップ: SVMフィルタ
特徴点周辺を、 Patch-expertsよりも大きめにクロップする
Patch-expertsでクロップ画像のテンプレートマッチングをする
テンプレートマッチングした結果高スコアだった箇所をフィルタリング
結果を Response imageとする
その後二変数二次関数にフィッティングする
なぜ二変数二次関数なのかはのちほど
![Page 16: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/16.jpg)
探索ステップ:最適化関数
次の評価関数が最大となる特徴点ベクトル xを求める
r:二次関数にフィッティング済みの Response Image
b,λ:PCAで求めた変形寄与率と固有値
β:ハイパーパラメータ
![Page 17: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/17.jpg)
探索ステップ:最適化関数
r(二次関数にフィッティング済 )と bは二次形式に記述可能
![Page 18: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/18.jpg)
探索ステップ:最適化関数
第一項・二項は「 Response Imageの値」
第三項は「 PCAから予め得られた変形度合いからの離れ具合」
→顔部位画像のマッチング+顔部位変形の特性を融合して探索できる
![Page 19: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/19.jpg)
探索ステップ:最適化関数
第三項の最小値・最大値を設定しておく(過度な変形を防ぐため)
どこかでみたことが・・・
![Page 20: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/20.jpg)
matlabの documentationを覗く
[二次計画法 ] http://jp.mathworks.com/help/optim/ug/quadprog.html
![Page 21: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/21.jpg)
探索ステップ:最適化関数
実は二次計画法問題に帰結している
C++の Quadprog++などをつかえば内点法で比較的早く解いてくれる
NP-hard → NP
’この関数の最大 x’が、次の特徴点の候補
収束するまで探索ステップを繰り返す
![Page 22: 顔認識アルゴリズム:Constrained local model を調べてみた](https://reader033.vdocuments.net/reader033/viewer/2022050800/58ed89271a28ab46518b45d1/html5/thumbnails/22.jpg)
あとがき
ここで上げた評価関数やフィッティング問題はごく一例
凸関数なら別にカーネルはガウシアンでもよかったりする
当然評価関数の書き方は異なってくる
学習する特徴量の組み合わせ
SVMだけじゃなく HOG特徴量とか
CLMを皮切りに多くの手法が開発されることとなる
CLNFはパッチエキスパートの学習がニューラルネットワークになってる
PDMの確率推定(評価関数の対数尤度最大化)手法もある
評価関数の数理計画法から統計モデリング・ベイジアンアプローチへ