Du bist nicht angemeldet.

Werbeanzeige

1

06.08.2021, 08:48

KI/Neuronales Netzwerk für Bilder

Hi,

ich weiß, dass es eine ziemliche Mühsal sein kann, ein neuronales Netzwerk für eine spezielle Aufgabe anzupassen. Dabei rede ich noch nicht mal vom Training, sondern von Aufbau und Struktur des Netzwerkes selber. Da ich aber eine ziemlich klar begrenzte Aufgabenstellung habe, frage ich trotzdem einfach mal, ob jemand eine fertige Lösung von der Stange kennt:

Ich würde gerne die Qualität von Bildern beurteilen lassen. Dabei ist in jedem Bild prinzipiell immer der gleiche Gegenstand vor auch immer dem gleichen Hintergrund dargestellt. Der Gegenstand kann dabei leicht variieren. Diese Variationen würde ich jetzt gerne von einer KI beurteilen lassen. Der Gegenstand kann dabei "gut" oder "schlecht" sein. Optimalerweise hätte ich also gerne eine Bibliothek, welche Bilder verarbeiten und nach einem entsprechenden Training klassifizieren kann.

Meine Frage: kennt eventuell jemand eine Bibliothek, die sowas kann und die gesamte KI/das neuronale Netzwerk kapselt? Oder ist die Vorstellung, die ich hier habe, naiv und man muss sich für jedes neue zu trainierende Bild ein jeweils eigenes angepasstes neuronales Netzwerk mit spezifischer struktir suchen?

Danke :-)

Jonathan

Community-Fossil

  • Private Nachricht senden

2

06.08.2021, 18:27

Du stellst dir das glaube ich leichter vor, als es ist.

Die meisten Machine Learning Sachen werden in Python gemacht, beliebte Bibliotheken sind pyTorch und Keras. Für deinen Anwendungsfall würde man vermutlich ein standard Bildnetzwerk (ggf. ganz billig ResNet) mit vortrainierten Gewichten nehmen, und dahinter mehrere Ebenen (Convolutional oder Fully Connected), die die Anzahl der Dimensionen schrittweise reduzieren, bis du nur noch 1 hast. Dann die passende Aktivierungsfunktion anwenden (vermutlich Sigmoid) und du hast dein Ergebnis. Ein vereinfachtes Beispiel ist z.B. hier: https://medium.com/@sidathasiri/building…ow-f1f2f56bd83b

Das Problem: Ohne die ganzen Begriffe zu kennen hast du quasi keine Chance diese Frameworks richtig anzuwenden. Je nach Vorkenntnissen sind dafür mehrere Monate Vollzeit nötig. Theoretisch kannst du natürlich auch irgendeinen fertigen Code verwenden, aber typischerweise ist viel Finetuning nötig, bis so ein Netzwerk mal richtig funktioniert und das ist selbst wenn man jedes Detail verstanden hat immer noch schwierig. Wenn du fertigen Code nimmst und es klappt nicht auf Anhieb (bzw. die Ergebnisse sind sehr schlecht, also nur leicht besser als raten), hast du keine Chance das irgendwie zu verbessern

Wenn du das geschafft hast, kommt das zweite Problem: Trainingsdaten. Du wirst eine Menge (typischerweise einige tausend) Beispiele für beide Kategorien brauchen, damit das robust funktioniert. Entweder erstellst du alle von Hand (tage- bis wochenlange extrem nervige Fleißarbeit), oder du lässt dir clevere Augmentierungsverfahren einfallen und hoffst, damit abzudecken. Z.B. indem du gute Bilder nimmst und die Qualität per Code verschlechterst (Blur, Verzerrung, etc.) und so schlecht Bilder erzeugst. Sind aber hinterher deine Eingabebilder auf eine andere Art schlecht, wird dein Netzwerk nur Quatsch antworten.
Lieber dumm fragen, als dumm bleiben!

drakon

Supermoderator

Beiträge: 6 514

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

07.08.2021, 15:44

Prinzipiell kann ich Jonathan nur zustimmen.

Die eigentlich Frage aber kann man relativ gut beantworten.

Zitat

Meine Frage: kennt eventuell jemand eine Bibliothek, die sowas kann und die gesamte KI/das neuronale Netzwerk kapselt? Oder ist die Vorstellung, die ich hier habe, naiv und man muss sich für jedes neue zu trainierende Bild ein jeweils eigenes angepasstes neuronales Netzwerk mit spezifischer struktir suchen?

