Motivation

Wir vom aktuellen Projekt-Team haben uns mit medizinischer Bildgebung, Deep Learning (DL) und Softwareentwicklung beschäftigt. Gestartet haben wir mit einer Einführung in MeVisLab, einer Software zum Visualisieren und Bearbeiten von medizinischen Bildern, und RedLeaf, einem am Fraunhofer Institut entwickelten Deep Learning-Framework. RedLeaf ermöglicht es, u.a. die in MevisLab vorverarbeiteten Bilddaten für Deep Learning zu verwenden. Um den Umgang mit diesen beiden Software-Anwendungen zu erlernen, haben wir zunächst auf die Daten der KITS21-Challenge zurückgegriffen. Das Ziel dieser Challenge, an der das Projektteam 2020/2021 teilgenommen hat, war es den besten Algorithmus zur Segmentierung von Nieren, Nieren-Tumoren und -Zysten in computertomographischen Aufnahmen von Patient:innen zu entwickeln. Bereits kurz nachdem wir uns mit den Grundlagen der Software vertraut gemacht hatten, haben wir die SARTORIUS - Cell Instance Segmentation Challenge in Angriff genommen. Ziel dieses Wettbewerb war die Instanz-Segmentierung verschiedener neuronaler Zelltypen. Auch wenn wir weit davon entfernt waren, hier eine echte Chance zu haben, waren wir mit unseren Ergebnissen sehr zufrieden.

Bei der Arbeit mit MevisLab und RedLeaf ist uns aufgefallen, dass der Einstieg in das RedLeaf-Framework nicht einfach ist: So müssen für das Erstellen und Trainieren eines neuronalen Netzes mehrere Dateien per Hand angelegt und geschrieben werden. In diesen wird u.a. die Architektur des neuronalen Netzes festgelegt, und verschiedenste Parameter wie die Learning Rate oder der Optimizer gesetzt. Das Problem: Die Parameter und Einstellungsmöglichkeiten müssen erst einmal bekannt (und im Idealfall verstanden) sein. Eine umfassende Auflistung möglicher Parameter, idealerweise mit Beschreibungen, existiert nicht, nicht zuletzt weil diese spezifisch für eine gegebene Netzarchitektur sein können. Daher haben wir seedRedLeaf entwickelt, eine Webanwendung zum übersichtlichen Erstellen und Trainieren von neuronalen Netzen im RedLeaf-Framework. Alle konfigurierbare Parameter werden angezeigt und sind mit Tooltips versehen - die nötigen Dateien werden nach Wahl der gewünschten Einstellungen automatisch generiert.

Wir hoffen, dadurch eine benutzerfreundliche Anwendung geschaffen zu haben, die einen schnellen und unkomplizierten Einstieg in die wissenschaftliche Arbeit am Institut ermöglicht.

seedRedLeaf

seedRedLeaf ist eine Webanwendung, die darauf abzielt, die Benutzerfreundlichkeit von RedLeaf zu verbessern.

RedLeaf ist ein DL-Framework, das von Fraunhofer MEVIS entwickelt wurde. Es baut auf weit verbreiteten DL-Frameworks wie Keras und PyTorch auf. RedLeaf bietet unter anderem die Integration von MeVisLab, vordefinierte neuronale Netzwerkarchitekturen und eine Live-Überwachung der Trainingsleistung. Es bietet jedoch keinerlei Unterstützung bei der Einrichtung von DL-Experimenten, so dass die Benutzer alle konfigurierbaren Optionen kennen müssen. Verschärft wird dieser Umstand, insbesondere für Neulinge im DL, noch dadurch, dass eine angemessene Dokumentation von RedLeaf fehlt. Vor diesem Hintergrund wurde die Idee für seedRedLeaf geboren: Eine Webanwendung, die es RedLeaf-Benutzern:innen ermöglicht, sich auf ihre DL-Projekte zu konzentrieren, anstatt herauszufinden zu müssen, wie sie ihre DL-Experimente richtig konfigurieren. Auch bewahrt seedRedLeaf diese davor, Optionen die das Ergebnis ihrer DL-Experimente verbessern könnten, aufgrund von Unkenntniss nicht zu nutzen. Darüber hinaus hilft seedRedLeaf den Benutzer:innen, ihre DL-Projekte effizient zu organisieren und zu verwalten.

Implementierung

Authentifizierung

Die Benutzer müssen sich authentifizieren. Die Authentifizierung dient zwei Zwecken, der Sicherheit und der Zuweisung eines benutzerspezifischen Namensraumes.

Verwaltung von Deep Learning Projekten

