face detection without bells and whistles 論文紹介
TRANSCRIPT
Presenter: @jellied_unagi
論文のポイント
• 顔検出は枯れた技術? -> No
• 学習をしっかりやるとさらに性能向上
• 普通のDPMで最高のパフォーマンス
• Rigid templateでも同等のパフォーマンス
• 性能評価における課題
• Ground truthの与え方,評価の仕方がばらばら
• →性能に大きく影響
今日の発表
• 顔検出手法のおさらい
• Rigid template
• Deformable parts model
• 性能評価における課題と解決策
• 顔検出におけるチューニング
顔検出手法のおさらい: Rigid template
Rigid template
Viola & Jones architecture
• 依然としてよく使われる
• Face alignment の初期位置推定 [Xiong+, CVPR2013]
• 手法のポイントは二つ
• Haar-like filter, attentional cascade
IJCVの論文.実は初めて読んだけど割と難解に書かれていた(気がした)
実験結果例
Rigid template
Haar-like filter
• 白領域の画素値合計 -黒領域の画素値合計
• 24x24の領域に対して考えられるfilter responseの数は
160,000と大きい(=160,000次元の特徴)
• “Integral image”と呼ばれる表現により高速計算可能
利用されるHaar-like filter 顔の特定部位に反応する
Rigid template
Haar-like filter
• Integral imageを導入するメリット
• 大幅に少ない数の画素参照のみで特徴計算
ii(x, y) = 左上端点から(x,y)
までの領域の画素値合計領域Dにおける画素値合計= ii(4) + ii(1) – ii(2) – ii(3)
1 2 3
4 5 6
計算例ii(5) + ii(1) – ii(2) – ii(4)
– ii(6) - ii(2) + ii(3) + ii(5)
= 2 * ii(5) – 2 * ii(2) + ii(1)
+ ii(4) – ii(6) – ii(3)
Rigid template
Attentional cascade
• 検出において画像中のほとんどの領域は非顔
• Attentional cascade = 識別器のカスケードにより
これらを効率的にはじく
• 各識別器はAdaBoostで学習
• 弱識別器を組み合わせて強識別器を作る
• 間違いやすいサンプルに適応(adapt)しながら
弱識別器を繰り返し学習(boosting)
• Greedyな特徴選択機構とも見ることができる
• 弱識別器=一つ一つの特徴
Rigid template
Attentional cascade
• 識別器のカスケーディング法
• 後段の識別器ほど多くの特徴で構成
• 明らかな非顔は前段の少特徴・高速な識別器で振るい落とす
• 良さそうな候補のみ後段の多特徴・低速な識別器で処理
1 21 T…21
Attentional cascadeの概念図
Viola & Jones architecture
補足: AdaBoost
1
…
1番目の識別器を学習
1
…
識別器の誤り率・信頼度を計算
0.5 1
…
サンプルの重みを更新(誤ったサンプルは高い重み)
0.5
…
2
次の識別器を学習(重みつきのサンプルを利用)
1 2
識別器の誤り率・信頼度を計算
1 0.75
…
21 T…
最終的な識別は,全弱識別器の出力を信頼度で重み付けし,多数決
2
サンプルの重みを更新(信頼度が最も高い識別器を利用)
1 0.75
…
※各識別器に一つの特徴を割り当てることで,greedyな特徴選択機構を実現
Rigid template
Integral channel features detector
• Viola&Jonesの拡張
• 色や勾配などの特徴マップから特徴抽出
• Rectangular pooling
• ある矩形内での特徴量の合計値
• 詳細: http://research.preferred.jp/2013/07/integral-channel-
features%E3%81%AB%E3%82%88%E3%82%8B%E6%AD%A9%
E8%A1%8C%E8%80%85%E8%AA%8D%E8%AD%98/
今回利用された特徴マップ
Rigid template
Integral channel features detector
• これまでICFが顔検出に使われた例がなかった
• (らしい)
学習結果(赤いところに有効な特徴がある)
顔検出手法のおさらい: Deformable parts models
Deformable parts models
[Felzenszwalb+, PAMI2010]
Deformable parts models
[Felzenszwalb+, PAMI2010]
• DPMはパーツの集合で対象を記述
• あるスケールのある位置にパーツの最適な表現が存在
• この構造をうまく学習したい
Root filter対象全体の見えを記述
Part filter対象パーツの見えを記述
スケール
HoG pyramidを計算し,特徴量として用いる
Deformable parts models
スコア関数の設計
• パーツフィルタに対する応答
• 学習された見えに近いほどスコアが増加
• Root位置からのスケール・位置ずれ
• 学習された位置からずれるほどスコアが減少
見えに関する特徴ベクトル(HoG)
位置ずれに関する特徴ベクトル(学習位置に極値をとる二次関数)
Deformable parts models
潜在変数モデル
• パーツの相対位置・スケール=潜在変数
• Root位置𝑥に関して抽出される特徴ベクトルΦ 𝑥, 𝑧 は
潜在変数𝑧によって変化
• 交互最適化によりパラメタを学習
• パーツ配置(潜在変数)を固定してフィルタ係数を学習
• フィルタによく反応するパーツの配置を学習
見えに関する特徴ベクトルと位置ずれに関する特徴ベクトルを全パーツにわたってつなげたもの
Deformable parts models
Tree-structured DPM
• Face detection, pose estimation and landmark
localization in the wild [Zhu+, CVPR2012]
• 顔検出だけでなく,顔向き推定,顔特徴点検出もできる
Deformable parts models
Tree-structured DPM
• 顔向き分だけパーツモデルがある
• 異なる顔向き間でパーツフィルタを共有
画像𝐼に配置𝐿,向き𝑚の顔があるかどうかのスコア
𝐴𝑝𝑝𝑚: 向きmに関する見え(パーツフィルタへの応答)
𝑆ℎ𝑎𝑝𝑒𝑚: 向きmに関する配置(パーツの位置関係制約)
顔検出スコア
性能評価における課題と解決策
性能評価における課題と解決策
性能評価の方法
• “Intersection over union above 50%”
•𝑅 𝐵𝑝∩𝐵𝑔𝑡
𝑅 𝐵𝑝∪𝐵𝑔𝑡> .5のときtrue positive
𝐵𝑔𝑡 𝐵𝑝
ピクセルごとに評価するわけではない
性能評価における課題と解決策
正解マスクの与え方
• あるデータセットで学習された検出器は,
別のデータセットでfalse negativeを出しやすい
• 「顔」と判断する基準が異なる場合,false
positive/negative を出しやすい
頭部全体を検出する検出器は顔特徴点を囲む正解マスクより大きな領域を検出してしまうのでよくない
性能評価における課題と解決策
Annotation policy
• 少なくとも片方の目が見えている顔が対象
• 観測されている全landmarkを囲む最小のbounding
boxの短辺が15pixel以上の顔が対象
見落とされていた顔も結構あったとのこと(大変)
性能評価における課題と解決策
Bounding box policy
• Global rigid transformation
• Bounding boxの与え方の違いを吸収するための後処理
• 1) テスト対象のデータセットの一部分を取り出す
• 2) ground truth masksとdetection resultsの重なりが
最も大きくなるscaling, translationを学習する
学習時のbounding box 評価時のbounding box Global rigid transformation
性能評価における課題と解決策
Different scale ranges
• 扱う顔のサイズは手法・データセットで異なる
• 評価対象となる顔の最小サイズ 𝛼
• 検出される顔の最小サイズ 𝛽
• 𝛽 = 0.5 ⋅ 𝛼2となるように𝛽を設定
• 評価対象となる顔の半分以上の面積の顔を対象とする
• 𝛼以下のサイズの顔が正しく検出された場合,’ignore’ラ
ベルを与え,false positiveと判定しないようにする
性能評価における課題と解決策
実験結果
• 全体的に性能が向上
• AP 77.14 - > AP 85.57 に!
補正前 補正後
性能評価における課題と解決策
顔検出におけるチューニング
• 顔向きの解像度
• 学習データのサイズ
• 特徴マップの種類
• 弱識別器の数
• Non-maximum supressionのパラメタ
性能評価における課題と解決策
顔検出におけるチューニング
顔向きの解像度を高くしていくと割とすぐにサチる
学習サンプル数もスコアに大きく影響ただし,DPM , all sample だと学習時間が1週間とかになる
性能評価における課題と解決策
顔検出におけるチューニング
色(LUV)や肌っぽさ(Skin)が結局重要
弱識別器の数はそんなに増やしてもしようがなさそう
性能評価における課題と解決策
顔検出におけるチューニング
• Non-maximum suppression
• 重なる検出結果のうち一番検出値が強いものを残す
• 重なりを厳しく判定(たとえば1割でも重なっていたら
suppress)すると,性能が大幅に向上
緑と白の検出結果は重なっているか?
まとめ
• 顔検出手法のおさらい
• Rigid template
• Deformable parts model
• 性能評価における課題と解決策
• 顔検出におけるチューニング
おまけ
Python+OpenCVで顔検出
おまけ
ソフトウエア
• DPM本家
• http://www.cs.berkeley.edu/~rbg/latent/
• Matlab
• Parts-based のfacial landmark detection [Uricar+, 12]
• http://cmp.felk.cvut.cz/~uricamic/flandmark/
• C++, Python
• Tree-structured DPM
• http://www.ics.uci.edu/~xzhu/face/
• Matlab