Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss18:teilprojekte:detection

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss18:teilprojekte:detection [2018/07/05 10:57]
f_g_r
ss18:teilprojekte:detection [2018/08/25 17:06] (aktuell)
f_g_r [Ordner Struktur]
Zeile 1: Zeile 1:
-====== Detection mit Haar Kaskaden ====== +====== 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. 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.
Zeile 16: Zeile 14:
  
 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 [[https://​docs.opencv.org/​3.4.2/​d7/​d9f/​tutorial_linux_install.html|Anleitung]] im offiziellen openCV Doc. 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 [[https://​docs.opencv.org/​3.4.2/​d7/​d9f/​tutorial_linux_install.html|Anleitung]] im offiziellen openCV Doc.
 +
 +([[https://​github.com/​opencv/​opencv/​issues/​7045|Workaround falls es mit python3 nicht klappt]])
  
 Das oben genannte Tutorial ist auch als geschriebene Version von uns Verfügbar Das oben genannte Tutorial ist auch als geschriebene Version von uns Verfügbar
Zeile 21: Zeile 21:
 {{:​ss18:​teilprojekte:​python_haar_cascade_print.pdf| PDF}} {{:​ss18:​teilprojekte:​python_haar_cascade_print.pdf| PDF}}
  
-===== Trainieren der Kaskade ===== 
  
-TODO: Script fertig schreiben, Text verbessern und fixen das bei der Ordner Struktur keien Box mehr drum ist+===== Master Skript ===== 
 +==== Allgemein ====
  
 Um das eigentliche Trainieren und Testen einer Kaskade zu vereinfachehn haben wir ein Bash Script geschrieben. 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.+Das Script liest die Paramter aus einer einfach zu editierenden Config Datei (AKETS.conf) ​und macht den Rest alleine. Dabei zeigt es 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 ist so geschrieben das man es für das einfache Trainieren mehrerer Kaskaden benutzen kann und immer nur eine neue config Datei erstellen muss.
  
-{{:ss18:​teilprojekte:​akets_bild_1.png?​direct&​300|}}+Es benutzt außerdem ein auf [[https://github.com/​wulfebw/​mergevec|Github]] veröffentlichtest Programm namens "​mergevec.py"​ von Blake Wulfe um mehrere vec dateien zusammenzufügen,​
  
-Ordner Struktur+{{:​ss18:​teilprojekte:​akets_bild_1.png?​direct&​300|}}
  
-Ordner ​in dem man arbeitet+==== Ordner ​Struktur ==== 
 +<​code>​ 
 +Ordner_in_dem_man_arbeitet/​
     AKETS.sh     AKETS.sh
-    cascade_0+    ​mergevec.py 
 +    test_cascade.py 
 +    ​cascade_0/
         AKETS.conf         AKETS.conf
-    ​cascade_1+        annotations/​ 
 +            ... 
 +    ​cascade_1/
         AKETS.conf         AKETS.conf
-        ​+        ​annotations/​ 
 +            ... 
 +</​code>​
  
-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".+Ausführen tut man das Skript wenn man im gleichen Ordner ist mit <code Bash>./AKETS.sh</​code> ​oder wenn man in einem Unterordner ist mit <code Bash>../AKETS.sh</​code>​
  
 +
 +==== Funktionen ====
 +
 +=== 1) setup ===
 +Erstellen aller Ordner und erschaffung der samples
 +=== 2) train_cascade ===
 +Eigentliches Trainieren der Kaskade
 +=== 3) test_cascade ===
 +Testen der Kaskade mit python Programm oder automatischen Test Dateien
 +=== 4) utilities ===
 +Werkzeuge zum umgehen mit großen Datenmengen
 +== 4.1) multipli_pics ==
 +[funktioniert leider noch nicht]
 +== 4.2) number_files_dir ==
 +Nummiert Dateien in einem ordner welcher der Benutzer eingibt
 +=== 5) clean_dir ===
 +zum löschen aller dateien die im Setup erstellt werden
 +=== 6) write_config ===
 +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 <​code>​opencv_createsamples</​code>​ drauf projezieren und somit einfach neue positive Bilder erstellen.
 +
 + 
 ==== Parameter ==== ==== Parameter ====
  
