web-dev-qa-db-ja.com

Viola-Jonesの顔検出方法はどのように機能しますか?

Viola-Jonesの顔検出方法がどのように機能するかを簡単に説明してください。

22
BlackShadow

Viola-Jones検出器は、いくつかのweak検出器の強力なバイナリ分類器ビルドです

Each weak detector is an extremely simple binary classifier

学習段階では、Adaboostを使用して目的のヒット率/ミス率(または精度/再現率)が得られるように、弱い検出器のカスケードがトレーニングされます。オブジェクトを検出するには、元の画像をいくつかの長方形パッチに分割し、それぞれを送信しますカスケードへ

長方形の画像パッチがすべてのカスケードステージを通過する場合、「ポジティブ」として分類されます。プロセスは異なるスケールで繰り返されます

enter image description here

実際、低レベルでは、オブジェクト検出器の基本コンポーネントは、元の画像の特定のサブ領域に対象のオブジェクトのインスタンスが含まれているかどうかを示すために必要なものです。これは、バイナリ分類器が行うことです。

基本的な弱分類器は、非常に単純な視覚的特徴に基づいています(この種の特徴は、しばしば「ハールのような特徴」と呼ばれます)。
enter image description here

ハールのような特徴は、特徴の残りの領域の合計から特徴のサブ領域の合計を減算することによって計算されるローカル特徴のクラスで構成されます

enter image description here
これらの機能の特徴は、計算が簡単で、インテグラルイメージを使用すると、非常に効率的に計算できることです。

Lienhartは、ねじれたHaarのような機能の拡張セットを導入しました(画像を参照)

enter image description here
これらは45度ねじれた標準のハールのような特徴です。 Lienhartは元々、ツイストチェッカーボードのHaarのような機能(x2y2)を使用しませんでした。それらが表す対角要素は、ツイスト機能を使用して簡単に表現できるためですが、この機能のツイストバージョンも実装して使用できることは明らかです。 。

これらのねじれたハールのような特徴は、45度ねじれた積分画像を使用して高速かつ効率的に計算することもできます。実装上の唯一の問題は、ツイストフィーチャを整数値に丸めて、ピクセル境界に揃える必要があることです。このプロセスは、大きいウィンドウまたは小さいウィンドウのHaarのような機能をスケーリングするときに使用される丸めに似ていますが、45度のツイスト機能の場合、機能の高さと幅に使用されるピクセルの整数は、ピクセルの対角座標は常に同じ対角ピクセルセット上にあります

enter image description here
これは、利用可能なさまざまなサイズの45度のツイストフィーチャの数が、標準の垂直および水平に配置されたフィーチャと比較して大幅に削減されることを意味します。

したがって、次のようなものがあります。 enter image description here

式について、積分画像を使用したHaarのような特徴の高速計算は次のようになります。

enter image description here

最後に、 これはc ++の実装です 使用 ViolaJones.h by Ivan Kusalic

完全なc ++を表示するには プロジェクトはここに移動

78
cMinor

Viola-Jones検出器は、いくつかの弱い検出器の強力なバイナリ分類器ビルドです。各弱検出器は非常にシンプルなバイナリ分類器です

検出は以下の部分で構成されています。

Haar Filter:画像から特徴を抽出してcalssify(特徴はアドホックドメインの知識をエンコードするように機能します)

Integral Image:非常に高速な機能評価が可能

Cascade Classifier:カスケード分類子は、複数のステージのフィルターで構成され、画像(画像のスライディングウィンドウ)を顔に分類します。

以下は、画像内の顔を検出する方法の概要です。

enter image description here

検出ウィンドウは、画像全体の抽出機能をシフトします(haar filterによって計算されたIntegral Imageによって、抽出された機能をCascade Classifierに送信して、顔かどうかを分類します)。スライディングウィンドウは、ピクセルごとにシフトします。ウィンドウがシフトするたびに、ウィンドウ内の画像領域はカスケード分類器を通過します。

Haar Filter:フィルターがeyesbridge of the noseなどの機能を抽出できることを理解できます。

enter image description here

Integral Image:非常に高速な機能評価が可能

enter image description here

Cascade Classifier

カスケード分類器は、下の図に示すように、フィルターの複数のステージで構成されています。スライディングウィンドウがシフトするたびに、スライディングウィンドウ内の新しい領域が段階的にカスケード分類器を通過します。入力領域がステージのしきい値を超えない場合、カスケード分類子はその領域を顔としてすぐに拒否します。領域がすべてのステージを正常に通過した場合、その領域は顔の候補として分類されます。これは、さらに処理することで改善できます。

enter image description here

詳細については:

最初に、ソースペーパー 単純な機能のブーストカスケードを使用した迅速なオブジェクト検出 を読んで、メソッドの概要を理解することをお勧めします。

はっきりと理解できない場合は、 Viola-Jones Face Detection または Implementing the Viola-Jones Face Detection Algorithm または Study of Viola-Jones)を参照してください。リアルタイム顔検出器 詳細については。

ここにpythonコード Paul ViolaとMichael J. Jonesによる顔検出アルゴリズムのPython実装 があります。

mATLABコード ここ

3
Jayhello