私はOpenCV(オープンソースコンピュータービジョンライブラリ)で顔検出を実験してきましたが、OpenCVにはいくつかの顔があるため、Haarカスケードを使用して顔を検出できることがわかりました。しかし、いくつかのLBPカスケードもあることに気付きました。いくつかの調査を行った結果、LBPはLocal Binary Patternsの略であり、 OpenCV Face Detection Documentation によると、顔検出にも使用できることがわかりました。
私が知りたいのは、どちらが良いですか?どれがより速く実行され、どれがより正確ですか? LBPはより高速に実行されるようですが、それについても100%確信はありません。ありがとう。
LBPは高速ですが(数倍高速)、精度は低くなります。 (Haarより10-20%少ない)。
組み込みシステムで顔を検出する場合は、LBPがすべての計算を整数で行うため、選択肢であると思います。 Haarはフロートを使用しますが、これは組み込み/モバイルのキラーです。
LBPカスケードは、Haarカスケードと同様(またはそれ以上)に実行するようにトレーニングできますが、箱から出してすぐに、Haarカスケードは約3倍遅くなり、データによっては、顔。顔検出が95%以上の精度範囲で動作できることを考えると、この精度の向上は非常に重要です。
[〜#〜] muct [〜#〜] データセットを使用した場合の結果を以下に示します。
グラウンドトゥルースとOpenCVの検出座標の間に少なくとも50%のオーバーラップがある場合、正しい検出が記録されます。
Cascade:haarcascade_frontalface_alt2.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3635 | 55 | 63 | 5 |
|---------------------------------------------------|
Time:4m2.060s
対:
Cascade:lbpcascade_frontalface.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3569 | 106 | 77 | 3 |
|---------------------------------------------------|
Time:1m12.511s
私の意見では、同じトレーニングデータセットとパラメーターについては、LBPトレーニングには数分かかり、HAARトレーニングには数日かかるため、検出関連のすべてのタスクについてLBPを調べる必要があります。
あなたが尋ねた質問は、検出されているものの種類、検出中に使用されたトレーニング設定とパラメーター、およびカスケードをテストするための基準に応じて異なるパフォーマンスを持ちます。
HAARカスケードとLBPカスケードの両方の精度は、トレーニングに使用されるデータセット(正および負のサンプル)およびトレーニング中に使用されるパラメーターに依存します。
Lienhart et al、2002 によると、顔検出の場合:
-numStages
、-maxDepth
および-maxWeakCount
パラメータは、必要な-minHitRate
および-maxFalseAlarmRate
。また、detectMultiScale()で使用されるフラグは、特定のハードウェア構成で速度と精度を大幅に変更します。
カスケードをテストするには、データセットとk-fold cross validation などの方法で解決する必要があります。
役に立つかもしれません:
Simd Library があり、HAARおよびLBPカスケード分類子の 実装 があります。 OpenCVの標準のHAARおよびLBPカスケードを使用できます。この実装には、SSE4.1、AVX2、AVX-512、およびNEON(ARM)を使用したSIMD最適化があるため、元のOpenCV実装よりも2〜3倍速く動作します。
また、トレーニング段階では、LBPはHaarよりも高速です。 2000 posサンプルと300ネガサンプル、Haarタイプを使用したトレーニングでは、完了まで約5〜6日かかりましたが、LBPでは数時間しかかかりませんでした。