O reconhecimento humano em imagens através do descritor HOG e classificador SVM apresenta um desempenho ruim

8

Estou usando um descritor HOG, juntamente com um classificador SVM, para reconhecer humanos em imagens. Estou usando os wrappers Python para OpenCV. Eu usei o excelente tutorial em pymagesearch , que explica o que o algoritmo faz e fornece dicas sobre como definir os parâmetros do método detectMultiScale .

Especificamente, eu faço

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

Os parâmetros são escolhidos de acordo com um ajuste fino na precisão e no desempenho, seguindo as explicações no próprio tutorial.

Meu problema é que esse método, que atualmente parece o melhor método para reconhecer humanos em uma imagem de acordo com a literatura (o artigo original é de 2005) parece ter um desempenho muito ruim em minhas imagens. Tenho imagens contendo roupas, tanto com um modelo quanto sem ele, e estou tentando esta abordagem para reconhecer as que têm o modelo. Em um subconjunto de 300 imagens que digitalizei manualmente para marcá-las por conter ou não o modelo, o método falha 30% das vezes.

Estas são algumas imagens como exemplos.

Aqui, ele detectou um humano desaparecido:

Aqui não conseguiu o ser humano completo:

Aqui não o reconheceu de maneira alguma:

Entendo que o detector funciona para humanos na posição vertical. Eles também devem ser completos? Minhas imagens abrangem meia figura, figuras sem cabeça ou pés.

Antes disso, eu tentei um classificador em cascata baseado no recurso Haar para reconhecer o rosto em uma imagem e a precisão no mesmo conjunto de imagens foi de 90%, então estava tentando melhorar isso. Além disso, estou interessado em entender por que as coisas não estão funcionando aqui.

martina
fonte

Respostas:

5

Você está usando o conjunto de treinamento fornecido pelo opencv, que não corresponde ao tipo de imagem que você está usando. Os dados que você está usando são provenientes getDefaultPeopleDetectore o tipo de imagens que o detector padrão usa são fotos de muitas pessoas, não um modelo feminino de um comércio eletrônico de moda.

Se você quiser distinguir entre modelos e roupas, tente treinar seu próprio classificador com HOG ou outros recursos.

Outro caminho que você pode seguir é detectar se há um rosto ou não. Você pode usar cascatas haar para isso.

hoaphumanoid
fonte
Sim, entendi. De fato, as cascatas haar têm melhor desempenho. Mas eu ainda queria saber exatamente por que os descritores de porcos falham miseravelmente em minhas imagens, é porque o humano não está completamente incluído na imagem?
Martina
1
A razão é a que eu te dei. O classificador padrão que você está usando tem imagens que são nada como os que você está usando
hoaphumanoid