web-dev-qa-db-ja.com

顔認識プログラムはどのように機能しますか?

プログラムはどのような流れをたどりますか?

21
Aaron

非常に大まかに言えば、処理段階は次のようになります。

  1. 顔の位置を検出する
  2. 顔を正規化する
  3. 検出された各顔の特徴を収集します
  4. 機能を機械学習アルゴリズムにフィードする

ステップ1は通常、古典的な Viola&Jones顔検出アルゴリズム を使用して実行されます。それは非常に高速で信頼性があります。

手順1で見つかった面は、明るさ、コントラスト、サイズが異なる場合があります。処理を簡素化するために、それらはすべて同じサイズにスケーリングされ、露出の違いはステップ2で補正されます(たとえば、ヒストグラム均等化を使用して)。

ステップ3には多くのアプローチがあります。初期の顔検出器は、特定の位置(目の中心、鼻の端、唇の端など)を見つけ、それらの間の幾何学的な距離と角度を認識の特徴として使用しようとしました。私が読んだところによると、これらのアプローチは非常に高速でしたが、それほど信頼できるものではありませんでした。

より最近のアプローチである「固有顔」は、顔の写真をベース画像の線形結合として近似できるという事実に基づいています(トレーニング画像の大規模なセットからPCAを介して検出されます)。この近似の線形係数は、特徴として使用できます。このアプローチは、顔の一部(目、鼻、口)に個別に適用することもできます。すべての画像間のポーズが同じである場合に最適に機能します。一部の顔が左を向いている場合、他の顔が上を向いている場合、それはうまく機能しません。アクティブな外観モデルは、フラットな2D画像ではなく、完全な3Dモデルをトレーニングすることで、その影響に対抗しようとします。

ステップ4は比較的簡単です。各顔とトレーニング中に取得した顔画像の一連の番号があり、現在のテスト顔に「最も類似している」トレーニング顔を見つけたいと考えています。それが機械学習アルゴリズムが行うことです。最も一般的なアルゴリズムはサポートベクターマシン(SVM)だと思います。他の選択肢は、例えばです。人工ニューラルネットワークまたはk最近傍。機能が良ければ、MLアルゴリズムの選択はそれほど重要ではありません。

この主題に関する文献:

36
Niki

主成分分析顔認識 などのパターン認識システムのベースにあります。

3
Darin Dimitrov