「パターン認識」による顔検出の基本的な流れ

顔検出の目的は、画像中を探索して「人間の顔の映っている領域」を探してくることです。その基本的な処理の流れとしては、対象の静止画像一枚に対して、画像全体に顔の大きさの探索窓(顔検出処理を行う判定領域)を動かし、探索窓が通過する座標ごとに「探索窓内の画像が、顔画像であるどうか」の判定を行います。こうした探索窓領域ごとの判定処理を画像中すべてに行うことで、最終的に顔の領域だと判定された探索窓の場所を、検出した顔の位置として教えてくれるのが顔検出の処理の流れです。

探索窓

探索窓ごとに「この画像は顔の画像か顔ではない画像(非顔)か」を判定するわけですが、このように「ある入力データ(ここでは判定領域ごとに切り取った顔画像)が数あるパターンの中である特定の1つパターンに相当すると計算機により判定する」技術を、一般的に「パターン認識」と呼びます。例えば、声をマイクから入力してそれがどんな日本語の文章かを判定するという「音声認識」もパターン認識技術で実現されています。コンピュータビジョン分野でも、最新技術の多くがこのパターン認識により実現されています。

過去のパターン認識手法:「テンプレートマッチング」

旧来のパターン認識は、あらかじめ用意したテンプレートと入力画像がどれくらい似ているかの類似度を単純に比較する「テンプレートマッチング」という手法で実現されていました。テンプレートマッチングでは、テンプレートとほぼ同じ入力画像が得られた場合は正しく判定されます。ただ、テンプレートマッチングでは、入力画像とテンプレートを単純比較しているにすぎません。よって、入力画像のノイズや照明変化が大きい場合など、テンプレート画像からの変化が激しい画像に対しては、途端にパターン認識の正解率が下がってしまいます。また、テンプレートマッチングではパターン認識した対象ごとにテンプレートが必要で、顔検出のように「どんな人間でも顔として検出してくれる」という目的は達成するには、下手すれば世界中の人間の顔のテンプレートを用意する事態にもなりかねません。

そこで登場してきたのが機械学習という技術です。機械学習とは、大量のサンプルデータを用いて、パターン認識を実際に行う「識別器」のパラメータの値を決定させることです。識別器では「特徴量」という、入力データからパターン識別が行い易い、つまり、パターンAとパターンBを識別しやすい特徴的な値を用いて、この特徴量がパターンAなのかパターンBなのかを判定します。例えば画像だと、色の分布であるヒストグラムであるとか、ある領域の平均の色の値ですとか、元データから出た計算した統計的な値を特徴量として使用します。

パターン認識のイメージ図

パターン認識用の識別器の最適なパラメータを決めることを「学習する」と呼びます。また、学習に用いるサンプルデータのことを「学習データ」と呼びます。この大量の学習データを用いて機械学習の各種アルゴリズムを用いる事で、学習前は値が定まっていない識別器のパラメータの値を確定させることが、「学習」という作業に相当します。

通常、学習データには、正解データと非正解データを共に大量に用意しておく必要があります。なぜなら、少数のデータだとそのデータに似たようなデータにしか対応できない識別器が出来上がってしまうわけです。従って、バリエーションが豊富な大量のデータにより学習を行うことで、学習データに含まれていたデータのバリエーションに対応が可能な識別器を作成することができます。このように「(計算)機械」において、高精度の識別器ができあがる手続きが、人間の学習の過程に類似しているので「機械学習」と呼ばれるわけです。

例えば顔検出の場合、正解データには年齢や性別や国籍などがそれぞれ違う、大量の人間の顔の画像を用意します。一方、非正解データには人間の顔ではないこれまたさまざまな画像を用意します。正解データには「正解」とラベル付けしておき、非正解データには「不正解」と同じくラベル付けしておきます。そして、これらの正解か不正解かがラベル付けされた学習データを用いて、学習アルゴリズムを実行します。つまり機械学習とは、「今後どのような新しい特徴量が入力されてもパターン認識結果の間違いが一番小さくなるように、大量の学習データ群をもとに識別器の最適パラメータを計算する」ことに相当します。