Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss18:teilprojekte:detection

Dies ist eine alte Version des Dokuments!


Detection mit Kaskaden

Work in Progress: Texte sind noch falsch/unvollständig

Man kann Haar Kaskaden benutzen um spezielle Objekte zu erkennen. Dafür muss man diese aber erst einmal mit positiven (Bilder die das gesuchte Objekt beinhalten) und negativen trainieren.

Wir haben uns dabei nach erst für einen Algemeinen Überlick nach diesem diesem Tutorial gerichtet.

Allgemein

Allgemein sei gesagt das man mit wenig Erfahrung von Kaskaden viel mehr Zeit zum Trainieren der Kaskaden verbraucht. Im Laufe unseres Projektes hat sich der Zeitaufwand des Trainieren von Kaskaden enorm verbessert, so weit das man eventuell nur noch einen Server brauch um allen eine Linux Umgebung zu ermöglichen.

Dieses Projekt muss nicht in Linux gemacht aber unsere folgenden Anleitungen und Scripte sind für Linux geschrieben

Installation

Es gibt mindestens zwei Möglichkeiten um openCV mit dem dev Package (wir brauchen das Dev Package z.B. zum trainieren der Kaskaden) der eine weg ist es einfach über den Package Manager einer Linux Distribution zu installieren oder das Projekt selbst mit cmake zu bauen was auch gut und schnell möglich ist. Für die zweite Lösung gibt es eine gute Anleitung im offiziellen openCV Doc.

(Workaround falls es mit python3 nicht klappt)

Das oben genannte Tutorial ist auch als geschriebene Version von uns Verfügbar

PDF

Master Skript

Allgemein

Um das eigentliche Trainieren und Testen einer Kaskade zu vereinfachehn haben wir ein Bash Script geschrieben.

Das Script liest die Paramter aus einer einfach zu editierenden Config Datei und macht den Rest alleine. Dabei zeigt an wie weit es ist und leitet den output einzelner Programme in getrennte Output Dateien.

Es ist so geschrieben das man es für das einfache Trainieren mehrerer Kaskaden benutzen kann und immer nur eine neue config Datei erstellen muss.

Es benutzt außerdem ein auf Github veröffentlichtest Programm namens „mergevec.py“ von Blake Wulfe um mehrere vec dateien zusammenzufügen,

Ordner Struktur

Ordner_in_dem_man_arbeitet/
    AKETS.sh
    mergevec.py
    test_cascade.py
    cascade_0/
        AKETS.conf
        annotations/
            ...
    cascade_1/
        AKETS.conf
        annotations/
            ...

Ausführen tut man das Skript wenn man im gleichen Ordner ist mit

./AKETS.sh

oder wenn man in einem Unterordner ist mit

../AKETS.sh

.

Funktionen

Setup

Erstellen aller Ordner und erschaffung der samples

Kaskade Trainieren

Eigentliches Trainieren der Kaskade

Kaskade Testen

Testen der Kaskade mit python Programm oder automatischen Test Dateien

Werkzeuge

Werkzeuge zum umgehen mit großen Datenmengen

Arbeitsfläche säubern

zum löschen aller dateien die im Setup erstellt werden

Config Datei beschreiben

Alternative zum schreiben der Config Datei

Erstellen von Samples

„The goal of machine learning (ML)* is to turn data into information. After learning from a collection of data, we want a machine to be able to answer questions about the data: What other data is most similar to this data? Is there a car in the image? What ad will the user respond to? There is often a cost component, so this question could become: “Of the products that we make the most money from, which one will the user most likely buy if we show them an ad for it?” Machine learning turns data into informationby extracting rules or patterns from that data. “

- aus Learning OpenCV von Gary Bradski und Adrian Kaehler

Da wir uns hier mit einem Machine Learning Problem rumschlagen brauchen wir Daten. In unserem Fall Bilder die beinhalten was wir suchen (positive) und Bilder die nicht beinhalten was wir suchen.

negative zu bekommen ist einfach, positive sind auf der anderen Seite sind schwierig da wir nicht 10000 Fotos machen wollen. Zum Glück können wir positive Bilder auf negative mit Hilfe des von OpenCV bereitgestellten Programm

opencv_createsamples

drauf projezieren und somit einfach neue positive Bilder erstellen.

Parameter

numSmaples

