Steel Mill – MichaelGaida/Pixabay

09. Juni 2020 / von Tobias Blei, Valentin Kuhn

Das Auf und

Ab einer

Kaggle

Challenge

Deep Defect Detection

Forming

Ende letzten Jahres fanden wir uns zu dritt zusammen, um an der Severstal-Challenge auf Kaggle teilzunehmen. Wir, drei Studenten bei Accso, stürzten uns ohne größere Überlegung auf die Herausforderung: Die Erkennung, die Einordnung und das pixelgenaue Einzeichnen von Defekten auf Stahlplatten mittels maschinellen Lernens. Dafür setzten wir uns sechs Wochen lang je einen Nachmittag zusammen und ließen unter der Woche die Grafikkarten beim Training heiß laufen. Um in so wenig Zeit und mit unserem begrenzten Wissen über Bildsegmentierung schnelle Erfolge zu erreichen, suchten wir nach Abkürzungen in der Entwicklung und beim Training der neuronalen Netze.

Storming

Anfangs suchten wir uns bestehende Ansätze zur Datenaufbereitung, Bilderkennung und -segmentierung zusammen, welche beispielsweise im Kaggle-Forum zur Verfügung gestellt wurden. Daraus bauten wir eine Pipeline zum Einlesen und Verarbeiten der Daten sowie einige Modelle in TensorFlow und Keras. In dieser Pipeline glichen wir beispielsweise die sehr ungleich verteilten Klassenhäufigkeiten der Fehler im Trainingsset (wie rechts abgebildet) mittels Augmentierung aus.

Klassenverteilung Kaggle Challenge
Valentin Kuhn
finale Architektur im ersten Anlauf der Kaggle Challenge
finale Architektur im ersten Anlauf
Valentin Kuhn

Norming

Schnell merkten wir, dass dieses ungestüme Vorgehen viele Probleme mit sich brachte: Wir schufen Inkonsistenzen in unserer Datenhaltung, in der Aufbereitung der Daten und zwischen den verschiedenen Modellen. Deshalb strukturierten wir unsere Zusammenarbeit, indem wir Schnittstellen definierten, Trainingsdaten vereinheitlichten und eine One-Click-Pipeline für das Training verschiedener Modelle aufzogen. So konnten wir innerhalb der Woche viele verschiedene Modelle trainieren, ohne uns um Anpassungen anderer Modelle kümmern zu müssen.

Die besten Ergebnisse erhielten wir, indem wir ein ResNet zur Klassifizierung der Bilder in „defekt“ und „kein defekt“ vor ein Segmentierungsmodell schalteten. Anschließend nutzten wir ein ResUNet oder UNet++ zur pixelgenauen Segmentierung der Defekte. Im Training erreichten wir dabei sehr gute Werte, die wir in der Evaluation leider nicht halten konnten. So erreichten wir in der Evaluation nur noch einen Dice Score von 0,08, wie rechts in Orange gezeigt.

Overfitting - Kaggle Challenge
Valentin Kuhn

Performing

Ernüchtert von der schlechten Performance in der Evaluation kehrten wir ans Reißbrett zurück. Diesmal konstruierten wir unsere Datenstrukturen und Pipelines selbst, so dass wir sie flexibel an unsere Anforderungen anpassen konnten. Dies erlaubte es uns viele Modelle auszuprobieren und diese iterativ zu verbessern. Neben dem komplett neuen Preprocessing der Daten haben wir auch die Modelle von Grund auf selbst in PyTorch implementiert. Mit diesen Neuerungen erreichten wir gute Ergebnisse in der Evaluation.

Dice Loss der Reimplementierung - Kaggle Challenge
Dice Loss der Reimplementierung
Valentin Kuhn
Vortrag beim virtuellen Düsseldorf Data Science Meetup
Vortrag beim virtuellen Düsseldorf Data Science Meetup
Valentin Kuhn

Die gemachten Erfahrungen und Lessons Learned möchten wir mit anderen Machine-Learning-Begeisterten teilen. Gesagt getan, so haben wir unsere Erfahrungen in den Einstieg mit maschinellem Lernen auf dem Düsseldorfer Data Science Meetup präsentiert, das im April komplett online stattfand.

Autoren

Weitere Artikel

Das könnte Sie auch interessieren