Klassifikation von Fischen, Schmetterlingen ....mit Python und OpenCV

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

Hallo,
ich würde Euch gerne nach Eurer Meinung fragen.
Und zwar habe ich die Möglichkeit ein Thema für meine Abschlussarbeit vorzuschlagen.
Ich würde gerne eine SVM (Support Vector Machine) trainieren und testen.
Als Trainingsobjekte denke ich an digitale Bilder von Fischen oder Schmetterlingen, aus
welchen vor dem Training die entsprechenden Merkmale extrahiert werden.

OpenCV scheint eine gute Bibliothek dafür zu sein.
Meine Kenntnisse in der Bildverarbeitung bzw. Computergrafik sind bisher theoretischer Natur.
Es stellt sich mir die Frage, da ich den Umfang der Arbeit nur schwer einschätzen kann,
inwieweit z.B. ein praktisches Thema "Klassifikation von Fischen durch eine SVM" sich als zu umfangreich
für eine Abschlussarbeit herausstellen könnte?

Ein großer Teil der Arbeit wird vermutlich auf die Merkmalsextraktion fallen, welche ich versuchen würde
anhand Glättungsfilter, Kantenfilter, Konturfindung, finden zusammenhängende Regionen bezüglich Farbe und/oder
Textur, Formanalyse (Momente) usw., zu bestimmen und diese anschließend in einen Merkmalsvektor zu
packen.

Habt Ihr Erfahrung damit, wie würdet ihr den Umfang einschätzen?

Vielen Dank im voraus
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin skeptisch. Meine persoenlichen Erfahrungen mit SVM zur Erkennung von Zahlen mit verschiedenen Methoden, uA HOG, suggerieren, dass SVMs nur gut sind fuer die Erkennung von gleich orientierten Objekten. Klassiker sind Gesichter, die in die Kamera schauen, Nummernschilder, nachdem man die aufgrund ihres kuenstlich hohen Kontrastes ausgefiltert und ggf. sogar perspektivisch korrigiert hat, Strassenschilder, etc.

Es kommt dann also massiv auf dein Bildmaterial an. Schmetterlinge in Schaukaesten? Ja, das geht. Schliesslich sind die alle gleich ausgerichtet, aufgefaltet, und gut separierbar.

Aus normalen Bildern, in verschiedenen Zustaenden der Fluegelstellung? Eher nein. Und dasselbe gilt auch fuer Fische.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Hallo CodeIt,
hmmm, mittlerweile macht man so was per DeepLearning mit CNNs.
Schau mal hier rein: https://deeplearning.mit.edu

Hier kannst du nach 2 Stunden ein Model erstellen, dass mit 95% Accuracy zwischen 12 Katzenrassen und 25 Hunderassen klassifizieren kann.
https://course.fast.ai/videos/?lesson=1

Hier ein Kurs der Standford University
http://cs231n.stanford.edu
Hier die Lecture Videos, sehenswert.
https://www.youtube.com/playlist?list=P ... QRF3EO8sYv
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

Vielen Dank für die schnellen Rückmeldungen.

Die Fische und Schmetterlinge wären gleich ausgerichtet und auch gut separierbar.
Das DeepLearning vermutlich bessere Ergebnisse erzielt, habe ich schon befürchtet.
Ich hätte die Fische oder Schmetterlinge lediglich als Beispiele benutzt. Um genau zu sein,
habe ich vor die Ergebnisse der SVM mit denen von K-Nearest-Neighbor etc. zu vergleichen.
Aber es ist nicht gerade motivierend, wenn man sich die ganze Arbeit mit der Merkmalsextraktion macht und dann feststellt, dass es mit DeepLearning in 2 Stunden machbar ist und evtl. noch besser.

Vielleicht darf ich ThomasL noch eine Frage stellen:
Gibt es deiner Meinung nach noch irgendeinen Bereich, in welchem die SVM besser als
CNN ist? Wenn ja, kannst Du mir eine Empfehlung geben, mit was ich die SVM trainieren könnte?

Mit DeepLearning brauchst Du aber doch viel Bildmaterial, damit dies wirklich besser
funktioniert als mit der SVM. Mit der SVM sollen aber auch mit geringerer Anzahl von Bildern gute, wenn nicht sogar bessere Ergebnisse, erzielbar sein. Wenn mir jetzt hier nicht widersprochen wird, dann wäre die SVM evtl. die bessere Alternative wenn es um Objekte geht, zu welchen es bisher noch nicht so viel Bildmaterial gibt, oder?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Meine persoenlichen Erfahrungen mit DL sind beschraenkt, ich war da bisher auch eher klassisch unterwegs. Aber es ist der "Gewinner". Die Leistungsfaehigkeit ist deutlich groesser.

Und auch wenn du prinzipiell recht hast was die Bildmengen angeht, praktisch loest man das Problem einfach dadurch, das man die fertig vortrainierten Netze nimmt, mit ihren Convolutions etc, und "nur" noch die letzten Layer neu trainiert. Das geht dan deutlich fixer, und die harten Aufgaben, interessante Features zu extrahieren, sind schon geloest.

Wenn man dann noch dazu nimmt, dass die Vorverarbeitung fuer SVM deutlich aufwendiger ist, weil man eben tatsaechlich all die Schritte gehen muss - Kantenfiltern, morphologische Operatoren, etc - die ja auch des Tunings beduerfen, und so ein CNN arbeitet einfach gleich auf den rohen Pixeln, dann ist das eigentlich nicht mehr zu rechtfertigen.

Anders gesagt: ich werde bei der naechsten CV Aufgabe (freie Projekte in meinem Fall) nicht mehr zu SVM und den "klassischen" Methoden greifen.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Such mal nach "SVM use cases" und du wirst da eine Menge Material finden.

SVM gehört zur grossen Familie von Algorithmen zur Classification und Regression und wird intensiv genutzt.
Ich wollte mit meinem Post nicht sagen, dass SVM schlecht oder old school ist.
Imho nur das Image Recognition mehr mit CNNs gemacht wird.
Aber nicht zu 100% und überall.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

Danke
Antworten