Man kann nur so viele Samples mit opencv_createsamples erstellen wie negative Bilder vorhanden sind. Also wenn z.B. 200 negative vorhanden sind kann man man mit einem positiven auch nur 200 Bilder erstellen.

Der weg ist es dann die anzahl der positiven Bilder zu erhöhen, auch wenn es die selben sind. Da durch die zufällige Plazierung von opencv_createsamples andere Bilder erstellt werden.

maxxangle, maxyangle und mayzangle

Diese drei Parameter geben an wie ein positives Bild was auf negative drauf projeziert wird, gedreht wird.

Beispiel:

mit 0.0 bei allen drei

mit 0.9 bei allen drei

maxidev

Steht für die maximale Änderung der Intensität

Beispiel

mit 1000

mit 40 (Standard)

bgcolor, bgtresh

Trainieren der Kaskade

TODO: Script fertig schreiben, Text verbessern und fixen das bei der Ordner Struktur keien Box mehr drum ist

Parameter

Dieser Teil soll beschreiben welche Parameter welchen Einfluss auf die Kaskade haben. openCV Doc Beispiel

featureType

Dieser Parameter gibt an welche Art von Feature man benutzen soll.

HAAR richtet sich nach der 2001 wissentschaftlichen Arbeit von Paul/Viola: Rapid Object Detection using a Boosted Cascade of Simple Features. Conference on Computer Vision and Pattern Recognition„

LBP richtet sich nach der 2007er wissentschafltichen Arbeit von Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li: „Learning Multi-scale Block Local Binary Patterns for Face Recognition“

Am Anfang haben wir immer den Feature Type HAAR benutzt doch jüngste Ergebnisse zeigen das LBP, anders als erst gedacht, doch sehr effiktiv sein kann.

minHitRate

maxFalseAlarmRate

Testen der Kaskade

Zum Testen der Kaskaden an Bildern und Videos haben ein kleines Python3 Programm geschrieben was nichts mehr macht ausser die Kaskaden auf das Bild/Video anzuwenden.

Die Syntax ist:

python3 cascade_test_img.py pfad_zu_bild pfad_zu_kaskade

für das testen an Bildern. Für das Video Programm ist es genauso.

Beispiel:

python3 cascade_test_img.py first_frame.png cascade.xml

TODO: Test Script beinhaltet nur img test Code

haar_kaskade_test_code_mit_beispiel.zip

Erstellen der finalen Kaskade

TODO: Wenn finale Kaskade fertig ist soll hier die genaue Anleitung hin

Allgemeine Erfahrungen aus dem Trainieren

Dieser Teil der Doku soll einige Erfahrungen die wir im Laufe des Projektes gemacht haben wiederspiegeln.

Tipps, Tricks und Philosophien

Tipps und Tricks

Um Bilder zu bearbeiten empfehlen wir allgemein Gimp, die beiden wichtigsten Sachen nämlich Bilder zuschneiden mit SHIFT+C und das resizen von Bildern unter „Image>Scale Image“ sind dort schnell gemacht.

Um Frame aus Videos zu bekommen empfehlen wir VLC und seine Snapshot Funktion

Philosophien

1. mehr, auch wenn unrelevante, negative Beispiele sind besser. Hört sich vielleicht komisch an aber unserer Erfahrung nach werden alle negativen Bilder zwar die Rechenzeit verlängern aber das Ergebnis verbessern.

2. Haltet die positiven Bilder ungefähr in einem Bereich von 20-35 Pixeln.

Pucks in einer einfachen Puck Simulation finden

Es wurde eine simple Simulation von bewegenden Pucks zum üben mit Trackern und Kaskaden erstellt.

Logos finden

Server als Ressource

TODO

Man kann einen externen Server mieten um wenn viel Rechenarbeit von nöten ist nicht seinen eigenen Computer benutzen zu müssen. Außerdem kann dies genutzt werden um eine Linux Umgebung für Windows Nutzer bereit zu stellen.

Wir haben uns dabei für den Dienst Azure von Microsoft entschieden da sie jedem Studenten 100 USD Guthaben geben um damit zu machen was man will.

Literatur

TODO: Wissentschafliche Arbeit von Paul/Viola für HAAR und die andere für LBP

ss18/teilprojekte/detection.1531358185.txt.gz · Zuletzt geändert: 2018/07/12 03:16 von f_g_r