Wie ich gelernt habe, mir keine Sorgen zu machen und die Bildverarbeitung liebte

Hallo Habr! Mein Name ist Artyom Nagumanov, ich habe über 15 Jahre Erfahrung in Softwareentwicklung, Projektmanagement, Teams, IT-Abteilungen. Ich habe mich schon immer für das Thema künstliche Intelligenz und Bildverarbeitung interessiert. Bei der Entwicklung von Software wurde ich immer wieder von dem Gedanken überrascht, warum man der Unternehmensanwendung nicht zumindest ein wenig Intelligenz hinzufügen sollte, um die Teilnahme des Benutzers an einem Prozess, der auf den ersten Blick völlig unformal erscheint, teilweise oder vollständig abzulehnen.

Bild

Um dies zu tun, musste ich jedes Mal den ganzen Weg neu gehen: die entsprechenden Bibliotheken studieren / abrufen, auf einer virtuellen Linux-Maschine installieren, um kostenlose Tools zum Erstellen und Trainieren neuronaler Netze zu testen, Netzwerkarchitekturen finden, die derzeit die Krone der menschlichen Schöpfung in der Welt sind künstliche Intelligenz. Dieser Prozess ist ziemlich mühsam und macht nicht viel Spaß. Als ich einmal die Architektur eines anderen neuronalen Netzwerks verstand, wurde mir klar, dass es an der Zeit war, dem ein Ende zu setzen und ein universelles Werkzeug zu schaffen, das die gesamte Routine übernimmt. Und ich muss nur ein paar große Glasknöpfe drücken und das Ergebnis erhalten. In dem Bild, das Aufmerksamkeit erregt (im ersten Absatz des Artikels), wird ein Beispiel für die Erkennung von Wasserstrahlen von einer Bewässerungsmaschine gezeigt, aber das Wichtigste zuerst.

Wir machen Anerkennungsservice


Ich hatte die folgende Idee: Um eine Website zu erstellen, auf der der Benutzer Bilder hochladen kann, klicken Sie auf die Schaltfläche „Erkennen“ und erhalten Sie das Ergebnis im JSON-Format. Tatsache ist jedoch, dass es keinen universellen Algorithmus oder ein neuronales Netzwerk gibt, das Objekte auf der Welt finden kann. Aus diesem Grund habe ich beschlossen, meine eigenen Modelle neuronaler Netze so zu trainieren, dass sie die benötigten Objekte erkennen, wobei nur die Site- und Beispielbilder verwendet werden, die erkannt werden müssen. Bevor ich mit der Arbeit anfing, analysierte ich, welche Entwicklungen in der Welt zu diesem Thema existieren. Wie sich herausstellte, arbeiten viele Giganten der IT-Branche in diese Richtung: Yandex, Mail.ru, Amazon. Der Hauptnachteil war, dass all diese Riesen Geld für ihre Dienste wollen. Dies war genug für mich, um meine eigene Entwicklung zu beginnen.Ich hatte bereits Hintergrundinformationen und wusste, wie man Objekte auf Bildern gut findet und klassifiziert. Alles, was übrig blieb, war, alles zusammenzusetzen und eine bequeme Oberfläche zu erstellen.

