Viola-Jones顔検出法がどのように機能するかを簡単に説明してください。
2 に答える
Viola-Jones検出器は、いくつかの弱い検出器の強力なバイナリ分類器ビルドです。
Each weak detector is an extremely simple binary classifier
学習段階では、弱い検出器のカスケードがトレーニングされ、Adaboostを使用して目的のヒット率/ミス率(または適合率/再現率)が得られます。オブジェクトを検出するために、元の画像がいくつかの長方形のパッチに分割され、それぞれが送信されます。カスケードへ
長方形の画像パッチがすべてのカスケードステージを通過する場合、それは「ポジティブ」として分類されます。このプロセスはさまざまなスケールで繰り返されます。
実際、低レベルでは、オブジェクト検出器の基本コンポーネントは、元の画像の特定のサブ領域に対象のオブジェクトのインスタンスが含まれているかどうかを示すために必要なものです。それが二項分類器が行うことです。
基本的な弱い分類器は、非常に単純な視覚的特徴に基づいています(これらの種類の特徴は、「Haar-like特徴」と呼ばれることがよくあります)。
Haarのような特徴は、特徴の残りの領域の合計から特徴のサブ領域の合計を差し引くことによって計算されるローカル特徴のクラスで構成されます。
これらの機能は、計算が簡単で、積分画像を使用すると非常に効率的に計算できるという特徴があります。
Lienhartは、ツイストHaarのような機能の拡張セットを導入しました(画像を参照)
これらは、45度ねじれた標準のハールのような特徴です。Lienhartは、ツイストチェッカーボードのHaarのような特徴(x2y2)を元々使用していませんでした。これは、それらが表す対角要素がツイストフィーチャーを使用して簡単に表現できるためですが、このフィーチャーのツイストバージョンも実装および使用できることは明らかです。 。
これらのねじれたHaarのような特徴は、45度ねじれた積分画像を使用して高速かつ効率的に計算することもできます。唯一の実装上の問題は、ツイストフィーチャーを整数値に丸めて、ピクセル境界に揃える必要があることです。このプロセスは、大きいウィンドウまたは小さいウィンドウのHaarのようなフィーチャをスケーリングするときに使用される丸めに似ていますが、1つの違いは、45度のツイストフィーチャの場合、フィーチャの高さと幅に使用されるピクセルの整数は、ピクセルの対角座標は、常に同じピクセルの対角セット上にあります
これは、利用可能なさまざまなサイズの45度ツイスト機能の数が、標準の垂直および水平に配置された機能と比較して大幅に削減されることを意味します。
したがって、次のようなものがあります。
式について、積分画像を使用したHaarのような特徴の高速計算は次のようになります。
最後に、IvanKusalicによるViolaJones.h を使用するc++実装を示します。
完全なC++ プロジェクトを確認するには、こちらにアクセスしてください
Viola-Jones検出器は、いくつかの弱い検出器の強力なバイナリ分類器ビルドです。各弱い検出器は非常に単純な二項分類器です
検出は以下の部分で構成されています。
Haar Filter
:画像から特徴を抽出して計算します(特徴はアドホックドメイン知識をエンコードするように機能します)
Integral Image
:非常に高速な機能評価が可能
Cascade Classifier
:カスケード分類器は、画像(画像のスライディングウィンドウ)を顔として分類するために、複数のステージのフィルターで構成されています。
以下は、画像内の顔を検出する方法の概要です。
検出ウィンドウは、画像抽出フィーチャ全体を移動します(抽出されたフィーチャをに送信して
haar filter
計算し、顔かどうかを分類します)。スライディングウィンドウはピクセルごとにシフトします。ウィンドウがシフトするたびに、ウィンドウ内の画像領域はカスケード分類器を通過します。Integral Image
Cascade Classifier
Haar Filter
eyes
:フィルターが、などの特徴を抽出できることを理解できますbridge of the nose
。
Integral Image
:非常に高速な機能評価が可能
Cascade Classifier
:
カスケード分類器は、次の図に示すように、フィルターの複数のステージで構成されています。スライディングウィンドウがシフトするたびに、スライディングウィンドウ内の新しい領域は段階ごとにカスケード分類器を通過します。入力領域がステージのしきい値を超えない場合、カスケード分類子はその領域を面としてすぐに拒否します。領域がすべてのステージを正常に通過した場合、その領域は顔の候補として分類され、さらに処理することで洗練される可能性があります。
詳細については:
まず、この方法の概要を理解するために、ソースペーパー「単純な機能のブーストされたカスケードを使用した迅速なオブジェクト検出」を読むことをお勧めします。
明確に理解できない場合は、Viola-Jones顔検出またはViola-Jones顔検出アルゴリズムの実装、またはViola-Jonesリアルタイム顔検出器の研究で詳細を確認できます。
これは、PaulViolaとMichaelJ.Jonesによる顔検出アルゴリズムのPythonコードPython実装です。
ここにmatlabコード。