3

特徴を抽出し、それを CvSVM の予測関数にフィードするスライディング ウィンドウを作成しています。しかし、私が遭遇したのは、svm.predict 関数が比較的遅いということです。

基本的に、ウィンドウはイメージ スケールの数に応じて固定ストライド長でイメージをスライドします。

  • 画像を移動する速度と各ウィンドウの特徴を抽出する速度には、約 1000 ミリ秒 (1 秒) かかります。
  • アダブーストによってトレーニングされた弱分類器を含めると、約 1200 ミリ秒 (1.2 秒) になりました
  • ただし、機能 (弱分類器によって肯定的にマークされている) を svm.predict 関数に渡すと、全体の速度が約 16000 ミリ秒 (16 秒) に低下しました。
  • TBB のスレッドを使用して svm.predict に渡す前に、最初にすべての「肯定的な」機能を収集しようとすると、おそらくスレッドの作成に必要なオーバーヘッドなどが原因で、19000 ミリ秒 (19 秒) になりました。

私の OpenCV ビルドは、TBB (スレッド) と OpenCL (GPU) の両方の機能を含むようにコンパイルされました。

OpenCV の SVM.predict 関数を高速化できた人はいますか?

統計としきい値調整のためにテスト データを使用してこの検出アルゴリズムを実行するのはイライラするので、私はかなり長い間この問題に悩まされてきました。

ここまで読んでくれてありがとう!

4

3 に答える 3

2

抽出している機能はわかりませんが、機能のサイズ (3780) から、HOG を抽出していると言えます。クラスには、HOG「予測」の非常に堅牢で最適化された高速な方法がありcv::HOGDescriptorます。あなたがする必要があるのは、

  1. HOG をトレーニング用に抽出する
  2. それらをsvmLight形式に入れます
  3. svmLight 線形カーネルを使用してモデルをトレーニングする
  4. 予測に必要な 3780 + 1 次元ベクトルを計算する
  5. ベクトルをオブジェクトsetSvmDetector()のメソッドにフィードするcv::HOGDescriptor
  6. 検出のための使用detect()またはdetectMultiScale()方法

次のドキュメントには、あなたがやろうとしていることを達成する方法についての非常に良い情報があります: http://opencv.willowgarage.com/wiki/trainHOGただし、元のプログラムには小さな問題があることを警告する必要がありますが、それは教えていますこの問題に適切にアプローチする方法。

于 2013-04-24T12:58:35.577 に答える