Il riconoscimento dell'essere umano nelle immagini attraverso il descrittore HOG e il classificatore SVM ha scarsi risultati


8

Sto usando un descrittore HOG, associato a un classificatore SVM, per riconoscere gli umani nelle immagini. Sto usando i wrapper Python per OpenCV. Ho usato l'eccellente tutorial su pymagesearch , che spiega cosa fa l'algoritmo e fornisce suggerimenti su come impostare i parametri del metodo detectMultiScale .

In particolare, lo faccio

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

I parametri sono scelti in base a un'accurata regolazione di precisione e prestazioni, seguendo le spiegazioni del tutorial stesso.

Il mio problema è che questo metodo, che sembra il metodo attualmente migliore per riconoscere gli umani in un quadro secondo la letteratura (l' articolo originale è datato 2005) sembra avere prestazioni scarse sulle mie immagini. Ho immagini che contengono vestiti, sia con una modella che senza di essa e sto provando questo approccio per riconoscere quelle con la modella. Su un sottoinsieme di 300 immagini che ho scansionato manualmente per contrassegnarle o meno per contenere il modello, il metodo fallisce il 30% delle volte.

Queste sono alcune immagini come esempi.

Qui ha rilevato un essere umano scomparso:

Qui non ha ottenuto l'intero essere umano:

Qui non lo riconosceva affatto:

Capisco che il rivelatore funziona per gli esseri umani retti. Dovrebbero anche essere a figura intera? Le mie immagini comprendono mezza figura, figure senza testa o senza piedi.

Prima di questo, ho provato un classificatore a cascata basato su funzionalità Haar per riconoscere il volto in un'immagine e l'accuratezza sullo stesso set di immagini è stata del 90%, quindi stavo cercando di migliorare. Inoltre, sono interessato a capire perché le cose non funzionano qui.

Risposte:


5

Stai usando il set di formazione che ti dà Opencv che non corrisponde al tipo di immagini che stai usando. I dati che stai utilizzando provengono getDefaultPeopleDetectore il tipo di immagini utilizzate dal rilevatore predefinito sono le immagini di molte persone, non un modello femminile di un ecommerce di moda.

Se vuoi distinguere tra modelli e capi puoi provare ad allenare il tuo classificatore con HOG o altre funzionalità.

Un altro percorso che puoi seguire è rilevare se c'è un volto o meno. Per questo potresti usare le haar cascades.


Sì, ho capito. In effetti, le cascate di haar si comportano meglio. Ma volevo ancora sapere esattamente perché i descrittori di maiale falliscono miseramente nelle mie immagini, è perché l'essere umano non è completamente incluso nell'immagine?
martina,

1
Il motivo è quello che ti ho dato. Il classificatore predefinito che stai usando prende immagini che non assomigliano a quelle che stai usando
hoaphumanoid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.