顔の有無を識別する「識別器」には、「AdaBoost」(アダブースト、エイダブースト)という機械学習のアルゴリズムを採用しました。AdaBoostでは、一つひとつの精度はあまり良くない識別器を複数つなげることで、全体として精度の良い識別器を構成します。精度のあまり良くない一つひとつの識別器を「弱識別器」、複数の弱識別器から成る精度の良い識別器を「強識別器」と呼びます。

 まず、AdaBoostによる識別器の作成過程を見ていきましょう。かなり簡略化した説明なので、詳細について関心のある方は以下の論文などもご参照ください。

1)「HOG特徴量とBoostingを用いた人検出」,中部大学工学部情報工学科藤吉研究室
2)Paul Viola and Michael J. Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features", IEEE CVPR, 2001.

 例えば、○×クイズ大会に参加するチーム(強識別器)を決定するとします。チームのメンバー候補(弱識別器)はk人で、その中からd人を選びます。メンバー候補に○×クイズを解いてもらい、その得点でメンバーを選ぶものとします。

[画像のクリックで拡大表示]

 このとき、同じような問題に強いメンバーを何人も選ぶよりは、お互いに得意・不得意を補間し合えるようなメンバーを選んだ方が、チーム全体でさまざまなジャンルの問題に対応できそうです。つまり、メンバーを1人選抜するごとに各問題の配点(重み付け)を変更してから次のメンバーを選抜することによって、多様なジャンルに対応できるチームを構成することができるのです。

 チーム(強識別器)メンバーを選抜するに当たり、AdaBoostではメンバー候補(弱識別器)と、問題およびその答え(学習サンプル)を用意する必要があります。学習サンプルは、顔検出の場合、顔画像・非顔画像とラベル(顔画像か非顔画像か区別するためのもの)になります。弱識別器は後で説明する「特徴量」を用いて作成します。

 では、実際にどのようにメンバーが選ばれてチームが構成されるかを見ていきましょう。最初は、各問題の配点を同じにしておきます。1人目のメンバーは、単純に最も多くの問題に正解した人(最高得点を取った人)が良さそうです。

[画像のクリックで拡大表示]

 ということで、1人目のチームメンバーは上の図で最高得点だった「2さん」になりました。メンバーになった際の得点は、チーム内での「発言力」として影響します。50点を取った人と80点を取った人では、後者の意見が優先されるわけです。