In den allermeisten Fällen verwende ich in meinen Projekten Microsoft-Technologien, was sich erheblich auf die in diesem Projekt verwendeten Technologien auswirkte:

  • ASP.NET (C # -Sprache)
  • Webpi
  • Javascript-Abfrage
  • MSSQL Server
  • Python
  • Tensorflow

Zunächst habe ich beschlossen, einen REST-Service zu erstellen, der das Gehirn des gesamten Systems bildet und es uns ermöglicht, Befehle über die API zu akzeptieren und die ganze grobe Arbeit zu erledigen. Die Architektur des neuronalen Netzwerks, ich wählte Maske R-CNN, dieses Netzwerk kann Objekte im Bild finden und sie klassifizieren.

Alles lief mehr oder weniger regelmäßig, bis ich die Realisierung des Trainings meiner eigenen Modelle erreichte. Der Lernprozess war sehr kostspielig und stellte hohe Anforderungen an die Hardware. Natürlich wusste ich das vorher, aber vorher konnte ich es mir leisten, ein oder zwei Tage auf das Training des Modells zu warten und die CPU für Berechnungen zu verwenden. Da es jedoch darum ging, ein bequemes und schnelles Werkzeug zu erstellen, konnte ich das lange Training des Modells nicht ertragen. Die Frage ist also mit der Installation eines speziellen Servers mit einer geeigneten Grafikkarte, die die CUDA-Technologie unterstützt, gereift ( https://ru.wikipedia.org/wiki/CUDA)) und verkürzt die Zeit, die zum Trainieren des Modells benötigt wird, erheblich. Um das Projektbudget nicht zu erhöhen, habe ich mich für eine kostengünstige NVIDIA GeForce GTX 1050 Ti-Grafikkarte entschieden. Parallel zum Dienst habe ich unter Windows Forms einen Client erstellt, der das Testen ermöglicht.

In der zweiten Phase habe ich eine Website erstellt, die im Wesentlichen ein Kunde des Dienstes ist. Ich habe mich nicht wirklich um das Design gekümmert und nicht einmal die fertige Vorlage genommen. Ich habe alles selbst geschrieben und nur das verwendet, was Visual Studio standardmäßig bietet. Das Erstellen und Testen der Site dauerte weitere drei Monate.

Ich war unglaublich glücklich, als ich das Bild hochgeladen, ein fertiges Modell zur Erkennung ausgewählt, auf die Schaltfläche „Erkennen“ geklickt und das erste Ergebnis erhalten habe.

Bild

Die eigentliche Aufgabe der Bildverarbeitung


Während ich an dem Erkennungssystem arbeitete, kam mir eine echte Aufgabe in den Sinn - die Position der vorderen Schaufel einer speziellen Maschine zu bestimmen, die den Schnee auf der Straße reinigt. Um dieses Problem zu lösen, war ich nicht darauf beschränkt, einen Lösungsansatz zu wählen, und wollte von Anfang an spezielle Sensoren installieren, die den Winkel der Schaufel bestimmen, gab diese Idee jedoch schnell auf. Wie sich herausstellte, müssen diese Sensoren ständig kalibriert werden, da die Schaufel regelmäßig entfernt und eine weitere eingesetzt wird. Neben Gesprächen mit Kollegen, die solche Sensoren installieren, stellte ich fest, dass diese Sensoren auf der Straße sind und für Sabotage zur Verfügung stehen. Die Idee kam mir, die Arbeitssteuerung der Schaufel zu analysieren, aber wie sich herausstellte, gehen sie im wirklichen Leben so weit, die Schaufel zu entfernen, und auf den Arbeitskörpern signalisieren sie, dass die Schaufel abgesenkt ist.Mit einem Wort, wieder keine verlässliche Option. Nun, sie ließen mir keine andere Wahl, als die volle Leistung des Erkennungsdienstes zu nutzen. Ich stellte die Kamera in den Fahrgastraum des Autos, der auf den vorderen Spaten schaut, sammelte mehrere hundert Proben des Spatens, markierte sie mit dem VGG-Werkzeug, das ich in die Baustelle eingebaut und mit dem Training begonnen hatte. Der Vorgang dauerte ungefähr zwei Stunden und in der 30. Ära erhielt ich ein akzeptables Erkennungsergebnis, die Erkennungsgenauigkeit lag bei 95%.Der Vorgang dauerte ungefähr zwei Stunden und in der 30. Ära erhielt ich ein akzeptables Erkennungsergebnis, die Erkennungsgenauigkeit lag bei 95%.Der Vorgang dauerte ungefähr zwei Stunden und in der 30. Ära erhielt ich ein akzeptables Erkennungsergebnis, die Erkennungsgenauigkeit lag bei 95%.

Bild

Damit das System vollständig am Auto funktioniert, musste ich es ändern: Hinzufügen der Möglichkeit, Fotos über FTP hochzuladen, und nicht nur über die API, weil Mit dem Camcorder konnten Sie ein Foto aufnehmen und an das angegebene FTP senden. Es wurde die Möglichkeit hinzugefügt, das Ergebnis in der Datenbank zu speichern und dann über die API für den angegebenen Zeitraum die Ergebnisse abzurufen, zu analysieren und in das in 1C geschriebene Buchhaltungssystem zu schreiben. Dies ist übrigens ein riesiges Steuerungssystem, das Tausende von Autos gleichzeitig analysiert und viele Parameter wie den Kilometerstand steuert , Maschinenstunden, Kraftstoff im Tank, Fahrten, Leerlauf usw., aber das ist eine ganz andere Geschichte. Die erste Version der Schaufelsteuerung ist fertig, wird aber im Kampf nur bei Schneefall getestet.

Wie einfach ist das


Die Hauptidee des Erkennungsdienstes ist die einfache Erstellung und Schulung Ihrer eigenen Modelle. Um zu verstehen, ob jemand wirklich sein eigenes Modell erstellen und trainieren kann, bat ich meinen Assistenten, ein Modell zum Erkennen von Wasserstrahlen von einer Bewässerungsmaschine zu erstellen. Die einzige Eingabe, die ich ihr gab, war ein Video über den Betrieb der Bewässerungsmaschine aus der Kabine und die Adresse des Erkennungsdienstes. Am Abend stellte ich diese Aufgabe für sie auf und am Morgen, als ich in das System ging, sah ich ein fertiges Modell, das wirklich funktionierte. Unten sehen Sie einen Screenshot des Fensters, in dem das Modell trainiert wird.

Bild

Während Sie lernen, bleibt die Ära des Modells erhalten, und wir können jede Ära testen, ohne den Lernprozess zu unterbrechen.

Entwicklung und Nutzung


Ein Beispiel dafür, wie alles live funktioniert, ist im Videoclip zu sehen .

Ich habe lange darüber nachgedacht, dass wenn jemand sein eigenes Modell erstellen kann, warum es dann nicht möglich ist, dieses Modell mit anderen Benutzern des Systems zu teilen. Als Ergebnis habe ich einen Abschnitt hinzugefügt, in dem Sie ein erfolgreiches Modell mit einem Mausklick platzieren können und jeder Teilnehmer es verwenden kann. Der Service ist völlig kostenlos.

Jetzt nutze ich den Service selbst, um meine Aufgaben der Automatisierung von Prozessen in Unternehmen zu lösen, in denen Bildverarbeitung eingesetzt werden kann. In Zukunft möchte ich weitere Erkennungsansätze hinzufügen, nicht nur neuronale Netze. Ich würde mich sehr freuen, wenn jemand anderes, der diesen Service nutzt, seine Probleme lösen kann.

All Articles