Keras wurde ja schon genannt, man kann i.a. dafür aber auch Tensorflow empfehlen (Keras ist dafür eine Abstraktionsebene). Die Kapselung da ist extrem gut und man muss kaum Detail Wissen der Implementierung haben. Wie aber Jonathan erwähnt ist die Challenge die Anwendung all der Möglichkeiten, die man hat.

An sich würde ich ebenfalls empfehlen mindestens die Grundlagen zu Machine Learning zu verstehen. Der Kurs hier ist recht Einsteigerfreundlich.

Auf der anderen Seite klingt dein Problem nach etwas, dass man mit recht geringen Vorwissen wahrscheinlich hinkriegt. Gegeben du hast gute Daten und eine klare Definition was gut und schlecht ist sollte es wahrscheinlich sein, dass du mit den gängigen Empfehlungen für Bild Klassifizierung hier recht schnell damit was zusammenbauen kannst. Du wirst damit keine Preise gewinnen, aber je nach Anwendungsfall reicht das dir schon.

FSA

Community-Fossil

  • Private Nachricht senden

4

07.08.2021, 22:27

Zitat

An sich würde ich ebenfalls empfehlen mindestens die Grundlagen zu Machine Learning zu verstehen. Der Kurs hier ist recht Einsteigerfreundlich.

Da in dem Kurs von Artificial Neural Networks (ANN) die Rede ist, würde ich noch gerne das Stichwort Convolutional Neural Net (CNN) einwerfen. Das ist eine andere Art von neuralem Netz und vor allem für Bildverarbeitung mit beibehalten von Positionsdaten der Pixel sinnvoll. CNNs sind auch nicht sonderlich komplexer als ANNs, von daher solltest du (@Elmi) dich vielleicht erstmal mit diesem Stichwort auseinandersetzen, sobald du weißt wie Neurale Netze grundlegend aufgebaut sind.

Edit: Ah ich sehe gerade, Jonathan hat da schon was zu verlinkt.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Jonathan

Community-Fossil

  • Private Nachricht senden

5

20.08.2021, 11:24

Naja, Artificial Neural Networks ist eher der Oberbegriff, da man halt die Neuronen in echten Gehirnen gesehen hat und angefangen hat, diese zu simulieren.

Die meisten Gängigen Netzwerke basieren auf Ebenen (Layern), ein Convolutional-Layer beschreibt dann einfach nur die Art, wie die Neurons aus der einen Ebene mit dem der nächsten verknüpft sind. Alles mit allem zu verbinden (Fully Connected Layer) ist prinzipiell sehr mächtig, aber sehr schwer und vor allen Dingen super teuer zu trainieren. In der Praxis hat man aber oft eine Kombination aus verschiedenen Verbindungstypen (es gibt noch viel mehr), von daher sind diese Begriffe immer schwammig.
"Deep Learning" kommt dann als Begriff von Deep Neural Networks, und beschreibt einfach nur Netzwerke die sehr viele Ebenen haben (also ganz grob sowas wie 20-100).

Was ich damit sagen will: Begriffe wie Deep-Learning oder CNN's haben einerseits eine sehr konkrete Bedeutung, sind aber andererseits auch so populär, dass nicht alles was damit bezeichnet wird auch der ursprünglichen Definition entspricht.
Lieber dumm fragen, als dumm bleiben!

6

28.04.2022, 17:56

Hi,

ich bin überrascht, dass noch niemand OpenCV genannt hat. Da kommen von Haus aus einige Klassifikatoren mit, nicht nur diverse "neuronale Netze"-Architekturen, sondern bspw. auch Entscheidungsbäume.
Erfahrungsgemäß kann man hier ziemlich flott in ~20 Zeilen Pythoncode, bei dem man sich von den Tutorials "inspirieren" lässt, was zum testen aufziehen.
Kann es sehr empfehlen.

MfG
Check

Jonathan

Community-Fossil

  • Private Nachricht senden

7

29.04.2022, 13:20

Hm, als ich das letzte Mal mit OpenCV gearbeitet habe waren das eher 'Vorwärts'-Algorithmen, also Dinge wie Kantenerkennung oder Feature-Tracking über mehrere Frames hinweg, die nicht auf Machine Learning basieren. Wenn die Algorithmen das tun, was man braucht, ist es eine gute Idee die zu benutzen allerdings scheint mir die ursprüngliche Frage auf etwas abzuzielen, wo auch eine gewisse abstrakte Semantik benötigt wird - und sowas kriegt man eigentlich nur mit ML hin.
Aber da die Frage nicht sehr konkret gestellt ist, ist der Hinweis trotzdem gut, vielleicht ist ja tatsächlich das richtige dabei und Elmi hat nur zuerst an Netzwerke gedacht, weil die halt heute irgendwie jeder benutzt.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige