El reconocimiento humano en imágenes a través del descriptor HOG y el clasificador SVM funciona mal


8

Estoy usando un descriptor HOG, junto con un clasificador SVM, para reconocer a los humanos en imágenes. Estoy usando los envoltorios de Python para OpenCV. He utilizado el excelente tutorial en pymagesearch , que explica lo que hace el algoritmo y proporciona sugerencias sobre cómo establecer los parámetros del método detectMultiScale .

Específicamente, lo hago

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

Los parámetros se eligen de acuerdo con un ajuste fino tanto en la precisión como en el rendimiento, siguiendo las explicaciones del tutorial.

Mi problema es que este método, que parece ser el mejor método actualmente para reconocer a los humanos en una imagen de acuerdo con la literatura (el documento original está fechado en 2005) parece funcionar bastante mal en mis imágenes. Tengo imágenes que contienen ropa, tanto con una modelo como sin ella, y estoy intentando este enfoque para reconocer a las personas con la modelo. En un subconjunto de 300 imágenes que escaneé manualmente para etiquetarlas por contener el modelo o no, el método falla el 30% de las veces.

Estas son algunas imágenes como ejemplos.

Aquí detectó un humano perdido:

Aquí no obtuvo el humano completo:

Aquí no lo reconoció en absoluto:

Entiendo que el detector funciona para humanos en posición vertical. ¿Deberían también ser de figura completa? Mis imágenes abarcan media figura, figuras sin cabeza o pies.

Antes de esto, probé un clasificador en cascada basado en la función Haar para reconocer la cara en una imagen y la precisión en el mismo conjunto de imágenes ha sido del 90%, por lo que estaba tratando de mejorar esto. Además, estoy interesado en entender por qué las cosas no funcionan aquí.

Respuestas:


5

Estás utilizando el conjunto de entrenamiento que opencv te está dando y que no corresponde con el tipo de imágenes que estás utilizando. Los datos que está utilizando provienen getDefaultPeopleDetectory el tipo de imágenes que utiliza el detector predeterminado son imágenes de muchas personas, no una modelo femenina de un comercio electrónico de moda.

Si desea distinguir entre modelos y prendas, puede intentar entrenar su propio clasificador con HOG u otras características.

Otro camino que puede tomar es detectar si hay una cara o no. Podrías usar cascadas de haar para eso.


Sí, tengo esto. De hecho, las cascadas Haar funcionan mejor. Pero todavía quería saber exactamente por qué los descriptores de cerdo fallan miserablemente en mis imágenes, ¿es porque el humano no está completamente incluido en la imagen?
martina

1
La razón es la que te di. El clasificador predeterminado que está usando toma imágenes que no se parecen en nada a las que está usando
hoaphumanoid
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.