Team Challenge
Übersicht
Mitglieder
Artem Tscherwinski , Daniel Bröcker , Joana Becker , Johann Joachim Keuneke , Max Meyer , Thorben Lorenzen , Tom Köhler
Gruppenziel
In der Aufteilung des Projektteams in die einzelnen Arbeitsgruppen, hat sich eine Gruppe das Ziel gesetzt, an bestehenden Segmentation Challenges teilzunehmen. Solche Challenges sind öffentliche Wettbewerbe, bei denen annotierte und nicht-annotierte Bilder mit einer Aufgabe veröffentlicht werden. Das Ziel ist es, Netze für die Segmentierung von Elementen wie z.B. Organen zu entwickeln und auf den annotierten Bildern zu trainieren, um diese möglichst erfolgreich auf den nicht-annotierten Bildern anzuwenden. Die Ergebnisse können dann eingesendet und mit anderen Teilnehmern verglichen werden.
Das Challenge Team hat sich in weitere Gruppen aufgeteilt, die jeweils verschiedene Segmentation Challenges bearbeitet haben. Die einzelnen Challenges waren CHAOS, StructSeg und xVertSeg und behandeln jeweils unterschiedliche Bereiche im Körper. StructSeg und xVertSeg wurden in Einzel- und Partnerarbeit bearbeitet, die CHAOS-Gruppe bestand aus 4 Mitgliedern.
Trainings-Pipeline
Einleitung
Im Folgenden wird eine relativ simple Datenpipeline erläutert, welche für den Import von Leber-CT-Daten aus der CHAOS-Challenge verwendet wurde.
Datenimport
Die in Abbildung 1 gezeigten Module dienen dem Datenimport. Während im LoadDataIntoStreams-Modul die Daten aus den Datenreferenzen einer .lst-Datei in einen Stream gewandelt werden, sorgen AccessStreamInterface und ProvideStreamInterface für die Zugänglichkeit der Daten, es lassen sich so verschiedene Daten auswählen. Das Threshold-Modul gibt allen Grauwerten, die größer als 0 sind, den Wert 1.
Größenparameter
In Abbildung 2 werden verschieden Größenparameter gesetzt, darunter die Patch-Size. Ein Patch ist ein Teil der aktuell betrachteten Schicht. Auch die Voxel-Size wird hier gesetzt, Voxel sind Bildpunkte. Das CacheImageStreams-Modul speichert die geladenen Slices im Cache, damit schneller darauf zugegriffen werden kann.
Randomisierung
In Abbildung 3 sind viele Module miteinander verknüpft. Im Grunde werden hier Trainings- und Validierungsdaten getrennt und randomisiert.
Server
In Abbildung 4 werden die Daten mitsamt Einstellungen in den Server geladen.
Gesamtbild
In Abbildung 5 ist die Pipeline im Ganzen zu sehen. Alle Konfigurationen, die hier angegeben werden, lassen sich auch in einer Config-Datei vornehmen, ohne dass Module dafür benutzt werden müssen.
CHAOS
Leber CT, Abdomen CT und MRT
Einleitung
Im Rahmen der CHAOS-Challenge wurde sich mit der Segmentierung der Leber bei CT-Scans und später auch mit der Segmentierung von Leber, Nieren sowie Milz bei CT- und MRT-Scans befasst.
Motivation
Interessant an dieser Challenge war, dass gleich mehrere Organe aus zwei Scan-Methoden gleichzeitig segmentiert werden sollen.
Aufgrund von fehlendem Fachwissen war die grundsätzliche Idee,
ein Training durchzuführen und dann anhand von Veränderungen des U-Net-Levels,
der PatchSizes oder auch der Anzahl der Trainingsiterationen einen Eindruck davon zu bekommen,
welche Änderungen zu welchen Ergebnissen führen, um so für künftige Trainings zu wissen,
welche Parameter besondere Relevanz für die Qualität des Ergebnisses haben.
So wurde für den Beginn eine relativ simple Unterchallenge von CHAOS ausgewählt:
Die Segmentierung einer Leber an CT-Scans von 20 Patienten.
Ein Datensatz beinhaltet annotierte Scans mit Markierungen des gewünschten Organs,
mit welchen trainiert wird.
Ein weiterer Datensatz von 20 Patienten beinhaltet die nicht annotierten Datensätze,
auf welche das Ergebnis angewandt werden kann.
Implementierung
Leber (CT):
Für das erste Training wurden default-Werte für Voxel- und PatchSize verwendet.
Am Ergebnis wurde die Problematik von kleinen Patches bei großen Organen deutlich:
Bei einem so großen Organ wie der Leber,
welches je nach betrachteter Slice zwei Drittel des Bauchraums einnehmen kann,
werden gleichfarbige, aber deutlich kleinere Strukturen im Bauchraum fälschlicherweise ebenfalls als Leber markiert.
In der Hoffnung, dass das Convolutional Neural Network erkennt,
dass die Leber ein großes und zusammenhängendes Organ ist, wurden die PatchSizes erhöht.
Leider war das Ergebnis wieder nicht zufriedenstellend,
da nun feine Leberstrukturen sehr grobe Markierungen hatten oder einfach nicht erkannt wurden.
Der nächste Schritt war, die Anzahl der Trainingsiterationen bis zur Validierung zu vergrößern.
So wurde das neuronale Netz gezwungen länger zu trainieren bis validiert wurde (und somit möglicherweise beendet),
in der Hoffnung, dass nun feinere Strukturen erkannt werden.
Außerdem wurden die Validierungsalgorithmen geändert und die Endbedingungen für das Beenden eines Trainings wurden ebenfalls angepasst.
Leider führte die Veränderung der Iterationsanzahl nicht zum gewünschten Ergebnis,
zeigte jedoch leichte Verbesserungen.
Da nun die Grundzüge eines Trainingsablaufs nachvollzogen werden konnten,
sollte eine interessanteren Aufgabe bearbeitet werden: Das Trainieren eines Netzes,
welches mehrere Organe erkennt.
Dafür wurde ein Datensatz von CT- und MRT-Scans aus der CHAOS-Challenge verwendet.
Nun wurden mehrere Organe gleichzeitig segmentiert, daher war eine Vorbereitung der Daten notwendig. Jedes Organ hat einen eigenen Grauwert zugewiesen bekommen, damit das CNN diese besser unterscheiden kann. Wegen teils überlappender Grauwerde in CT- und MRT-Datensätzen musste das Laden dieser angepasst werden. So mussten erst beide Scanvarianten einzeln verarbeitet werden, bevor die Daten zusammengeführt werden konnten. Mit jedem Versuch wurde offensichtlicher, dass Daten von 20 Patienten nicht ausreichend sind, um etwas so Individuelles, wie den menschlichen Körper, segmentieren zu können. Aspekte wie Körpergröße, Fett- oder Muskelanteil und Geschlecht spielen eine zu große Rolle, als dass mit 20 Patienten einen repräsentatives Ergebnis für das Trainieren eines neuronalen Netzes erreichen werden kann. Auch ein Postprocessing der Ergebnisse, wie das Filtern von zu kleinen Strukturen, also nur noch Beachtung von zusammenhängend-segmentierten Strukturen im Körper, zeigten nur leichte Verbesserungen. Einige Strukturen konnten nicht erkannt werden, dies könnte viele Gründe haben, unter anderem war die Qualität der bereitgestellten Datensätze teilweise nicht ausreichend.
Fazit
Das Trainieren eines neuronalen Netzes ist eine Herausforderung, die großes Fachwissen benötigt,
um gezielt Parameter verändern zu können.
Je nach Aufgabe wird eine große Menge an qualitativ hochwertigen Daten benötigt,
sei es die Auflösung oder die Vor-Segmentierung,
schließlich soll nur mit korrekter Segmentierung trainiert werden,
um so die Qualität des Ergebnisses so hoch wie möglich zu halten.
Ebenfalls ist eine strukturelle Herangehensweise von großer Wichtigkeit.
Ein Training durchzuführen kann sehr lange dauern, umso wichtiger ist es,
im Vorfeld zu planen, was erreicht werden soll.
Natürlich muss gleichzeitig immer der nächste Schritt bedacht werden,
um eine systematische Vorgehensweise aufrecht zu halten.
Leider war keins der Ergebnisse zufriedenstellend, sicher wegen fehlenden Erfahrung,
aber auch aufgrund der nicht so guten Bedingungen bezüglich Qualität und Quantität der Datensätze der CHAOS-Challenge.
Aus persönlicher Sicht war das Bachelorprojekt sehr bereichernd,
einerseits durch den Einblick in eine andere Thematik, andererseits war es angenehm zu sehen,
wie gut die eigenen Ideen funktionieren (oder auch nicht funktionieren) können.
Die Informationsbeschaffung war aufgrund des großen Wissenskatalogs von Fraunhofer MeVis nicht immer einfach
und auch wenn die gewünschte Information gefunden wurde,
musste vieles nachgeschlagen werden, da das Fachwissen nicht in dieser Tiefe vorhanden war.
Abdomen CT und MRT
Einleitung
CHAOS ist ein Akronym für Combined Healthy Abdominal Organ Segmentation.
Die Challenge befasst sich also mit der Erfassung von abdominalen Organen.
Das Verständnis dieser ist von großer Wichtigkeit für den Erfolg von medizinischen Eingriffen.
Um mehr über abdominale Organe zu lernen, helfen Werkzeuge zur Visualisierung.
Dies Erfordert jedoch die Extraktion der Objekte von DICOM Bildern (Digital Imaging and Communications in Medicine).
Eine präzise Segmentierung hat große Wichtigkeit für mehrere klinische Eingriffe,
wie zum Beispiel die Vorbewertung der Leber für eine Lebertransplantation.
Daten
Die Bild-Daten der Chaos-Challenges bestehen aus zwei Datensätzen. Für den CT-Datensatz liegen 40 Datensätze unterschiedlichen Patienten vor, wovon 20 mit einer entsprechenden Maske vorliegen. Im MRT-Datensatz liegen insgesamt 120 aufgenommene Patientendaten vor. Dabei liegen 40 Daten vor, die mit der SPIR (Spectral Pre-Saturation Inversion Recovery) Methode und dem T2 Kontrast Mechanismus aufgenommen wurden. Zusätzlich jeweils 40 Datensätze, die in unterschiedlichen Phasen(In-Phase und Out-Phase) mit dem T1 Kontrast Mechanismus erstellt wurden. Insgesamt wurde dieser MRT-Datensatz also mit unterschiedlichen radiofrequentierten Impulsen und Kontrastmitteln aufgenommen, welche zur unterschiedlichen Erkennbarkeit der Organe beitragen wie in den Abbildungen zu sehen ist. So werden zum Beispiel bei dem SPIR-Datensatz Fettprotonen unterdrückt, was zur klareren Abgrenzung der Organe vom umliegenden Gewebe führt. Der Inphase Datensatz zeigt Aufnahmen, wenn die Fett- und Wasserprotonen in Phase sind und der Outphase Datensatz, wenn diese Protonen entsprechend außerhalb der Phase sind. Auch zu erwähnen ist, dass keiner der Patienten kranke Organe besaß.
Datenimport
Da die MRT/CT Chaos-Challenge-Daten im Dateiformat DICOM und die Masken dazu im Dateiformat PNG vorlagen, mussten sie noch in das Dateiformat MLIMAGE umgewandelt werden, das in MeVisLab einlesbar ist. Dazu wurden entsprechende Skripte mit MeVisLab programmiert. Wie für den MRT Datenimport in Abbildung 7 zu sehen ist.
Abdominale Organ-Segmentierung in MRI/MRT
Einleitung
Innerhalb des Team Challenges erfolgte eine Aufteilung auf verschiedene Challenges. So hatte sich eine Gruppe von fünf Personen zusammengefunden, die die Challenges von einem Anbieter (Chaos) bearbeiteten. Dies hatte einige Vorteile, so musste zum Beispiel der Datenimport nur einmal vorgenommen werden. Die Chaos-Challenges bestanden aus der Segmentierung von Leber und abdominalen Organen, jeweils auf MRT und CT Daten.
Die Challenge in diesem Kapitel handelt von der abdominalen Organ-Segmentierung auf Basis von MRT Daten. Hier bestand die Aufgabe darin, die Leber, die Nieren und die Milz aus gegebenen MRT Daten zu segmentieren. Es handelt sich hierbei also um ein Multi-Segmentierungs-Problem.
Motivation
Die Challenge, die in diesem Kapitel behandelt wird, gliedert sich in zwei Aufgaben auf und darf mit zwei unterschiedlichen CNNs gelöst werden. Hierbei sei erwähnt, dass sich die Implementierung ausschließlich mit Aufgabe 1 befasst.
- Aufgabe
Ein CNN basierend auf dem T1Dual-Datensatz (MRT) - Aufgabe
Ein CNN basierend auf dem T2Spir-Datensatz (MRT)
Für die 2. Aufgabe der Challenge steht ein Datensatz mit einheitlich aufgenommenen Daten zur Verfügung.
In beiden Aufgaben besteht das Ziel darin, die Parameter für das resultierende CNN zu optimieren, sodass die verschiedenen Organe möglichst gut segmentiert werden. Hier ist auch eine praktische Anwendung in der Medizin gegeben, unter anderem, um zu evaluieren, ob ein medizinischer Eingriff durchgeführt werden kann, oder nicht.
Implementierung
Für das Trainieren der CNNs, wurde (bis auf kleine Veränderungen) die Standard-Pipeline benutzt(Abbildung 5).
Das Threshold-Modul wurde entfernt, da dieses Modul alle Label, die ungleich 0 sind auf 1 setzt.
Dies ist aber nur bei binären Segmentierungsproblemen hilfreich, welches hier allerdings nicht vorliegt.
Des Weiteren wurde diese Pipeline zur Bearbeitung der 1. Aufgabe wie in Abbildung 8 verändert.
Hier wurde das Modul ConcatenateImages hinzugefügt.
Da der T1Dual-Datensatz zu jeder Aufnahme zwei Bilder mit derselben räumlichen Struktur besitzt,
werden diese übereinander gelegt, sodass jeder Patch, mit dem das CNN trainiert wird, zweidimensional ist.
Es wurden Level 3 und Level 4 U-Nets für die 1. Aufgabe der Challenge trainiert.
Des Weiteren wurden Parameter-Änderungen in der Patch-Size, sowie in der Voxel-Size durchgeführt.
Trainiert wurde mit einem Test-Validierungs-Verhältnis von 14:3,
wobei die restlichen drei gelabelten Aufnahmen zur Auswertung und zum Testen auf Generalisierbarkeit des trainierten CNNs benutzt wurden.
Hier wurde insbesondere das von Team Trainingsschleife entwickelte Modul ConfusionMatrix zur Auswertung herangezogen.
Im Folgenden werden zwei beispielhafte Trainingsergebnisse diskutiert.
In Abbildung 9 ist die Auswertung mithilfe der Confusion-Matrix eines Level 4 U-Nets,
das mit einer Patch-Größe von 92x92 und einer Voxel-Size von 2x2 trainiert wurde, zu sehen.
Entsprechendes CNN lieferte insgesamt die besten Ergebnisse, gemessen an der addierten,
prozentualen Häufigkeit der richtig erkannten Labels auf einer Aufnahme, mit der nicht trainiert wurde.
Die Intention, das CNN mit einer Voxel-Size von 2x2 und mit einer größeren Patch-Größe zu trainieren, lag darin,
dass die Leber bei kleinerer Patch-Größe und einer Voxel-Size von 1x1 nicht gut segmentiert wurde.
Dies kann damit erklärt werden, dass die Leber auf einigen Slices relativ viel Raum einnimmt
und so durch Wählen einer kleineren Patch-Größe auch kleine Gebiete, die der Leber ähneln,
aber als Hintergrund gelabelt sind, als Leber erkannt werden.
Der Unterschied ist auf Abbildung 10 deutlich zu erkennen.
Hier ist die Auswertung eines Level 3 U-Nets, das mit einer kleineren Patch-Größe von 44x44 und einer kleineren Voxel-Size von
1x1 trainiert wurde, zu sehen.
Die Leber wird deutlich schlechter segmentiert, als bei dem Level 4 U-Net.
Außerdem wird auch relativ viel Hintergrund als Leber segmentiert,
wie auch im mittleren Bild in Abbildung 9 zu erkennen ist.
Die Leber wird außerdem zu 33.3 Prozent als Milz gelabelt, wie in der Konfusion-Matrix zu erkennen ist.
Confusion-Matrix, beispielhaftes Slice der Segmentierung des CNNs, die Maske
Confusion-Matrix, beispielhaftes Slice der Segmentierung des CNNs, die Maske
Auch in der Tabelle 1 ist zu erkennen, dass die Leber einen deutlich höheren Jaccard Wert bei dem Level 4 U-Net aufweist, als bei dem Level 3 U-Net. Interessant ist auch, dass die Jaccard-Werte auf den Validierungsdaten des CNNs deutlich höhere Werte aufweisen, als die Diagonale in der Konfusion-Matrix. Interessant ist es deshalb, weil sie dieselben Werte repräsentieren. Dies ist damit zu begründen, dass ein sehr geringes Datenvolumen zum Trainieren des CNNs zur Verfügung stand und das CNN deswegen nicht gleich gut auf neuen Daten funktioniert.
Name | Accuracy | J* Leber | J* linke Niere | J* rechte Niere | J* Milz |
---|---|---|---|---|---|
Lvl-3 | 0,965 | 0,557 | 0,606 | 0,431 | 0,219 |
Lvl-4 | 0,984 | 0,753 | 0,691 | 0,74 | 0,681 |
Das implementierte Modul ConfusionMatrix von Team Trainingsschleife ist gerade bei Multi-Segmentierungs-Problemen sehr nützlich. Auch, da es nicht nur die reine Accuracy eines Labels berücksichtigt, sondern zudem aufzeigt, welches Label mit welchem verwechselt wurde. Dies bietet neben dem manuellen Durchschauen einzelner Slices objektive Werte zur Beurteilung eines CNNs auf neuen Bilddaten. Die Labels müssen allerdings starr dem Schema One-Hot Encoding entsprechen. Die Implementierung des Auswertungsnetzes in MeVisLab hat deswegen erheblichen Aufwand in Anspruch genommen. So mussten durch das Hinzufügen einiger Threshold-Module, die Masken jeweils auf One-Hot Encoding gebracht werden, wie in Abbildung 11 zu sehen ist.
Fazit
17 Patientendaten zum Trainieren eines CNNs, das vier unterschiedliche Organe segmentieren soll, scheint eine zu geringe Datenmenge zu sein, um ein gutes Ergebnis zu erzielen. Zwar wurde die Leber zu circa 85 Prozent richtig erkannt, die Nieren aber jeweils nur zu circa 30 Prozent und die Milz zu circa 60 Prozent. Diese Ergebnisse dienen nicht zur Unterstützung des Arztes und können nicht zur Evaluierung hinzugezogen werden, ob ein medizinischer Eingriff erfolgen darf.
Lebersegmentierung in MRI/MRT
Einleitung
Da sich die Mitglieder des Team-Challenges in mehreren Einzelgruppen verteilt haben, lag es nah, dass verschiedene Challenges bearbeitet werden. Da es ein große Interesse an der Chaos-Challenge (https://chaos.grand-challenge.org/) gab, wurde diese Challenge von 4 Personen bearbeitet. Die Chaos-Challenge selber hatte 4 verschiedene Teilaufgaben, weswegen jeder der Chaos-Teammitglieder eine unterschiedliche Aufgabe zu bewältigen hatte.
Die Aufgabe war es, ein "Convolutional Neural Network" zu trainieren, welches auf verschiedenen MRI/MRT Aufnahmen die Leber des Patienten segmentieren sollte. Dafür waren von Chaos selber vorbereitete DICOM Datensätze erhältlich. Diese enthielten 60 Fälle zum Trainieren und 60 Fälle zum Testen. Diese 120 Fälle wurden jeweils in verschiedenen Phasen aufgenommen, somit ergaben sich 40 T1-DUAL inphase, outphase und 40 T2-SPIRE Datensätze, wovon jeweils die Hälfte bereits annotiert war.
Implementierung
Die ersten Schritte im Projekt waren die Annotierung eines Knies, wobei für je 3 Patienten in einem Knie CT, mit der Hilfe des Programms Satori, die Tibia, Femur und Partella annotiert wurden. Dabei wurde gelernt, wie die Masken für Dateien erstellt werden. Im Folgenden wurde ein Training für die erstellten Datensätze und damit das eigentlich erste Training, welches zunächst auf den Rechner der Teilnehmer zum Laufen gebracht wurde, gestartet. Dafür wurde zunächst eine MeVisLab-Datei erstellt, in der die erstellten Datensätze in Trainings- und Testfälle aufgeteilt, die Bilddaten in Patches zerschnitten und dann vom Netz zum Training benutzt wurden.
Die Vorarbeit mit MeVisLab führt zu verschiedenen Qualitäten der Netze und war im Verlauf des Projekts die Hauptarbeitsquelle. Diese sogenannte Pipeline wurde immer weiter verändert, um das optimale Netz zu trainieren.
Das zweite Training, mit den gleichen Datensätzen, das gestartet wurde, lief über das Rechennetz des Fraunhofer Instituts. Das Training konnte mit der Hilfe von Quantmed einfach Online gestartet werden. Quantmed ist ein webbasiertes Interface, welches es ermöglicht die Pfade für das benötigte Training anzugeben und diese dann auf den externen Rechennetzen zu starten. Dies hat den Vorteil, dass die Netze wesentlich schneller ihr Training durchführen können.
Nachdem es eine Einführung in die Programme und Hilfsmodule gab,
wurde sich daran gesetzt, die Challenge zu bearbeiten.
Das Erste, was getan wurde, war der Download der Datensätze.
Diese bestanden aus DICOM Bildern und dazugehörigen Masken, welche im PNG Format abgespeichert waren.
Um diese Bilddaten in MeVisLab zu verarbeiten,
mussten zunächst die PNG Dateien in DICOM umgewandelt und auf unsere Rohdaten projiziert werden.
Dafür wurde ein von den Betreuern, in MeVisLab, erstelltest Programm genutzt.
Nachdem die Dateisätze nutzbar waren, wurden diese auf etwaige Fehler überprüft und korrigiert.
Nun wurden die ersten Trainingsschleifen gestartet für die einzelnen Gruppen. Das erste Training wurde mit der Pipeline gestartet, welche mit der Hilfe der Betreuer erstellt wurde. Diese hatte die Standardeinstellung für ein Level 3 U-Net sowie die Minimum Patchsize. Die einzige Veränderung, die vorgenommen wurde war, dass das Modul IntervallThreshold verändert wurde. Die Masken der Chaos Datensätze, beinhalteten alle Organe, welche in der Challenge vorkommen. Die verschiedenen Organe hatten unterschiedliche Grauwerte auf der Maske. Somit wurde durch das Modul IntervallThreshold der Grauwert so gefiltert, dass nur die Leber in der Maske enthalten war.
Leider sind die Resultate dieser Trainingsschleifen überschrieben worden, wodurch sie nicht hier aufgezeigt werden können.
In den nächsten Trainingsschleifen wurde nur mit der Patchsize experimentiert,
um zu sehen was für eine Auswirkung dieses auf die Netze hatte.
Zunächst wurde die Patchsize von 44x44 auf 88x88 verdoppelt.
Wie auf Abbildung 13 zu sehen ist, wird nicht die ganze Leber erkannt. Kaum etwas der Ränder des Organs wird markiert, nur Bereiche aus dem Zentrum werden erkannt. Im Verlauf werden Bilder für die Resultate von dem gleichen Patienten genommen. Dabei wird versucht ein Slice zu nehmen, welches die beste Abdeckung hat.
Danach wurde mit dem Validierungsintervall experimentiert.
Die MeVisLab Datei blieb unverändert, jedoch wurde der Abstand der Validierung des Netzes auf alle 500 Iterationen angehoben.
Der Wert 500 wurde gewählt, da nach Absprache mit einigen Teammitgliedern,
welche an einer anderen Teilaufgabe der Chaos-Challenge arbeiteten,
bereits verschiedene Intervalle getestet wurden
und die besten Resultate zwischen einem Validierungsintervall von 400 und 700 lagen.
Wie im Vergleich von Abbildung 14 und Abbildung 13 zu sehen, ist eine deutliche Verbesserung zu erkennen. Die Ränder werden wesentlich besser erfasst und ein Großteil des Organzentrums ebenfalls. Des Weiteren sieht es so aus, als ob rechteckige Flächen aus der Maske geschnitten wurden.
Beim nächsten und letzten Training, das durchgeführt wurde,
wurde ein höheres U-Net Level ausprobiert, da bis dahin nur mit einem U-Net Level 3 gearbeitet wurde.
Nun wurde ein Netz mit einem U-Net Level 4, der Patchgröße 92x92 und einem Validierungsintervall von 500 gestartet und für 48h trainiert.
Wie auf Abbildung 15 zu sehen ist, wurde fast das ganze Organ erkannt. Die Ränder der Maske sind klar segmentiert und haben wenig bis keine Einbrüche. Des Weiteren bleibt das Problem, dass gelegentlich Teile des Organs nicht erkannt werden, wie beispielsweise die rechte Spitze des Organs.
Um die verschiedenen Netze zu vergleichen oder zu bewerten, gab es wenige Möglichkeiten. Hauptsächlich wurden 10 Fälle stichprobenartig betrachtet und mit den gleichen Fällen vom vorherigen Netz verglichen. Im Verlauf des Bachelorprojekts wurde dem Team Challengr vorgestellt. Eine Applikation, welche automatisch alle Testfälle mit einem gegebenen Netz ausprobiert und Abdeckungswerte zurückgibt. Dieses Programm war zu dem Zeitpunkt aber leider nicht auf dem Rechennetzwerk nutzbar, sondern nur auf den eigenen Computern. Dafür fehlte die Rechenleistung, weswegen diese Option der Validierung wegfiel. Gegen Ende des Bachelorprojekts kam die Idee auf, dass es möglich wäre zwei Netze in Echtzeit vergleichen zu könnte, indem die Masken beider Netze gleichzeitig auf eine Bilddatei projiziert und deren Alphawert so anpasst, dass die Unterschied der beiden Masken erkennbar werden.
StructSeg
Einleitung
Die StructSeg2019-Challenge gliedert sich in vier Teilaufgaben. Die Challenge ist Teil der MICCAI 2019 Konferenz gewesen.
Die vier Teilaufgaben sind die Folgenden:
- Aufgabe 1: Erkennung von Organen in Kopf-Schulter CT-Scans.
- Aufgabe 2: Erkennung von Tumoren im Nasenrachen.
- Aufgabe 3: Erkennung von Organen in Brust CT-Scans.
- Aufgabe 4: Erkennung von Tumoren in der Lunge.
Zuerst wurde Aufgabe vier, die Erkennung von Tumoren in der Lunge, bearbeitet. Als dort zufriedenstellende Ergebnisse erreicht wurden, hat das Team SructSeg die Konfiguration zusätzlich auf die Aufgabe zwei übertragen. Anschließend wurde die gleiche Trainingspipeline auf Aufgabe zwei und vier gleichzeitig angewandt. Die Datensätze von Aufgabe zwei und vier sind gleich strukturiert, beziehen sich allerdings auf unterschiedliche Bereiche im Körper (Tumoren im Nasenrachen und in der Lunge).
Evaluationskriterum seitens der Challengeherausgeber ist u.a. der Dice Similarity Coefficient (DSC). Der Dice Coefficient gibt die Ähnlichkeit zwischen zwei Datensätzen an. Es ist das am weitesten verbreitete und meist genutzte Werkzeug zur Validierung und zum Vergleich von Bildsegmentierungsalgorithmen. $${ \frac{2\cdot|X\cap Y|}{|X|+|Y|} }$$
Das Ergebnis der Formel beschreibt die Ähnlichkeit zweier Mengen. Wenn der Dice 1,0 beträgt, sind die Mengen identisch. Ist der Dice hingegen 0,0, haben die Mengen kein Element gemeinsam. Bei allen Werten zwischen 0,0 und 1,0 stimmen entsprechend viele Teile überein.
Die Datensätze für Aufgabe zwei und vier bestehen jeweils aus 50 annotierten Serien. Der gesamte Datensatz wurde von einem professionellen Onkologen annotiert und von einem Weiteren verifiziert. Eine Besonderheit dieser Challenge ist, dass die Tumore sehr klein sind, was bedeutet, dass ein verhältnismäßig hoher Anteil der Pixel kein Tumor ist und die Tumore tatsächlich nur einen sehr kleinen Bereich ausmachen.
Aus Abbildung 17 wird deutlich, wie viel mehr Pixel zur Lunge gehören als zu dem Tumor. Der Algorithmus muss also jede Schicht des CT Scans nach Tumoren untersuchen und diese entsprechend klassifizieren.
Hintergrund
Die StructSeg2019-Challenge fokussiert sich auf die automatische Segmentierung von organs-at-risk (OAR) und grosstarget volume (GTV) von Tumoren zur Verbesserung der Strahlentherapie. Die Onkologen kostet es viel Zeit die Strahlentherapie zu planen, denn jedes Organ, was zu schaden kommen könnte und jeder Tumor müssen per Hand segmentiert werden. Dies ist sehr zeitaufwändig und erhöht somit die Kosten der Therapie. Beispiele für Organe, auf die der Onkologe achten muss, wären die optischen Nerven in Augennähe. Das Ziel der Strahlentherapie ist es, die Krebszellen mit genug Strahlung zu treffen und dabei die umliegenden Organe nicht zu sehr zu beschädigen. Deshalb ist die automatische Segmentierung eine wichtige und lebensrettende Aufgabe.
Vorgehen
Diese Challenge wurde zu zweit bearbeitet. Hierdurch konnte relativ effektiv vorgegangen werden. Es wurde wöchentlich zu zweit besprochen, welche Experimente mit welchen Parametern durchgeführt wurden und welche Ergebnisse dies erzielte, sowie Probleme zusammen gelöst. Daraus wurden gemeinsam Rückschlüsse auf die Wirkung der jeweiligen Parameter gezogen und Vermutungen besprochen, welche Parametereinstellungen zielführend sein könnten. Hierbei wurden auch Erfahrungen der restlichen Projektmitglieder mit anderen Challenges besprochen. Anhand dieser Besprechungen wurden grobe Trainingsparameter für die folgende Woche geplant und anschließend durchgeführt und analysiert. Die Analyse wurde größtenteils auf den, oben erwähnten, Dice bezogen, aber auch z.B. auf die Specificity. Da der Algorithmus im Idealfall eine Unterstützung ärztlichen Personals sein sollte, wurde versucht, möglichst selten "Fehlalarme" auszulösen.
Experimente
Eine Auswahl der durchgeführten Experimente:
Name | Accuracy | Loss | Specificity | Sensitivity | Jaccard | Dice |
---|---|---|---|---|---|---|
strct-Lung-02c | 0.96 | 0,133 | 0,981 | 0,687 | 0,55 | 0,7097 |
strct-Lung-04 | 0,945 | 0,159 | 0,977 | 0,618 | 0,502 | - |
strct-Lung-04b | 0,926 | 0,196 | 0,983 | 0,468 | 0,412 | - |
strct-Lung-06b | 0,967 | 0,254 | 0,984 | 0,739 | 0,613 | 0,76 |
strct-Lung-07 | 0,94 | 0,263 | 0,957 | 0,791 | 0,579 | - |
strct-Lung+Naso-01 | 0,965 | 0,24 | 0,983 | 0,758 | 0,629 | 0,7722 |
Besonderheiten der einzelnen Experimente:
Das Team StructSeg hat zunächst mit der "Standard"-Pipeline begonnen,mit der die meisten Projektmitglieder die Challenges begonnen haben. Da die Tumore, wie oben bereits erwähnt, nur einen sehr kleinen Teil der Bildausschnitte ausmachen, wurde zunächst nur auf Bildausschnitten trainiert, welche einen Tumor enthalten (bzw. zumindest Teile eines Tumors), damit das Netzwerk genau lernt, was ein Tumor ist (02c). Als nächstes wurde getestet, welchen Einfluss es hat, die Patchsize zu verringern und verschiedene resampling Strategien anzuwenden(04). Danach wurde die Levelanzahl, die das U-Net hat, von drei auf fünf erhöht und entsprechend das Padding erhöht, damit die Patchsize korrekt ist(04b). In Training 06b wurden die bis hier besten Strategien verwendet und das Resampling auf transversal gestellt. Bei Training 07 wurden die Merkmale der Trainings 06b und 04b kombiniert, dies erzielte jedoch keine weitere Verbesserung.
Da die Experimente gute Ergebnisse erzielten, wurde die Architektur nie grundlegend verändert, sondern lediglich die Konfiguration verändert. So wurde durchweg mit einem Tensorflow U-Net trainiert, aber es wurden verschiedene Levelanzahlen getestet.
Fazit
Im Vergleich zu den offiziellen Teilnehmern der Challenge erzielte das Team StructSeg deutlich bessere Ergebnisse. So erzielten es bei der Teilaufgabe 4 z.B. einen Dice von 0,76, während das bestplatzierte Team der offiziellen Challenge einen Wert von nur 0,54 erzielte. Dies ist aber vermutlich auch darauf zurückzuführen, dass die offizellen Ergebnisse an einem gesonderten Validierungsdatensatz gemessen wurden, welcher vermutlich schwerere Fälle enthielt. Wir konnten unseren Dice im Laufe des Projektes verbessern und haben einen, nach den üblichen Maßstäben, annehmbaren Wert erzielt.
Die Erfahrungen, welche im Rahmen der Bearbeitung dieser Challenge gesammelt wurden, wurden anschließend teilweise verwendet, um ein MeVisLab-Modul für Standartfälle der Segmentierung(Standatisiertes Segmentierungs Modul) zu erstellen.
xVertSeg
Einleitung
Innerhalb des Team Challenge hat sich die Gruppe in mehrere einzelne Teilgruppen aufgesplittet und verschiedene Challenges bearbeitet. Eine dieser Challenges trägt die Bezeichnung xVertSeg und wird vom Laboratory of Imaging Technologies (University of Ljubljana, Faculty of Electrical Engineering, Slovenia) veröffentlicht. Die Challenge besteht aus zwei Teilen. Der eine Teil befasst sich mit der Segmentierung der Lendenwirbel L1-L5, der andere Teil mit der Klassifikation von Wirbelfrakturen an den segmentierten Wirbeln. Da für diese zwei Aufgabenteile verschiedene Arten von Netzen benötigt werden, eins zur Segmentierung und eins zur Klassifikation, wurde der zweite Aufgabenteil weggelassen. Dadurch wurde der Arbeitsumfang reduziert und die Übernahme weiterer Aufgaben ermöglicht. Das Thema der Challenge wurde ausgewählt, weil im persönlichen Umfeld die Wirbelsäule ein zentrales Thema war und daher bereits Interesse bestand.
Datensatz
Um die Aufgabe bearbeiten zu können, stellt die Website der Challenge einen Datensatz zum Download zur Verfügung. Die darin enthaltenen Daten enthalten Trainingsdaten für beide Aufgabenteile. Für die Segmentierung werden Bilder und dazu passende Wirbelsegmentierungen benötigt. Die Bilder der Challenge sind CT Aufnahmen von einer Wirbelsäule, die dazugehörigen Masken enthalten Label für alle 5 Lendenwirbel. Insgesamt ist die Größe des Datensatzes ziemlich gering. Es werden nur 15 Trainingsbilder mit Masken geliefert und nur weitere 10 Bilder ohne Masken.
Die Bilder werden durch eine Header-Datei und eine RAW-Datei repräsentiert, die beim Einbinden in das MeVisLab-Netz mit den dazugehörigen Masken zusammengefügt werden.
Netze
Als Einstieg für ein Netz wurde ein bereits bestehendes Tensorflow U-Net für die Segmentierung mehrerer Strukturen von MeVis verwendet. Es enthielt Module zum Laden von annotierten Bildern, randomisiertem Ändern der Perspektive, Resampling von Streams in ein Koordinatensystem, Caching der Dateien ins mlimage-Format, Patch-Extraktion, einem Modul zum Senden der Daten in einen Deep Learning Prozess, sowie dem Anzeigen von Bildern und dazugehörigen Labels. Dieses Netz war bereits lauffähig und musste nur angepasst und erweitert werden. Beispielsweise wurde es um jeweils einen StratifiedPatchSampler für Trainingsdaten und Validierungsdaten erweitert, die die Sampling-Strategie passend zu den zugewiesenen Patch-Klassen änderten. Den Patchsamplern wurden Sample-Frequenzen für die einzelnen Layer von Hintergund und Labeln übergeben. Mit den daraus resultierenden Werten wurde das Netz trainiert.
Um die Funktionalität des trainierten Netzes zu testen, wurde ein zweites Netz erstellt, wieder angepasst aus einem bereits bestehenden Test-Netz. Dieses Test-Netz bekommt Testdaten und die berechneten Ergebnisse des aktiven trainierten Netzes. Das Test-Netz wurde so bearbeitet, dass es beispielsweise nur zusammenhängende Bereiche anzeigt, um das Anzeigen fehlerhaft berechneter Bereiche möglichst zu vermeiden.
Training
Das Netz wurde hauptsächlich mit 4 Leveln und in der Sagittalebene trainiert. Je nach Ergebnis der Trainings wurden Werte wie Padding und Patch Size verändert und neue Trainings gestartet. Dabei sind anfangs häufig Probleme durch Unwissenheit aufgetreten. Beispielsweise war unklar, wie genau die Eingabe der Werte bei den PatchSamplern auszusehen hat oder einzelne Eingaben wurden schlichtweg in der Menge der Werte übersehen. Dies stellte sich dann in den trainierten Netzen heraus, indem die Netze auf Testdaten nichts Sinnvolles anzeigten. Nachdem solche Probleme behoben waren, konnten die variablen Werte mit den folgenden Trainings laufend verändert und je nach Ergebnis in eine bestimmte Richtung angepasst werden.
Ergebnisse und Hippocampus-Challenge
Mit fortschreitenden Trainings stellte sich heraus, dass zwar gewünschte Lendenwirbel segmentiert wurden, aber bei Weitem nicht so erfolgreich, wie es wünschenswert gewesen wäre. Hier machte sich bemerkbar, dass sich mit gerade mal 15 Trainingsdaten nicht wirklich erfolgreich trainieren lässt. Es wurde daraufhin ein Versuch gestartet, mit Satori weitere Daten zu annotieren, der wegen verschiedener technischer Probleme abgebrochen wurde. Daraufhin wurde entschieden, dass eine Weiterarbeit an dieser Challenge keinen wirklichen Mehrwert bringt.
Die erlernten Fähigkeiten wurden daraufhin an einer weiteren Challenge angewendet. Diese Challenge, namens Hippocampus, segmentiert die Hippocampi im menschlichen Gehirn. Mit 260 zur Verfügung gestellten Trainingsdaten wurden hier zufriedenstellende Ergebnisse nach kurzer Zeit erzielt, weshalb diese Challenge nicht lange bearbeitet und zum Team Website für das Erlernen weiterer Fähigkeiten gewechselt wurde.
Standatisiertes Segmentierungs Modul
Einleitung
Die Anzahl an Parametern und Möglichkeiten zur Anwendung eines neuronalen Netzes zur Segmentierung von Bildern ist immens. Ziel bei der Entwicklung dieses Moduls ist es, einen Schritt in Richtung einer vollständigen Lösung für binäre Segmentierungsprobleme zu gehen. Dies soll einerseits helfen, binäre Segmentierungsprobleme mit weniger Arbeitsaufwand lösen zu können und anderseits Einsteigern durch die vereinfachte Oberfläche als Unterstützung dienen. Dieses Modul bietet ein geschlossenes Paket, welches alles Nötige für eine binäre Segmentierung in einem einzelnen Modul bindet. Durch die Architektur MeVisLabs kann es dennoch erweitert und für andere Zwecke verändert werden. Es wurde eine übersichtlichere Oberfläche für diesen Zweck entwickelt. Sie zeichnet sich dadurch aus, dass nur die wichtigsten Optionsmöglichkeiten angeboten werden. Durch die Vereinfachung ist der Anwendungszweck der Pipeline auf binäre Segmentierungen beschränkt. Außerdem wird der Nutzer unterstützt, indem falsche Eingabewerte automatisch in korrekte Werte abgewandelt werden.
Die Entscheidungen, welche Optionen als "nötig für die Oberfläche" zählen (siehe Abbildung 18), wurden anhand der Erfahrungen und Berichte des Challenge Teams sowie der Empfehlungen der Projektleiter Felix Thielke und Hans Meine festgelegt.
Implementierung
Als Basis für dieses Modul dient dasselbe MeVisLab-Netzwerk, welches auch von den meisten aus dem Challenge Team verwendet wurde, um ihre jeweilige Challenge anzufangen.
Ziel bei der Erstellung der Oberfläche war es, wie oben bereits erwähnt,
eine möglichst verständliche und übersichtliche Oberfläche zu erreichen.
Um dies zu unterstützen, wurde nur eine Auswahl an Optionen in die Oberfläche übernommen.
Teilweise wurden die Optionen eins zu eins von den internen Modulen an die Oberfläche des neuen Moduls weitergeleitet.
Teilweise wurden Eingabedialoge vereinfacht, zusammen gruppiert oder umgestaltet, sodass sie verständlicher sind.
Die Angabe der Patchgröße wurde vereinfacht, indem nur noch jeweils ein Wert für die Patchgröße und für die Anzahl der Level des U-Nets angegeben wird. Die Größe des Paddings wird nun durch das Modul selbst berechnet und automatisch verwendet. Außerdem werden Patchgrößen, welche nicht mit der angegebenen Levelanzahl kompatibel sind, automatisch zu dem nächsten passenden Wert korrigiert und angewandt. Die Oberfläche des Moduls zeigt außerdem das automatisch gewählte Padding und die letztendliche gesamte Patchgröße an, sowie einen Indikator, ob die Patchgröße im 2D oder 3D Modus eingestellt ist. Über die angebotenen Schaltflächen kann auch automatisch zum nächsten größeren oder kleineren gültigen Wert gesprungen werden.
Die Einstellung des Verhältnisses zwischen den beiden Klassen beim Training und beim Validieren kann nun auch über eine vereinfachte Oberfläche angegeben werden. Statt der ursprünglichen (sehr flexiblen) Eingabe eines regulären Ausdrucks wird nun durch eine Prozentangabe der Anteil der Daten mit Vordergrund jeweils angegeben. Außerdem kann die Stratifizierung des Trainings und der Validierung nun jeweils mit einem einzelnen Klick aktiviert bzw. deaktiviert werden.
Die Einstellmöglichkeiten des internen Moduls, welches für die Ausgabe verantwortlich ist, sind eins zu eins in die Oberfläche des neuen Moduls weitergeleitet worden, da hier eine Vereinfachung keinen Sinn ergibt. Weil diese alle nötig sind und auch für diesen Zweck bereits ideal angeordnet sind.
Allerdings wird der 2D/3D Wechselschalter des Moduls jetzt auch verwendet, um die Patchgröße automatisch an die jeweils gewählten Dimensionen anzupassen.
Fazit
Die Architektur von MeVisLab ermöglicht es, dieses Modul in andere Module einzubinden. So könnte es beispielsweise erweitert werden, um auch nicht-binäre Segmentierungsprobleme lösen zu können oder in eine Weboberfläche eingebunden zu werden.