Das war die Devise beim jährlichen Hackathon der ZEISS Digital Innovation Partners vom 8. bis 10. Februar 2019 in München. „Bringing Data Science to the Nano Age“ lautete der Titel der Einladung nach München, welcher sieben Mitarbeiter der Saxonia Systems AG (seit 03/2020 ZEISS Digital Innovation) folgten. Wir waren ein bunt gemischtes Team aus Entwicklern unterschiedlicher Fachgruppen, Designern und Softwarearchitekten und wurden unterstützt von einem befreundeten KI-Experten.
Der Hackathon begann am Freitagabend mit einem Meetup der Datageeks Usergroup aus München und drei spannenden Vorträgen zu den Themen „Word Embeddings für multilinguale Sprachverarbeitung“, „Anomaliedetektion mit Autoencodern“ und „Machine Learning im ZEISS-Unternehmen“.
Am Samstagmorgen startete der eigentliche Hackathon. Nach einer kurzen Begrüßung erfolgte direkt der Einstieg ins Thema mit der Vorstellung der möglichen Aufgaben: Zur Auswahl standen zwei Aufgaben der ZEISS Semiconductor-Sparte und eine Aufgabe der ZEISS Microscopy, alle aus dem Bereich der Bildverarbeitung, sowie eine vierte Aufgabe zum Thema Zeitreihenverarbeitung und CPU-Monitoring.
Wir teilten uns in zwei Teams auf und wählten das Zeitreihen-Thema und die Aufgabe zur Defekterkennung auf Photomasken. Ab um eins lief die Uhr – 24 Stunden hatten wir Zeit. Insgesamt 75 Hacker, organisiert in 16 Teams, stürzten sich in die Arbeit und versanken hinter ihren Laptops. Neben einem Kühlschrank voller koffeinhaltiger Erfrischungsgetränke sorgten nun auch Mitarbeiter, die Chips und Schokolade vorbeibrachten, für die richtige Hacker-Atmosphäre.
Aufgabe #1 – Zeitreihenverarbeitung
Für die Zeitreihen-Aufgabe standen ca. 1,8 Mio. Datenpunkte von 235 Maschinen zur Verfügung, die stündliche Temperaturmessungen von zwei CPUs enthielten. All diese Maschinen sind irgendwann kaputt gegangen und so wurde den Messpunkten nachträglich die verbleibende Lebenszeit hinzugefügt. Das Ziel der Aufgabe bestand darin, aus den gegebenen Temperaturwerten eine Vorhersage der verbleibenden Lebenszeit zu ermöglichen, um den Nutzer warnen zu können und rechtzeitig entsprechende Wartungsarbeiten zu veranlassen. Darüber hinaus sollte ein besonderer Fokus auf das UX-Design und eine nutzerfreundliche Darstellung der Vorhersage-Ergebnisse gelegt werden.
Also ran an die Arbeit und erst einmal die Daten visualisieren. Nachdem wir uns ein Bild gemacht hatten und uns über das Ziel der Analyse klar geworden waren, wählten wir zur Lösung des Problems ein LSTM (Long Short-Term Memory) als neuronales Netzwerk. Diese eignen sich durch ihre „Speicherfähigkeit“ bestens für eine Zeitreihenverarbeitung.
Parallel entwickelten wir eine Monitoring-Oberfläche, die die Temperaturverläufe in einem übersichtlichen Diagramm darstellt und den Nutzer bei Auffälligkeiten warnt. Eine rote Linie im Zeitverlauf und eine Warnmeldung sollten dem Nutzer Handlungsbedarf signalisieren.
Aufgabe #2 – Defekterkennung
Die erste Teilaufgabe unseres zweiten Teams bestand darin, Mikroskopaufnahmen zu klassifizieren und ellipsenförmige Features auf den Bildern zu erkennen. Hierbei handelte es sich um Defekte auf Photomasken aus der Halbleiterfertigung. Dafür standen insgesamt 111 Bilder in den drei Kategorien „Defekt vollständig sichtbar“, „Defekt teilweise im Bild sichtbar“ und „Kein Defekt“ zur Verfügung. Der zweite Arbeitsschritt, die Segmentierung, hatte das Ziel, die Defekte im Bild farbig zu markieren und als Bonusaufgabe sollte eine passende Ellipse um den Defekt gezeichnet werden.
Klassifizierung
Aufgrund des kleinen Datensatzes wurde dieser zunächst durch Drehen und Spiegeln der Bilder augmentiert. Da es sich im ersten Schritt um eine klassische Bildklassifizierungsaufgabe handelte, entschieden wir uns für die Verwendung eines ResNet 50. Wir trainierten dieses Modell auf einer lokalen GPU, um das fertig exportierte Modell dann in unserer Cloud-Lösung für die Inferenz zu nutzen.
Zeitgleich entwickelten wir auch in diesem Team eine Web-Oberfläche, auf der man die Mikroskopaufnahmen hochladen und das Klassifizierungsergebnis für die erste Teilaufgabe einsehen konnte.
Das Endergebnis unseres Trainings war eine 100%ige Genauigkeit bei der Klassifizierung der Validierungsdaten. Ein fantastisches Ergebnis, das jedoch bei solch einem geringen Datenumfang erst einmal nicht viel aussagt. Wie so oft in der Verwendung von neuronalen Netzen wären hier mehr Daten von Vorteil gewesen.
Segmentierung
Für die zweite Teilaufgabe entschieden wir uns, die Trainingsdaten selbstständig mit Labels zu versehen. Hierfür markierten wir die Daten mit den zentralen Punkten sowie der langen und kurzen Achse der Ellipsen, damit diese Zusatzinformation das Training eines zweiten Netzes ermöglicht. Leider ist uns genau hier die Zeit ausgegangen und wir haben es nicht geschafft, die zweite Aufgabenstellung zu erfüllen.
Für die Entwicklung und das Training der Machine-Learning-Algorithmen nutzten wir in beiden Teams das Python Framework Keras. Dieses ermöglicht eine vergleichsweise schnelle und intuitive Erstellung der gewünschten Netzwerk-Architekturen und deren Export in gängige Formate.
Zusammenschluss der Komponenten
Zu den Bewertungskriterien der Jury gehörten neben der technischen Lösung auch der Businesswert und das UI-Design unserer Lösungen. Also mussten wir uns auch über das Deployment der Machine-Learning-Modelle Gedanken machen, denn eine Konsolenanwendung verkauft sich bekanntermaßen schlecht. Wir entschieden uns in beiden Teams, eine Angular-Webanwendung zu entwickeln, die über einen HTTP-Request mit dem Modell in der Cloud kommuniziert und das Ergebnis anschaulich darstellt. Microsoft stellte als einer der Sponsoren der Veranstaltung jedem Team des Hackathons einen Azure-Cloud-Zugang sowie ein Budget von 170 € zur Verfügung. Zudem stand uns ein Mitarbeiterteam mit Rat und Tat zur Seite.
Für die Anwendungen in unserem ersten Team nutzten wir den Azure-Machine-Learning-Dienst, um einerseits die Machine-Learning-Modelle zu hosten und andererseits die Kommunikation mit der Webanwendung zu ermöglichen. Um das Modell zu hosten, muss dieses zunächst im Machine-Learning-Service-Workspace registriert und anschließend in ein Docker Image verpackt werden, welches alle erforderlichen Abhängigkeiten beinhaltet, um das Modell ausführen zu können. Dieses Image kann anschließend durch eine Azure-Container-Instanz zur Verfügung gestellt werden und auf diese Weise als Webservice fungieren. Da Azure jedoch in diesem Dienst keine CORS-Header sendet und diese auch nicht konfiguriert werden können, war es nicht möglich, diesen Webservice mit einem einfachen HTTP-Request aus unserer Angular-Anwendung heraus anzusprechen. Für diese Kommunikation war ein Umweg über Azure Functions mit einem separaten HTTP-Endpunkt nötig.
Unserem zweiten Team, das sich mit der Defekterkennung auf Photomasken beschäftigte, gelang leider erst wenige Minuten nach Ende der Bearbeitungszeit der Durchstich, der es ermöglichte, aus einer Webanwendung heraus ein Bild an den HTTP-Endpunkt zu senden und ein Klassifikationsergebnis als Antwort zu bekommen. So konnten wir die Gesamtlösung leider nicht offiziell präsentieren, aber unserem inneren Wohlbefinden tat der Erfolg gut und wir haben viel über das Deployment von Machine-Learning-Modellen dazugelernt.
Ergebnispräsentation
Der Hackathon wurde am Sonntagnachmittag mit den Teampräsentationen beendet. Jedes Team hatte in einem Pitch drei Minuten Zeit, die fünfköpfige Jury von seinen Ideen und der Umsetzung zu überzeugen.
Es war überaus interessant, die bunte Palette an Lösungsansätzen zu sehen. Von einem ausgefeilten Businesskonzept oder einer besonders eleganten UI bis hin zu höchst anspruchsvollen technischen Lösungen war alles dabei. Leider gingen unsere beiden Teams bei der Preisverleihung leer aus.
In unserem Rückreisegepäck hatten wir aber nicht nur einige Werbegeschenke und etwas Schlafmangel, sondern vor allem wertvolle Erfahrungen in der Entwicklung von Machine-Learning-Lösungen für Zeitreihen und Bildverarbeitung, in der Umsetzung von Machine Learning in der Azure Cloud und in der Entwicklung einer Schnittstelle zwischen Webanwendung und Azure-Machine-Learning-Diensten. Wir bekamen einen Einblick, was es bedeutet, Daten vorzubereiten und zu labeln, konnten unsere CSS-Skills auffrischen und hatten jede Menge Spaß in der Teamarbeit.
Wir bedanken uns bei dem Veranstalter ZEISS Digital Innovation Partners für die gelungene Organisation, die Konzeption der Aufgabenstellungen, die Hilfestellungen und die exzellente Verpflegung. Es war uns eine große Freude.
Bilder: © ZEISS Hackathon Munich 2019