DL-Projekte werden in einem zentralen Verzeichnis gespeichert. Bei der Erstellung seines/ihres ersten DL-Projekts wird ein Verzeichnis für den/die Benutzer:in erstellt. In seedRedLeaf ist ein Projekt ein Verzeichnis, das aus einer json-Datei, die Informationen über das DL-Projekt enthält, und einem Verzeichnis für jedes im Rahmen des DL-Projekts durchgeführte Experiment besteht. Ein Experiment ist ein Verzeichnis, das aus Dateien besteht, die Informationen über das Experiment enthalten, sowie ein (zunächst leeres) Ergebnisverzeichnis.

Aufsetzen eines Deep Learing Experiments

Gegenwärtig verlangt RedLeaf vom Benutzer, dass er die Pfade zu folgenden Dateien angibt (und im Gedächnis behält):

  • eine json-Datei, die die Architektur des neuronalen Netzes spezifiziert
  • eine python-Datei, die die Konfiguration des Experiments spezifiziert
  • eine MevisLab-Datei
  • einem leeren Ergebnisverzeichnis

Sowohl die json-Datei als auch die python-Datei müssen neu oder durch Modifizierung bestehender Dateien erstellt werden. Um eine potentiell vorteilhafte, konfigurierbare Option nutzen zu können, muss der Benutzer sich dieser also bewusst sein (und möglicherweise auch den zulässigen Parameterwerten). Darüber hinaus ist dieses Verfahren anfällig für Tippfehler.

Das Einrichten eines neuen DL-Experiments mit seedRedLeaf beansprucht das Gedächnis der Benutzeri:innen in geringerem Ausmaß und ist zudem weniger fehleranfällig, da der Benutzer durch die folgenden Schritte geführt wird:

Erstellen eines neuen Projektes oder Auswahl eines bestehenden Projektes

Erstellen Sie ein neues Experiment, über den Plus-Button und Wahl des "Stepper"

Wahl eines Experimentnamen, Angabe einer Experimentbeschreibung
(optional), und eines Pfad zu einer MevisLab-Datei

Auswahl des der neuronalen Architektur zugrunde liegenden Frameworks

Auswahl eines verfügbare Presets (d. h. einer vorkonfigurierten neuronalen Architektur)

Konfiguration der Parameter der neuronalen Architektur und des Experiments

Speichern des Experiments

seedRedLeaf API

Die seedRedLeaf-Anwendungsprogrammierschnittstelle (srl-API) verwaltet die Kommunikation zwischen dem Flask-Backend und dem Quasar-Frontend. Es basiert auf dem ursprünglich von Roy T. Fielding (https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf) beschriebenen Representational State Transfer (REST) Architekturstil. Somit besitzt die srl-API eine Client-Server-Architektur und verwendet HTTP als Protokoll, um Anfrage- und Antwortnachrichten zu transportieren. Als Nachrichtenformat wird JSON (Javascript Object Notation) verwendet. Die Kommunikation zwischen Client und Server ist zustandslos, d.h. serverseitig werden keine Informationen über die Sitzung des Clients gespeichert. Ein Schlüsselmerkmal des REST-Designs ist die Verwendung einer einheitlichen Schnittstelle. Dementsprechend findet die Identifizierung von Ressourcen über Uniform Resource Identifiers (URIs) statt, die Manipulation von Ressourcen erfolgt über die empfangene Ressourcendarstellung und Nachrichten sind selbstbeschreibend.

Ressourcen

Benutzer:innen der srl-API können sich authentifizieren, indem sie eine Benutzer-ID und ein Kennwort mit der HTTP-POST-Methode angeben. Bei Erfolg wird ein Token generiert, das es dem/der Benutzer:in ermöglicht, zukünftige Anfragen zu authentifizieren. Der/Die Benutzer:in kann sich mit der HTTP-Methode DELETE abmelden, wodurch das Token ungültig wird. 

Benutzer:innen können ein neues Projekt erstellen, indem sie mithilfe der HTTP-POST-Methode eine eindeutige Projekt-ID p angeben. Der/Die Benutzer:in kann sich dafür entscheiden, eine Projektbeschreibung im Hauptteil der HTTP-Nachricht bereitzustellen. Bei Erfolg wird ein neues Verzeichnis p erstellt, das eine Datei p_project_info.json enthält.
Unter Angabe einer gültigen Projekt-ID können Benutzer:innen mit der HTTP-PUT-Methode das Projekt umbenennen (wenn eine eindeutige neue Projekt-ID bereitgestellt wird) und/oder die Projektbeschreibung ändern (wenn eine Projektbeschreibung im Hauptteil der HTTP-Nachricht bereitgestellt wird).
Mit der HTTP-GET-Methode können Benutzer:innen detaillierte Informationen zu ihren Projekten erhalten.
Unter Angabe einer gültigen Projekt-ID können Benutzer:innen ein Projekt mittels der HTTP-Methode DELETE löschen. Wenn das Projekt bereits Experimente enthält, muss der force-Parameter in der URI auf True gesetzt werden.

