2013-06-19 15 views
7

Sto provando a creare un rilevatore di testa utilizzando le funzioni LBP in OpenCV, utilizzando l'utilità Traincascade. Spero che il rilevatore di testa si trasformi in qualcosa di simile al profilo di OpenCV creato da Vladim Pivarevsky. Voglio ricreare il modello perché il modello attuale gestisce solo la faccia frontale e quella sinistra.Traincascade OpenCV per allenamento LBP

Seguo Naotoshi Seo tutorial e utilizzo set di dati da Irshad Ali website. Sfortunatamente, il modello risultante funziona lentamente con un sacco di false rilevazioni.

Il traincascade viene eseguito come segue:

opencv_traincascade -data "data" -vec "samples.vec" -bg "out_negatives.dat" -numPos 26000 -numNeg 4100 -numStages 16 -featureType LBP -w 20 -h 20 -bt GAB -minHitRate 0.995 -maxFalseAlarmRate 0.3 -weightTrimRate 0.95 -maxDepth 1 -maxWeakCount 100 -maxCatCount 256 -featSize 1 

Ho provato ad utilizzare altri set di dati, ora faccia frontale dal http://fei.edu.br/~cet/facedatabase.html ma il risultato è ancora lo stesso: lenta rilevazione e molti falsi positivi.

Qualcuno ha conoscenza o esperienza nella creazione di modello haar/lbp a cascata? Si prega di dare qualsiasi suggerimento in modo da poter migliorare la precisione del modello. Ho provato a utilizzare il modello integrato OpenCV e il risultato è buono (lbpfrontalface.xml). Grazie mille!

risposta

1

Sarà lento, in quanto inizia a 20x20 e ricerca l'intera immagine, quindi diventa leggermente più grande, ricerca ancora ecc. - prova ad aumentare la dimensione del tuo campione per diminuire il tempo di esecuzione.

Inoltre, ho notato che non ci sono più immagini di bg positive. Prova ad aumentarlo almeno al tuo positivo e questo dovrebbe aiutare.

Suggerisco anche di scomporre le funzioni di haar e vedere se questo dà dei risultati.

tutto il resto sembra che vada bene senza guardare i dati di input

3

Il modo migliore è "trial and error" ... Hai davvero bisogno differenti facce, e la differenza maggiore è meglio. Puoi prendere una faccia e tramite creaamples fai molte facce. Ma in questo modo, non hai mai una buona cascata. Dovresti avere molte facce diverse e se non bastano, puoi aumentarle attraverso creaamples. Ad esempio, hai 500 facce diverse di creaamples che puoi fare con loro 5000, quindi forse la cascata ti soddisferà.

Informazioni sull'avvio dell'allenamento: molto positivo :) o troppo poco negativo. È necessario ad esempio 5000 pos e 2500 neg (pos = 2 * neg). Almeno nel mio caso è stata la scelta migliore.

+0

Ho provato il tuo suggerimento, 12000 positivi e 5000 negativi. I positivi creati dal 2000 faccia, usando creare esempi per arrivare a 12000. Ma ancora, troppi falsi positivi. Puoi darmi un esempio del tuo parametro di lavoro traincascade? Il mio parametro è il seguente: opencv_traincascade -data "data" -vec "samples.vec" -bg "out_negatives.dat" -numPos 10000 -numNeg 5600 -numStages 16 -feature Tipo LBP -w 20 -h 20 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -weightTrimRate 0.95 -maxDepth 1 -maxWeakCount 100 -maxCatCount 256 -featSize 1 – bonchenko

+0

Se si hanno falsi "volti" e vero anche io, posso consigliare di provare ad aumentare numStages. Altrimenti qualcosa di sbagliato nel tuo positivo. I miei parametri sono "-data h_data -vec vecs/vec -bg bg/negative.txt -numPos 5000 -numNeg 2500 -numStages 14 -featureType HAAR -minHitRate 0.999 -maxFalseAlarmRate 0.3 -w 14 -h 24" ma mi alleno in cascata per le bottiglie (Anche io mi sono allenato a lbp, ma haar era meglio). Dovresti anche leggere [questo] (http://answers.opencv.org/question/7141/about-traincascade-paremeters-samples-and-other/?answer=10049#post-id-10049). È la risposta più bella che ho visto. – McBodik

+0

Grazie! Ora i falsi positivi sono diminuiti a ---> 0, cambio 0maxFalseAlarmRate a 0.1 e makWeakCount 300. Un problema però è la velocità. Ora proverò la risposta @GPPK sull'aumento della dimensione del campione. Sebbene, per il vettore positivo, utilizzi .MergeVector di Sonots, non riesco a utilizzare altre dimensioni di 20x20. Cosa usi per creare il vettore positivo? – bonchenko

1

In breve, è normale ottenere molti falsi positivi dopo la fase 1 della modellazione. È necessario prendere quei falsi positivi e aggiungerli al set di dati negativo e ripetere la modellazione (fase 2). Questo è chiamato mining negativo negativo. È essenziale. Puoi moltiplicare i falsi negativi ruotandoli in modo incrementale di 360 gradi.

Tre altri punti importanti: 1) opencv_createsamples è negativo per i volti; 2) Utilizzare i negativi che sono stimolanti (adatti); 3) LBP è di seconda scelta in molti contesti.

  1. I volti sono abbastanza simmetrici e non mostrano mai una distorsione trapezoidale quando vengono fotografati. Usa angoli molto piccoli se devi, come 0,02 radianti. Inoltre, quando guardi le immagini nel file .vec scoprirai che lo sfondo che si riempie attorno ai bordi distorti appare alquanto innaturale.

  2. Non solo il numero di negativi è importante, ma la qualità dei negativi è importante.I visi sono lisci rispetto a molte immagini negative (ad es. Alberi, Montagne Rocciose, ecc.), Quindi è relativamente facile distinguere una faccia da un albero di pino a una certa distanza. Tuttavia, otterrai molti falsi positivi da superfici lisce come muri. È meglio includere immagini sfidanti nel set di dati negativo. Ho trovato che il miglior background erano immagini di pareti lisce di cartongesso verniciato. Fai un video mentre cammini lungo alcuni muri, usa ffmpeg per tagliarlo in un mucchio di immagini. Ancora una volta, puoi moltiplicare questi negativi ruotandoli in modo incrementale di 360 gradi, quindi capovolgere e ruotare di nuovo.

  3. Sii paziente, usa HAAR non LBP.

AI è di gran moda ora, basta dividere fino 100.000 immagini non tagliate in cartelle per le classi corrispondenti e iniziare l'addestramento del vostro modello. Tuttavia, è possibile che questo approccio ottenga solo una percentuale di classificazione corretta del 98-99%. Troppi falsi positivi. Otterrete risultati migliori con meno dati facendo ciò che ho detto sopra (sia usando cascate HAAR o reti neurali). Questo è il vero lavoro di scienza dei dati: selezione accorta dei set di dati negativi e positivi e il lavoro dispendioso in termini di tempo nella definizione dei riquadri di confine.

Problemi correlati