初めて、静止画像のオブジェクト検出用の sw を実装しています。私の最初の目標は、単純な円を検出することです。次に、より複雑なオブジェクトに移動します。残念ながら、分類子を検証するときに問題があるようです。
私の選択は、HOG 記述子 (OpenCv を使用) と svm を分類子として (svmlight を使用) 使用することでした。コードはコンパイルされて動作しますが、おそらく svm に関して、私には奇妙に聞こえることがあります。
私は持っている:
- 48x48px の異なる円の 5 つの画像と 48x48px の円以外の 5 つの画像で構成されるトレーニング セット (確実な分類子を作成するには、それらの画像が少なすぎることはわかっていますが、すべてが機能することをテストするためのものです)
- 48x48 ピクセルの 4 つの画像 (トレーニングに使用したものと同じ大きさの円) と、複数のサイズの円やその他の幾何学的形状を含む、はるかに大きい (765x600 ピクセル) 1 つの画像で構成されるテスト セット。
何が起こるかというと:
- 画像が 48x48 の場合、トレーニング フェーズで使用される画像がテスト セットに含まれていても、テスト セットの円は検出されません。
- 画像 765x800 (任意のサイズの円を含む) では、トレーニング セットと同じサイズまたはそれより大きい円が正しく識別されます。
次のパラメータを使用しています。
- 独り占め: winSize=48x48px、winStride=4x4px、cellSize=4px、blockSize=8px、blockStride=4x4px
- 分類子: C=0.01 の線形分類子を使用した svm 回帰。(RBF の結果は線形よりも悪い)
これは、私が使用しているパラメーターで検出を実行する API です。
vector<Rect> found;
double hitThreshold = 0.; // tolerance
Size padding(Size(32, 32));
double scale = 1.05;
int groupThreshold = 2;
hog.detectMultiScale(testImg, found, hitThreshold, win_stride, padding, scale, groupThreshold);
48x48px の画像の円が検出されず、大きな画像の円が検出される理由はありますか? 分類子を検証するために、48x48px の画像が正しく分類されることを期待しています。48x48px の画像で何も検出されない場合は、より大きな画像を追加しました。
さらに、奇妙に聞こえるのは、48x48ps のテスト セットには、トレーニング セットで使用されている画像がいくつかあり、それらを特定する必要があると思いますが、そうではありません! (トレーニング セットとテスト セットが異なる必要があることはわかっていますが、何も検出されなかったときにそれを行いました。)
Hog 記述子と svm を使用するのはこれが初めてなので、構成エラーまたはイメージの選択が原因で機能しない可能性があります。
どんな助けでも大歓迎です!
前もって感謝します :)