Betrachtet man heute den Markt an Deep Learning Frameworks, so wird man meist im Bereich Python fündig. NumPy, Matplotlib, MXNet, PyTorch oder auch Tensorflow sind aus der Deep-Learning-Gemeinde nicht mehr wegzudenken. Startups, die über einen eher kleinen sowie modernen IT-Stack verfügen, haben zumeist kein Problem damit, sich schnell in Richtung Python oder andere moderne Implementierungssprachen auszurichten.
Doch wie sieht es mit großen Unternehmen aus, die einen eher großen IT-Stack und über die Jahre auch sehr gut ausgebildete und erfahrene Mitarbeiter aufgebaut haben? Meist steht hier die Programmiersprache Java im Fokus. Wer Lösungen im Bereich Deep Learning entwickeln will, wird im Java-Universum bisher kaum fündig, was passende Frameworks betrifft. Genau diese Zielgruppe spricht AWS mit ihrer Deep Java Library (DJL) an. AWS möchte es Millionen von Java Developern ermöglichen, Deep-Learning-Modelle in ihrer gewohnten Programmiersprache zu entwerfen und zu trainieren.
DJL wird mit nativen Java-Konzepten auf bestehenden Deep-Learning-Frameworks aufgebaut. Es bietet den Benutzern Zugang zu den neuesten Innovationen im Bereich Deep Learning und die Möglichkeit, mit modernster Hardware zu arbeiten. Die einfachen APIs abstrahieren die Komplexität, die mit der Entwicklung von Deep Learning-Modellen verbunden ist, und machen sie leicht erlernbar und einfach anzuwenden. Darüber hinaus stehen den Nutzern in der Library bereits trainierte Modelle Verfügung, die sofort einsatzbereit sind.
Wie ist dies nun möglich? DJL verknüpft native Java Konzepte mit bestehende Deep-Learning-Frameworks. Dadurch sind Anwender in der Lage, mit modernsten Innovationen im Bereich Deep Learning wie auch mit der modernsten Hardware zu arbeiten. Die einfachen APIs abstrahieren die Komplexität, die mit der Entwicklung von Deep Learning-Modellen verbunden ist. Somit sind diese leicht erlernbar und einfach anzuwenden.
Die AWS DJL eignet sich einerseits für den sofortigen Einsatz bereits vortrainierter Modelle. Diese lassen sich als Deep Learning Use Cases von Tag eins an in die jeweilige Java-Applikation integrieren. Andererseits lassen sich mit DJL auch eigene Modelle je nach Bedarf trainieren. Hierfür braucht es dann allerdings geeignete Datensätze, die als „Futter“ für das KI-Training dienen. Im vorliegenden Artikel sehen wir uns zunächst ein vortrainiertes KI-Modell für die Bild-Objekt-Erkennung an, welches bereits in DJL enthalten ist. Im zweiten Implementierungsbeispiel wird dann beschrieben, wie sich ein eigenes Modell mit einem vorhandenen Datensatz trainieren lässt.
Deep Learning ist bereits heute in einer Vielzahl von Use Cases für Unternehmen relevant. So kommt es beispielsweise im Einzelhandel für Prognosen der Kundennachfragen oder auch zur Analyse von Kundeninteraktionen mit Chatbots zum Einsatz; in der Automobilindustrie, um autonomen Fahrzeugen das Fahren bei zu bringen oder auch um Qualitätsmängel in der Produktion zu erkennen.
In unserem Implementierungsbeispiel möchten wir uns der Objekterkennung auf einzelnen Bildaufnahmen widmen. Für diesen Use Case bietet uns DJL ein bereits trainiertes Modell, sodass wir uns für den ersten Schritt nicht mit dem Training des Modells beschäftigen müssen.
Um DJL mit einem Anwendungsprojekt zu verwenden, erstellen wir im ersten Schritt ein Projekt in Maven und fügen DJL als Dependency in die pom.xml Datei ein:
Im nächsten Schritt suchen wir uns ein Bild heraus, welches wir durch unsere Object Detection laufen lassen wollen. Ich habe hierfür eine Gruppe Personen im Star Wars Outfit herausgesucht:
Abbildung 1: Vier Personen im Star Wars-Kostüm. Quelle: Unsplash.com
Für die Demoapplikation lege ich die Datei in meinem Projekt unter „main/ressources/test“ ab. In einer marktfähigen Applikation ließe sich an dieser Stelle auch eine UI für den Endkunden einrichten, wo er ein Bild seiner Wahl hochladen kann.
Im nächsten Schritt implementieren wir nun die API des DJLs in unserer Applikation:
Wichtig ist hierbei, dass wir unser Source-Bild wie folgt angeben: „Path imageFile = Paths.get("src/test/resources/Starwars.jpg");“
Mithilfe des „Criteria“-Objects laden wir dann unser vortrainiertes Modell mit folgenden Parametern:
- optApplication à In unserem Fall nutzen wir das Object Detection Model
- setTypes à Definition von Input und Output
- optFilter à Auswahl des Modells (in unserem Fall resnet50)
Lassen wir nun unsere „main“-Methode laufen, so wird uns im Ordner „build/output“ das Ergebnis unserer Objekt-Erkennung ausgegeben:
Abbildung 2: Klassifizierung des Star Wars Bildes
Hierauf ist dann zu erkennen, dass die vier Objekte auf dem Bild als Personen erkannt worden sind.
Und schon haben wir unseren ersten Deep Learning Use Case in unsere Java-Applikation integriert. Natürlich geht das nicht für alle Vorgänge so einfach. Umso komplexer der Use Case ist, desto höher auch der Aufwand für das Training. Glücklicherweise gibt es auch hierfür ein vorgefertigtes Vorgehen bei DJL, das wir uns im nächsten Teil ansehen.
Eine ausführliche Version dieses Artikels mit praxisnahen Implementierungen und Codebeispielen ist in Ausgabe 01-2021 der Fachzeitschrift JavaSPEKTRUM zu lesen.