-Dieser Teil soll beschreiben welche Parameter welchen Einfluss auf die Kaskade haben[[https://​docs.opencv.org/2.4/​doc/​user_guide/​ug_traincascade.html|openCV Doc Beispiel]]+=== numSmaples === 
 + 
 +Man kann nur so viele Samples mit opencv_createsamples erstellen wie negative Bilder vorhanden sindAlso wenn z.B200 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 === === maxxangle, maxyangle und mayzangle ===
Zeile 62: Zeile 107:
 {{:​ss18:​teilprojekte:​rotation_0.9_0.jpg?​direct&​100|}} {{:​ss18:​teilprojekte:​rotation_0.9_0.jpg?​direct&​100|}}
 {{:​ss18:​teilprojekte:​rotation_0.9_1.jpg?​direct&​100|}} {{:​ss18:​teilprojekte:​rotation_0.9_1.jpg?​direct&​100|}}
- 
-=== featureType === 
- 
-Dieser Parameter gibt an welche Art von Feature man benutzen soll. 
  
 === maxidev === === maxidev ===
Zeile 79: Zeile 120:
 {{:​ss18:​teilprojekte:​maxidev_mit_40_0.jpg?​direct&​100|}} {{:​ss18:​teilprojekte:​maxidev_mit_40_0.jpg?​direct&​100|}}
 {{:​ss18:​teilprojekte:​maxidev_mit_40_1.jpg?​direct&​100|}} {{:​ss18:​teilprojekte:​maxidev_mit_40_1.jpg?​direct&​100|}}
 +
 +===== Trainieren der Kaskade =====
 +
 +==== Parameter ====
 +
 +Dieser Teil soll beschreiben welche Parameter welchen Einfluss auf die Kaskade haben. [[https://​docs.opencv.org/​2.4/​doc/​user_guide/​ug_traincascade.html|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.
 +
 ===== Testen der Kaskade ===== ===== Testen der Kaskade =====
  
Zeile 84: Zeile 144:
  
 Die Syntax ist:  Die Syntax ist: 
- +<code Bash> 
-python3 cascade_test_img.py pfad_zu_bild pfad_zu_kaskade +python3 cascade_test_img/vid.py pfad_zu_bild/vid pfad_zu_kaskade 
 +</​code>​
 für das testen an Bildern. Für das Video Programm ist es genauso. für das testen an Bildern. Für das Video Programm ist es genauso.
  
 Beispiel: Beispiel:
 +<code Bash>
 python3 cascade_test_img.py first_frame.png cascade.xml python3 cascade_test_img.py first_frame.png cascade.xml
- +</​code>​
-TODO: Test Script beinhaltet nur img test Code+
  
 {{:​ss18:​teilprojekte:​haar_kaskade_test_code_mit_beispiel.zip|}} {{:​ss18:​teilprojekte:​haar_kaskade_test_code_mit_beispiel.zip|}}
  
-===== Server als Ressource ​=====+===== Allgemeine Erfahrungen aus dem Trainieren ​=====
  
 +Dieser Teil der Doku soll einige Erfahrungen die wir im Laufe des Projektes gemacht haben wiederspiegeln.
  
-TODO+==== 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. 
 +  
 +===== Server als Ressource ===== 
 + 
 +{{:​ss18:​teilprojekte:​azure_bild.png?​400|}}
  
 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. 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. +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. [[https://​azure.microsoft.com/​de-de/​free|Azure für Studenten]] 
-Link um Fortschritt der laufenden Kaskade zu sehen+ 
 +Alternativen sind: 
 +  * AWS von Amazon (eventuell ein Studentenprogramm) 
 +  * Compute Engine von Google (Test Version mit Guthaben) 
 + 
 +===== Literatur ==== 
 +  * [[https://​www.cs.cmu.edu/​~efros/​courses/​LBMV07/​Papers/​viola-cvpr-01.pdf | Wissentschaftliche Arbeit von Paul/​Viola]] 
 +  * [[http://​www.cbsr.ia.ac.cn/​users/​lzhang/​papers/​ICB07/​ICB07_Liao.pdf | Wissentschaftliche Arbeit über LBP]] 
 +  * [[https://​docs.opencv.org/​3.4.1/​ | OpenCV Dokumentation]] 
 +  * [[https://​docs.python.org/​3/​contents.html | Python3 Dokumentation]] 
 +  * [[https://​www.python.org/​dev/​peps/​pep-0008/​ | PEP8]] 
 + 
 +===== Dateien ====
  
 +{{:​ss18:​teilprojekte:​detection_dateien.zip|}}
ss18/teilprojekte/detection.1530781057.txt.gz · Zuletzt geändert: 2018/07/05 10:57 von f_g_r