Haar Cascadeによる顔検出の原理

Haar Cascade(識別器・分類器)による顔検出のアルゴリズム・仕組み・計算方法についてまとめました。

Haar Cascadeとは

Haar Cascadeは、物体検出に使われる識別器の1つです。
有名な画像処理ライブラリOpenCVにも実装されています。
アルゴリズムがシンプルかつ処理時間も高速なため、カメラ映像からのリアルタイム顔検出などに使われています。

Haar Cascadeではその名の通り、Haar-like特徴を弱識別器として、カスケード型識別器を作成します。

入力画像から顔を検出するまでの処理


※探索窓画像・・・入力画像から探索窓の領域をトリミングした画像

カスケード型識別器(Cascade detector)は、検出精度の異なる複数の強識別器(優秀な弱識別器を組み合わせて強化した識別器)を連結した識別器です。各強識別器で入力画像が顔画像であるかどうか順番に判別していきます。

探索窓画像を入力し、強識別器1~Nの全てで正解(顔)と判別された場合のみ顔画像であると判別します。
逆に途中で非正解(非顔)と判別されたら非顔画像と結論付けて処理を終えます。

このように、途中で非顔画像を弾いて処理を終了することで全体的な処理を高速化しています。
(詳細はカスケード型識別機の原理を参照)

カスケード型識別器の作り方

カスケード型識別器の作成手順は以下の通りです。

説明
1 N個の識別器それぞれに対して目標値(最小検出率dと最大許容誤検出率f)を設定します。
2 訓練データ(顔・非顔画像、教師データ)を多数用意します。
3 N個の強識別器をAdaBoost学習で順に作成します。
3.1 i番目の強識別器に弱識別器(Haar-like特徴)を1つ追加します。(最初はi=1)
3.2 強識別器に訓練データを与えて、判別を行わせます。
3.3 判別結果が目標値dを満たすよう、強識別器の閾値を下げます。(※誤検出率は高くなる)
3.4 誤検出率が目標値fを満たせばAdaBoost学習を終了し、手順3.5に進みます。満たさなければ手順3.1に戻って学習を続けます。
3.5 判別を誤った非顔画像のみを、次の強識別器を求めるのに使用する非顔画像とします。
3.6 手順3.1に戻り、次の強識別器を作成します。(i=i+1)

手前にある強識別器に対しては最大許容誤検出率fを高めに設定します。

「Haar-like特徴」「AdaBoost学習」「カスケード型識別器」の詳細については下記事でそれぞれ解説しています。

【Haar-Like特徴量】原理と計算式・高速化
Haar-Like特徴量の基本的な原理や仕組みについてまとめました。
【機械学習】ブースト(boost・AdaBoost)の原理・計算式
機械学習で識別器の作成などに使われるブースト(boost・AdaBoost)のアルゴリズムや計算についてまとめました。
カスケード型識別器(分類器)の原理・計算式
この記事では、機械学習におけるカスケード型識別器(分類器)のアルゴリズムや計算についてまとめました。

参考文献
[1] Paul Viola, Michael Jones “Rapid Object Detection using a Boosted Cascade of Simple Features” (2001)

関連ページ

【画像処理入門】アルゴリズム&プログラミング
この記事では、画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。

コメント