Benutzer:innen können ein neues Experiment über die HTTP-POST-Methode erstellen, wenn eine gültige Projekt-ID p und Experiment-ID e, die für das Projekt eindeutig ist, im HTTP-Nachrichtentext angegeben werden. Der/Die Benutzer:in muss außerdem Informationen zur Experimentbeschreibung, Architektur des neuronalen Netzes, Konfiguration des Experiments und den Pfad zur mlab-Datei angeben. Allein der/die Benutzerin ist für die Richtigkeit dieser Informationen verantwortlich. Bei Erfolg wird ein neues Verzeichnis e im Projektverzeichnis p erstellt. Der Ordner e enthält eine Datei e_experiment_info.json, einen Ordner e_results und 4 weitere Dateien, in denen Informationen zur Architektur des neuronalen Netzwerks und zur Konfiguration des Experiments gespeichert sind.
Unter Angabe einer gültigen Projekt-ID und einer gültigen Experiment-ID können Benutzer:innen mittels der HTTP-PUT-Methode das Experiment umbenennen (sofern eine neue, für das Projekt eindeutige Experiment-ID bereitgestellt wird) und/oder das Experiment ändern (sofern im HTTP-Nachrichtentext entsprechende Informationen bereitgestellt werden).
Unter Verwendung der HTTP-GET-Methode und Angabe einer gültigen Projekt-ID und einer gültigen Experiment-ID können Benutzer:innen detaillierte Informationen zu einem Experiment erhalten,
Unter Angabe einer gültigen Projekt-ID und einer gültigen Experiment-ID können Benutzer:innen ein Experiment über die HTTP-Methode DELETE löschen. Wenn das Experiment Ergebnisse enthält, muss der force-Parameter in der URI auf True gesetzt werden.

Mit der HTTP-GET-Methode erhalten die Benutzer:innen alle verfügbaren Presets, d. h. sowohl die von RedLeaf Bereitgestellten als auch die Benutzerdefinierten. Die Presets werden nach Art des Presets (RedLeaf/Benutzerdefiniert) sowie nach dem zugrunde liegenden Framework (keras/torch) sortiert. Wenn in der URI ein gültiger framework-Parameter angegeben wird, werden nur Presets dieses Frameworks zurückgegeben.

Die Benutzer:innen können über die HTTP-GET-Methode ein Formular erhalten, das alle für die Erstellung eines Experiments erforderlichen Informationen enthält, indem ein gültiges Framework sowie eine gültige Preset-ID angegeben werden. Die konfigurierbaren Parameter der Architektur des neuronalen Netzes entsprechen denen des ausgewählten Presets.

Benutzer:innen können ein neues Custom Preset entweder aus einem RedLeaf-Preset oder einer vorhandenen benutzerdefinierten Voreinstellung mit der HTTP-POST-Methode erstellen. Der URI muss eine eindeutige Preset-ID sowie Informationen über das Redleaf-Preset, auf dem das Custom Preset basiert, dem zugrundeliegende Framework (welches identisch mit dem des zugrundeliegende Redleaf-Preset sein muss) sowie über die verfügbaren konfigurierbaren Parameter enthalten.
Bei Angabe eines gültigen Frameworks und einer ID für die benutzerdefinierte Voreinstellung können Benutzer das Custom Preset mit der HTTP-PUT-Methode umbenennen (wenn eine eindeutige neue ID angegeben wird) und/oder ändern (wenn die entsprechenden Informationen im HTTP-Nachrichtentext enthalten sind).
Über die HTTP-GET-Methode erhalten Benutzer:innen ein Formular , das alle für die Erstellung eines Experiments erforderlichen Informationen enthält. Hierzu muss ein gültiges Framework und eine gültige Custom Preset-ID angeben werden. Die konfigurierbaren Parameter der Architektur des neuronalen Netzes entsprechen denen des ausgewählten Presets.
Benutzer können ein Custom Preset über die HTTP DELETE-Methode löschen, indem sie ein gültiges Framework undeine gültige Custom Preset-ID angeben.

Benutzer:innen können das Training eines neuronalen Netzes mit der HTTP POST-Methode starten (d.h. ein Experiment durchführen), indem sie eine gültige Projekt-ID p und Experiment-ID e angeben. Dadurch wird MevisLab gestartet und, falls erfolgreich, das Redleaf Skript training.py. Ergebnisse werden im Ordner e_results des Experimentverzeichnisses e gespeichert.