問題タブ [viola-jones]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - Viola-Jonesの顔検出は18万の機能を主張します
私はViola-Jonesの顔検出アルゴリズムの適応を実装してきました。この手法は、画像内に24x24ピクセルのサブフレームを配置し、その後、可能な限りすべてのサイズですべての位置に長方形のフィーチャを配置することに依存しています。
これらの機能は、2つ、3つ、または4つの長方形で構成できます。次の例を示します。
彼らは、網羅的なセットが180k以上であると主張しています(セクション2):
検出器の基本解像度が24x24であることを考えると、長方形の特徴の網羅的なセットは非常に大きく、180,000を超えます。Haarの基礎とは異なり、長方形の特徴のセットは不完全であることに注意してください。
以下の記述は、この論文では明示的に述べられていないため、私の側の仮定です。
- 2つの長方形の機能が2つ、3つの長方形の機能が2つ、4つの長方形の機能が1つだけです。この背後にある論理は、強調表示された長方形の違いを観察していることであり、色や輝度などを明示的に観察しているわけではありません。
- フィーチャタイプAを1x1ピクセルブロックとして定義することはできません。少なくとも1x2ピクセルである必要があります。また、タイプDは少なくとも2x2ピクセルである必要があり、このルールは他の機能にも適用されます。
- 中央のピクセルは分割できないため、フィーチャタイプAを1x3ピクセルのブロックとして定義することはできません。また、それ自体からそれを差し引くことは1x2ピクセルのブロックと同じです。このフィーチャタイプは、偶数の幅に対してのみ定義されます。また、フィーチャタイプCの幅は3で割り切れる必要があり、このルールは他のフィーチャにも適用されます。
- 幅や高さが0のフィーチャを定義することはできません。したがって、xとyを24からフィーチャのサイズを引いた値まで繰り返します。
これらの仮定に基づいて、私は徹底的なセットを数えました:
結果は162,336です。
Viola&Jonesが話す「180,000以上」を概算するために私が見つけた唯一の方法は、仮定#4を削除し、コードにバグを導入することです。これには、4行をそれぞれ次のように変更することが含まれます。
その結果、180,625になります。(これにより、機能がサブフレームの右または下、あるいはその両方に接触するのを効果的に防ぐことができます。)
もちろん、質問です。彼らは実装に誤りを犯しましたか?サーフェスがゼロのフィーチャを検討することは意味がありますか?それとも私はそれを間違った方法で見ていますか?
c++ - Viola-Jones顔検出法はどのように機能しますか?
Viola-Jones顔検出法がどのように機能するかを簡単に説明してください。
opencv - ヴィオラ・ジョーンズの顔検出フレームワーク
顔認識システムを設計するために、Viola-Jones の顔検出アルゴリズムの研究を始めたところです。私が理解したすべてのことから、「ピクセルの合計」というフレーズに関して混乱しています。指定されたピクセルの色の合計または指定されたピクセルの距離の合計を意味しますか?
opencv - 顔検出におけるハールカスケードとLBPカスケード
私はOpenCV(Open Source Computer Vision Library)で顔検出を実験してきましたが、OpenCVで提供されている顔がいくつかあるため、Haarカスケードを使用して顔を検出できることがわかりました。ただし、LBPカスケードもいくつかあることに気づきました。調査を行った結果、LBPはLocal Binary Patternsの略であり、OpenCV顔検出ドキュメントによると顔検出にも使用できることがわかりました。
私が知りたいのは、どちらがうまくいくかということです。どちらがより速く実行され、どちらがより正確ですか?LBPのパフォーマンスは速いようですが、それについても100%確信はありません。ありがとう。
machine-learning - P. Viola、M. Jones フレームワークで最適なしきい値を計算する最良の方法
P. Viola と M. Jones の検出フレームワークを C++ で実装しようとしています (最初は、単にシーケンス分類子 - カスケード バージョンではありません)。最も重要な AdaBoost コア アルゴリズムにもかかわらず、必要なすべてのクラスとモジュール (たとえば、統合イメージ、Haar 機能) を設計したと思います。
私は P. Viola と M. Jones の原著論文と他の多くの出版物を読みました。残念ながら、1 つの弱分類器に最適なしきい値を見つける方法をまだ理解していませんか? 「加重中央値」および「ガウス分布」アルゴリズムと多くの数学公式への参照はわずかしか見つかりませんでした...
OpenCV Train Cascade モジュール ソースをテンプレートとして使用しようとしましたが、非常に包括的であるため、コードのリバース エンジニアリングを行うには非常に時間がかかります。また、Adaptive Boosting の考え方を理解するために、独自の簡単なコードをコーディングしました。
問題は、1 つの弱分類器の最適なしきい値を計算する最良の方法を説明してもらえますか?
以下に、Google で見つかったサンプルから書き直した AdaBoost 疑似コードを示しますが、それが正しいアプローチであるかどうかは確信が持てません。1 つの弱分類器の計算は非常に遅く (数時間)、特に最適なしきい値の計算方法に疑問があります。
助けてくれてありがとう
image-processing - AdaBoost アルゴリズムを使用した Viola Jones は顔検出でどのように機能しますか?
Viola Jones メソッドについてはよく読みましたが、Rectangle 機能の「弱い分類子」、「強い分類子」、「サブ ウィンドウ」、およびそれらの定義についてはまだ理解していません。そして、「閾値」はどうですか?しきい値を知るにはどうすればよいですか? 誰でも私を助けることができますか?前にありがとう
opencv - OpenCV haarcascade xml を使用した Viola-Jones 検出アルゴリズム
Viola Jones 検出器を実装しようとしています。分類器をトレーニングするのに十分な画像や時間がないため、これらの OpenCV を使用することにしました。
これまでのところ、全体haarcascade_frontface_alt.xml
をメモリ内の構造体にロードし、高速領域合計用の Integral Image を作成し、検出器の基本的なアルゴリズムを作成することができました。しかし、期待どおりに機能していません。
したがって、誰かが Viola Jones 検出器がどのように機能するかを知っていて、OpenCV がその構造をどのように使用するかを知っている場合は、私の仮定を確認または否定してください。
1、インテグラル イメージは、白の 0->1 の範囲の float 値で計算されます
2、すべてのフィーチャについて、長方形内の面積を取得し、重みを掛けて、すべての長方形と合計します
3、合計が > しきい値の場合、left_val が合計されますさらに、right_val が使用されていない場合
4、ステージ内のすべての分類子の合計が stage_threshold よりも大きい場合、顔である可能性があるため、次のステージに進みます。使用されていない場合、ブレーク
5、すべてのステージ、検出ウィンドウ、およびスケールについて繰り返します...
これまでのところ、顔を含むものを除いて、あらゆる種類の検出された領域を取得しています...
openCV カスケードの使用に関する私の仮定が間違っている場合は、助けてください。ありがとう。
opencv - ヴィオラ・ジョーンズの顔検出 - オブジェクト/顔サイズのバリエーション
私はヴィオラ・ジョーンズの方法を理解しようとしていますが、ほとんど理解しています。
より良いパフォーマンスを達成するために、強力な分類器にブーストされ、レイヤー/カスケードに編成された単純な Haar のような機能を使用します (明らかな「非オブジェクト」領域を気にしないでください)。
インテグラル イメージを理解していると思います。フィーチャの値がどのように計算されるかを理解しています。
私が理解できない唯一のことは、アルゴリズムが顔のサイズのバリエーションをどのように扱っているかです.
私が知る限り、彼らは画像上をスライドする 24x24 サブウィンドウを使用し、その中でアルゴリズムが分類器を通過し、その上に顔/オブジェクトがあるかどうかを判断しようとします。
私の質問は、1 つの面が 10x10 サイズで、他の面が 100x100 の場合はどうなるかということです。その後どうなりますか?
そして、これらの最初の 2 つの機能 (カスケードの最初の層) が何であるか、それらがどのように見えるかを知りたくてたまらない (Viola&Jones によると、これらの 2 つの機能は顔を見逃すことはほとんどなく、間違ったものの60%)?どのように??
そして、画像内のさまざまな顔サイズのこれらの統計で機能するように、これらの機能をどのように構築できるのでしょうか?
何かが足りないのでしょうか、それともすべて間違っているのでしょうか?
十分に明確でない場合は、混乱をより適切に説明しようとします。
computer-vision - Viola Jones AdaBoost が起動前にメモリ不足に陥る
顔検出に Viola Jones アルゴリズムを実装しています。アルゴリズムの AdaBoost 学習部分の最初の部分に問題があります。
元の論文の状態
弱分類器選択アルゴリズムは次のように進行します。各機能について、例は機能値に基づいて並べ替えられています。
私は現在、2000 枚のポジティブ画像と 1000 枚のネガティブ画像の比較的小さなトレーニング セットを使用しています。この論文では、10,000 もの大規模なデータ セットを持つことについて説明しています。
AdaBoost の主な目的は、合計 160,000 以上の 24x24 ウィンドウ内の機能の数を減らすことです。アルゴリズムはこれらの機能に作用し、最適なものを選択します。
この論文では、各特徴について、各画像でその値を計算し、値に基づいて並べ替えると説明しています。これが意味することは、機能ごとにコンテナーを作成し、すべてのサンプルの値を保存する必要があるということです。
私の問題は、10,000 個の機能 (それらのわずか 6%) を評価しただけでプログラムがメモリ不足になることです。すべてのコンテナーの全体的なサイズは、最終的に 160,000*3000 になり、数十億になります。メモリ不足にならずにこのアルゴリズムを実装するにはどうすればよいですか? ヒープ サイズを増やしたところ、3% から 6% になりました。これ以上増やしてもうまくいかないと思います。
この論文は、これらのソートされた値がアルゴリズム全体で必要であることを暗示しているため、各機能の後でそれらを破棄することはできません。
これまでの私のコードは次のとおりです
c++ - ヴィオラ・ジョーンズの顔検出を使用する前のクロッピング
私は顔検出を改善しようとしており、OpenCV でビオラ ジョーンズ アルゴリズムの実装を使用しています。希望する結果が得られないため、cascade.detectMultiScale 関数を使用する前に前処理を行いたいと考えています。私が使用している画像には、背景のある人物の上半身が含まれています。顔だけを含むトリミングされた画像で cascade.detectMultiScale() 関数を使用すると役立ちますか?