Die Erkennung von Menschen in Bildern durch den HOG-Deskriptor und den SVM-Klassifikator ist schlecht

8

Ich verwende einen HOG-Deskriptor in Verbindung mit einem SVM-Klassifikator, um Menschen in Bildern zu erkennen. Ich verwende die Python-Wrapper für OpenCV. Ich habe das hervorragende Tutorial bei pymagesearch verwendet , das erklärt, was der Algorithmus tut, und Hinweise zum Festlegen der Parameter der Methode detectMultiScale gibt .

Insbesondere tue ich

# 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)

Die Parameter werden gemäß einer Feinabstimmung sowohl der Genauigkeit als auch der Leistung gemäß den Erläuterungen im Lernprogramm selbst ausgewählt.

Mein Problem ist , dass diese Methode, die wie die derzeit beste Methode scheint die Menschen in einem Bild zu erkennen , nach Literatur (das Original Papier datiert 2005) scheint ziemlich schlecht auf meinen Bilder auszuführen. Ich habe Bilder mit Kleidung, sowohl mit als auch ohne Modell, und ich versuche diesen Ansatz, um diejenigen mit dem Modell zu erkennen. Bei einer Teilmenge von 300 Bildern, die ich manuell gescannt habe, um sie mit dem Modell zu versehen oder nicht, schlägt die Methode 30% der Fälle fehl.

Dies sind einige Bilder als Beispiele.

Hier entdeckte es einen vermissten Menschen:

Hier hat es nicht den vollen Menschen bekommen:

Hier hat es es überhaupt nicht erkannt:

Ich verstehe, dass der Detektor für aufrechte Menschen funktioniert. Sollten sie auch vollfigurig sein? Meine Bilder umfassen Halbfiguren, Figuren ohne Kopf oder Füße.

Zuvor habe ich einen auf Haar-Merkmalen basierenden Kaskadenklassifikator versucht, um das Gesicht in einem Bild zu erkennen, und die Genauigkeit für denselben Bildsatz betrug 90%. Daher habe ich versucht, dies zu verbessern. Ich bin auch daran interessiert zu verstehen, warum die Dinge hier nicht funktionieren.

martina
quelle

Antworten:

5

Sie verwenden das von opencv bereitgestellte Trainingsset, das nicht der Art der von Ihnen verwendeten Bilder entspricht. Die Daten, die Sie verwenden, stammen von getDefaultPeopleDetectorund die Art von Bildern, die der Standarddetektor verwendet, sind Bilder von vielen Menschen, kein weibliches Model aus einem Mode-E-Commerce.

Wenn Sie zwischen Modellen und Kleidungsstücken unterscheiden möchten, können Sie versuchen, Ihren eigenen Klassifikator mit HOG oder anderen Funktionen zu trainieren.

Sie können auch erkennen, ob ein Gesicht vorhanden ist oder nicht. Sie könnten dafür Haarkaskaden verwenden.

Hoaphumanoid
quelle
Ja, ich habe das verstanden. In der Tat sind Haarkaskaden besser. Aber ich wollte immer noch genau wissen, warum Schweinedeskriptoren auf meinen Bildern kläglich versagen, liegt es daran, dass der Mensch nicht vollständig im Bild enthalten ist?
Martha
1
Der Grund ist der, den ich dir gegeben habe. Der Standardklassifikator, den Sie verwenden, nimmt Bilder auf, die nicht mit denen
übereinstimmen