画像中のグループが属するサブカルチャーを認識するアルゴリズムの論文で、人物検出手法として引用されていた論文を読んだので、簡単にまとめておきます。 タイトルは、「Poselets: Body Part Detectors Trained Using 3D Human Pose Annotations」です。
Poseletとは
「任意の姿勢の人物に対してある部分を切り出したもの」です。例えば、正面向きの顔であるとか、胴体の前で組んだ腕や肩越しの右横顔、といったものです。見えの異なる画像を用いてPoselet毎の識別器を学習し、腕や脚や胴体といったパーツの検出/セグメンテーションを行うことが目的となります。
H3Dデータセット
H3DはHuman in 3Dの略です。次のようなアノテーションが付けられた2000枚の画像セットになっているようです。ただし、実際には1000枚のオリジナルと、垂直軸に対して反転させた画像を合わせた枚数とのこと。また、画像収集元はFlickrだそうです。
- 19個のキーポイントの3次元座標
- 関節位置、目、鼻など
- 15種類のラベル
- 顔、髪、上半身、左腕など
アノテーション作業は1枚5分程度かかったということなので、1000枚のアノテーションをするのに大体3.5日くらいかかっている計算です。
Poselet候補の探索
H3Dデータセットを用いて、Poseletに含むべき候補を探索していきます。具体的には、Poseletはある位置、向き、スケールのパッチ画像の集合になっていて、3次元のキーポイント座標のL2ノルムで距離が近いものを候補として抽出していきます。
重みはパッチ画像の中心を平均としたガウシアンで、hはキーポイント数のミスマッチによるペナルティ項です。比較をする二つのうち、キーポイントiがどちらも見えている、もしくはどちらも見えていない時は0で、そうでないときは0より大きい定数となります。
3次元座標に基づいて候補を探索するので、姿勢は大体同じで見えが様々に異なる画像を集めることが出来るのが大きなアドバンテージと主張しています。
Poseletの学習
negative画像は、人を含まない画像からランダムに抽出したパッチ画像を使って、線形SVM+HoGで識別器を学習します。また、ブートストラップで、
- positiveとランダムに選んだnegative画像を用いる
- この識別器を人を含まない画像に適用してfalse positiveを集める
- false positiveを次のnegative画像として用いる
という流れで学習を行っています。
評価
正面もしくは背面向きの上半身、正面向きの顔といった比較的易しいと思われる部位の識別結果しか記載されてないのですが、H3DとPASCAL VOCのデータセットで評価し 基本的には正面向きで、正立した画像であれば検出可能という印象です。体向きや姿勢が異なる場合の画像だと、検出率がどうなるのかなというのが気になりました。 (2009年の論文なので最近では改善されているのかもしれません)
まとめ
胴体領域の検出に関する章は省きましたが、コアとなる所はざっと以上のような内容でした。
著者のHPでは、論文やスライドの他にも、データセットとソースコードが公開されているので(素晴らしい!)、時間があれば触ってみたいと思います。