HOG記述子とSVM分類器による画像内の人間の認識のパフォーマンスが低い


8

私は、HOG記述子とSVM分類器を組み合わせて、写真の中の人間を認識しています。OpenCV用のPythonラッパーを使用しています。私はpymagesearchで優れたチュートリアルを使用しました。これは、アルゴリズムが何をするかを説明し、detectMultiScaleメソッドのパラメーターを設定する方法についてのヒントを提供します。

具体的には

# initialize the HOG descriptor
hog = cv2.HOGDescriptor()

# Set the support vector machine to be pre-trained for people detection
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

# Detect people in the image
(rects, weights) = hog.detectMultiScale(image,
                                        winStride=(4, 4),
                                        padding=(8, 8),
                                        scale=1.05)

パラメータは、チュートリアル自体の説明に従って、精度とパフォーマンスの両方の微調整に従って選択されます。

私の問題は、文献によると写真で人間を認識するための現在最良の方法のように思えるこの方法(元の論文は2005年の日付です)が私の画像でかなりうまく機能しないように見えることです。モデルのある服とない服の両方を含む画像があり、この方法でモデルのある服を認識しようとしています。モデルを含むかどうかをタグ付けするために手動でスキャンした300枚の画像のサブセットでは、メソッドは30%の確率で失敗します。

これらは例としていくつかの画像です。

ここでそれは行方不明の人間を検出しました:

ここでそれは完全な人間を手に入れませんでした:

ここではそれをまったく認識しませんでした:

検出器が直立した人間に有効であることを理解しています。彼らはまた、完全な数字である必要がありますか?私のイメージは、頭も足もない半身像を含みます。

これの前に、Haar機能ベースのカスケード分類器を使用して画像内の顔を認識しました。同じ画像セットの精度は90%でしたので、これを改善しようとしました。また、ここで機能しない理由を理解することにも興味があります。

回答:


5

あなたが使用している画像の種類に対応していない、opencvが提供しているトレーニングセットを使用しています。あなたが使用しているデータはgetDefaultPeopleDetector、デフォルトの検出器が使用する画像の種類であり、ファッションeコマースの女性モデルではなく、多くの人の写真です。

モデルと衣服を区別したい場合は、HOGまたは他の機能を使用して独自の分類子をトレーニングすることができます。

もう1つの方法は、顔があるかどうかを検出することです。そのためにハールカスケードを使用できます。


はい、これを手に入れました。実際、ハールカスケードはパフォーマンスが向上します。しかし、豚の記述子が私の画像で惨めに失敗する理由を正確に知りたいのですが、それは人間が完全に画像に含まれていないためですか?
martina、2015

1
その理由は私があなたに与えたものです。使用しているデフォルトの分類子は、使用しているものとはまったく
異なる
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.