2013-06-19 13 views
7

Próbuję utworzyć detektor głowy za pomocą funkcji LBP w OpenCV, używając narzędzia traincascade. Mam nadzieję, że detektor głowy da w efekcie coś podobnego do profilu profilu OpenCV stworzonego przez Vladima Pivarevsky'ego. Chcę odtworzyć model, ponieważ obecny model obsługuje tylko twarz przednią i lewą.Traincascade OpenCV do szkolenia LBP

Podążam za Naotoshi Seo tutorial i używam zestawu danych od Irshad Ali website. Niestety, wynikowy model wykonuje się powoli z dużą ilością fałszywego wykrywania.

traincascade prowadzony jest następująco:

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 

Próbowałem za pomocą innego zestawu danych, teraz czołowej od http://fei.edu.br/~cet/facedatabase.html ale wynik jest wciąż ten sam: powolne wykrywanie i wiele fałszywych alarmów.

Ktoś ma wiedzę lub doświadczenie w tworzeniu modelu kaskadowego haar/lbp? Podaj wszelkie sugestie, aby poprawić precyzję modelu. Próbowałem użyć wbudowanego modelu OpenCV, a wynik jest dobry (lbpfrontalface.xml). Dziękuję bardzo!

Odpowiedz

1

Będzie powoli, stosunkowo jak zaczyna się od 20x20 i przeszukuje cały obraz, następnie staje się nieco większy, szuka ponownie itd. - spróbuj zwiększyć swój rozmiar próbki, aby zmniejszyć czas działania.

Zauważyłem również, że nie masz w pobliżu tak wielu zdjęć bg jako pozytywnych. Spróbuj zwiększyć to co najmniej tak samo jak pozytywne i to powinno pomóc.

Proponuję również wykreślić funkcje haar i sprawdzić, czy to daje jakiekolwiek wyniki.

wszystko wydaje się w porządku, nie patrząc na danych wejściowych

3

Najlepszym sposobem jest „prób i błędów” ... Naprawdę trzeba differents twarze, a im większa różnica, tym lepiej. Możesz wziąć jedną twarz i za pomocą kresek zrobić wiele twarzy. Ale w ten sposób nigdy nie masz dobrej kaskady. Powinieneś mieć wiele różnych twarzy, a jeśli nie będą wystarczające, możesz je zwiększyć poprzez tworzenie próbek. Na przykład, masz 500 różnych twarzy za pomocą próbek, które możesz zrobić za ich pomocą 5000, wtedy kaskada może Cię zadowolić.

O szkoleniu początkowym: o wiele pozytywnym :) lub za mało negatywnym. Potrzebujesz na przykład 5000 pozycji i 2500 neg (pozycja = 2 * neg). Przynajmniej w moim przypadku był to najlepszy wybór.

+0

Wypróbowałem twoją sugestię, 12000 pozytywów i 5000 negatywów. Pozytywy utworzone od 2000 r. Twarz, za pomocą tworzenia próbek, aby uczynić go do 12000. Ale nadal, za dużo fałszywych alarmów. Czy możesz podać przykład swojego parametru pracy pociągu? Mój parametr jest następujący: opencv_traincascade -data "data" -vec "samples.vec" -bg "out_negatives.dat" -numPos 10000 -numNeg 5600 -num Scains 16 -featureType LBP -w 20 -h 20 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -weightTrimRate 0,95 -maxDepth 1 -maxWeakCount 100 -maxCatCount 256 -featSize 1 – bonchenko

+0

Jeśli masz fałszywe "twarze" i to prawda, mogę polecić spróbować zwiększyć liczbę sztuk. Zrób coś złego w twoim pozytywie. Moje parametry to "-data h_data -vec vecs/vec -bg bg/negative.txt -numPos 5000 -numNeg 2500 -numstStages 14 -featureType HAAR -minHitRate 0.999 -maxFalseAlarmRate 0.3 -w 14 -h 24" ale trenuję kaskadę dla butelek (Trenowałem też lbp, ale haar był lepszy). Powinieneś również przeczytać [this] (http://answers.opencv.org/question/7141/about-traincascade-paremeters-samples-and-other/?answer=10049#post-id-10049). To najodpowiedniejsza odpowiedź, jaką widziałem. – McBodik

+0

Dzięki! Teraz liczba fałszywych alarmów zmniejszyła się do ---> 0, zmieniam 0maxFalseAlarmRate na 0.1 i makWeakCount 300. Problemem jest jednak wciąż prędkość. Teraz spróbuję odpowiedzi @GPPK na temat zwiększania wielkości próby. Chociaż, ponieważ używam programu .MergeVector z Sonot dla wektora pozytywnego, wydaje mi się, że nie mogę użyć innego rozmiaru niż 20x20. Czego używasz do stworzenia pozytywnego wektora? – bonchenko

1

Krótko mówiąc, po pierwszym etapie modelowania pojawia się wiele fałszywych alarmów. Musisz wziąć te fałszywe alarmy i dodać je do negatywnego zestawu danych i powtórzyć modelowanie (etap 2). Nazywa się to trudnym, negatywnym wydobyciem. To jest istotne. Możesz pomnożyć fałszywe negatywy, obracając je stopniowo o 360 stopni.

Trzy inne ważne punkty: 1) opencv_createssamples źle dla twarzy; 2) Używaj negatywnych wyzwań (odpowiednich); 3) LBP jest drugą stawką w wielu kontekstach.

  1. Twarze są dość symetryczne i nigdy nie wykazują zniekształceń trapezowych podczas fotografowania. Użyj bardzo małych kątów, jeśli musisz, jak 0,02 radiana. Ponadto, gdy spojrzysz na obrazy w pliku .vec, wypełnienie tła wokół zniekształconych krawędzi wygląda całkiem nienaturalnie.

  2. Ważna jest nie tylko liczba negatywów, ale także jakość negatywów.Twarze są gładkie w porównaniu do wielu negatywnych obrazów (np. Drzew, Gór Skalistych itp.), Więc stosunkowo łatwo odróżnić twarz od sosny na odległość. Jednak otrzymasz wiele fałszywych alarmów z gładkich powierzchni, takich jak ściany. Najlepiej włączać wyzywające obrazy do negatywnego zbioru danych. Stwierdziłem, że najlepszym tłem były obrazy gładkich, pomalowanych ścian z płyt gipsowo-kartonowych. Zrób film podczas spaceru wzdłuż niektórych ścian, użyj ffmpeg, aby posiekać go w stos obrazów. Ponownie możesz pomnożyć te negatywy, obracając je stopniowo o 360 stopni, a następnie obrócić i obrócić ponownie.

  3. Bądź cierpliwy, używaj HAAR, a nie LBP.

Sztuczna inteligencja to teraz cała furia, wystarczy podzielić 100 000 niepapieranych obrazów na foldery dla odpowiednich klas i zacząć trenować swój model. Jednak może się okazać, że takie podejście zapewnia tylko 98-99% prawidłowej klasyfikacji. Zbyt wiele fałszywych alarmów. Otrzymasz lepsze wyniki przy znacznie mniejszej ilości danych, wykonując to, co powiedziałem powyżej (używając kaskad HAAR lub sieci neuronowych). To jest prawdziwa praca naukowa o danych: sprytny wybór negatywnych i pozytywnych zbiorów danych oraz czasochłonna praca przy definiowaniu skrzynek granicznych.

Powiązane problemy