La reconnaissance humaine dans les images via le descripteur HOG et le classificateur SVM fonctionne mal

8

J'utilise un descripteur HOG, couplé à un classificateur SVM, pour reconnaître les humains dans les images. J'utilise les wrappers Python pour OpenCV. J'ai utilisé l'excellent tutoriel de pymagesearch , qui explique ce que fait l'algorithme et fournit des conseils sur la façon de définir les paramètres de la méthode detectMultiScale .

Plus précisément, je fais

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

Les paramètres sont choisis en fonction d'un réglage fin de la précision et des performances, en suivant les explications du didacticiel lui-même.

Mon problème est que cette méthode, qui semble être la meilleure méthode actuellement pour reconnaître les humains dans une image selon la littérature (l' article original est daté de 2005) semble fonctionner assez mal sur mes images. J'ai des images contenant des vêtements, avec et sans modèle et j'essaie cette approche pour reconnaître ceux qui ont le modèle. Sur un sous-ensemble de 300 images que j'ai scanné manuellement pour les étiqueter pour contenir le modèle ou non, la méthode échoue 30% des fois.

Ce sont quelques images comme exemples.

Ici, il a détecté un humain disparu:

Ici, il n'a pas obtenu l'humain complet:

Ici, il ne l'a pas reconnu du tout:

Je comprends que le détecteur fonctionne pour les humains debout. Doivent-ils également être complets? Mes images englobent des demi-figures, des figures sans tête ni pieds.

Avant cela, j'ai essayé un classificateur en cascade basé sur les fonctionnalités de Haar pour reconnaître le visage dans une image et la précision sur le même ensemble d'image a été de 90%, alors j'essayais d'améliorer cela. De plus, je suis intéressé à comprendre pourquoi les choses ne fonctionnent pas ici.

martina
la source

Réponses:

5

Vous utilisez l'ensemble de formation que opencv vous offre et qui ne correspond pas au type d'images que vous utilisez. Les données que vous utilisez proviennent getDefaultPeopleDetectoret le type d'images que le détecteur par défaut utilise sont des photos de nombreuses personnes, pas un modèle féminin d'un commerce électronique de mode.

Si vous souhaitez faire la distinction entre les modèles et les vêtements, vous pouvez essayer de former votre propre classificateur avec HOG ou d'autres fonctionnalités.

Un autre chemin que vous pouvez emprunter consiste à détecter s'il y a un visage ou non. Vous pouvez utiliser des cascades de haar pour cela.

hoaphumanoïde
la source
Oui, j'ai compris. En fait, les cascades de haar fonctionnent mieux. Mais je voulais toujours savoir exactement pourquoi les descripteurs de porcs échouent lamentablement sur mes images, est-ce parce que l'humain n'est pas complètement inclus dans l'image?
martina
1
La raison est celle que je vous ai donnée. Le classificateur par défaut que vous utilisez prend des images qui ne ressemblent en rien à celles que vous utilisez
hoaphumanoid