Wie wir bei Kaggle Bronze statt Gold gewonnen haben oder wissen, wie man das richtige Submit auswählt / Sudo Null IT News

Hallo Champion!

Ich arbeite in der Einheit rdl by red_mad_robot. Während der Arbeitszeit entwickeln wir zusammen mit Kollegen ML-Lösungen für die Schwerindustrie und in unserer Freizeit nehmen wir an Datenanalyse-Meisterschaften auf Kaggle teil.

Also haben wir kürzlich einen Monat mit dem Wettbewerb verbracht “UW-Madison GI-Trakt-Bildsegmentierungund nahm das Gold nicht. Sie haben die Goldmedaille nicht geholt, aber jetzt hat jeder von uns die erste Bronzemedaille. Und jetzt werden wir kurz über die Ansätze sprechen, die bei der Segmentierung funktioniert haben. Und wir werden Ihnen auch sagen, was getan werden könnte, um das Gold trotzdem zu nehmen. (Spoiler: Wir waren nur einen Schritt von Gold entfernt 🥇)

Eine Aufgabe

Bei diesem Wettbewerb galt es, ein Modell zur automatischen Segmentierung von Magen und Darm bei MRT-Aufnahmen zu erstellen. Die MRT-Bilder stammen von echten Patienten im UW-Madison Carbone Cancer Center, die während der Strahlentherapie an verschiedenen Tagen 1-5 MRT-Scans hatten.

Mehr zur Strahlentherapie…

Mehr über die Strahlentherapie und die Bedeutung der Aufgabe: Etwa die Hälfte der Patienten, bei denen Magen-Darm-Krebs diagnostiziert wurde, ist für eine Strahlentherapie indiziert, die in der Regel 10-15 Minuten täglich für 1-6 Wochen verabreicht wird. Radioonkologen versuchen, hohe Strahlendosen mit Röntgenstrahlen zu verabreichen, die auf Tumore gerichtet sind, während Magen und Darm vermieden werden. Dank neuester Technologien wie integrierter Magnetresonanztomographie und Linearbeschleunigersystemen, auch MR-Linac genannt, können Onkologen die tägliche Position von Tumor und Darm visualisieren, die sich von Tag zu Tag ändern kann. Bei diesen Scans müssen Radiologen die Position des Magens und des Darms manuell kartieren, um die Richtung der Röntgenstrahlen anzupassen, um die an den Tumor abgegebene Dosis zu erhöhen und Magen und Darm zu vermeiden. Dies ist ein zeitaufwändiger Prozess, der die Behandlung von 15 Minuten auf eine Stunde pro Tag verlängern kann, was für Patienten schwierig sein kann. Die Methode der automatischen Segmentierung von Magen und Darm wird das Verfahren erheblich beschleunigen und mehr Patienten eine effektivere Behandlung ermöglichen.

Beschränkungen:

  • Inferenzzeit nicht mehr als 9 Stunden

  • Powered by Kaggle: 13 GB RAM, 16 GB GPU, 2-Kern-CPU

  • Ohne Internetzugang

💾 Daten

Die Daten bestanden aus einer Reihe von Schichten (von 80 bis 110) von MRT-Bildern für 1 oder mehrere Tage, aufgeteilt nach Patienten – Bilder im .png-Format und Koordinaten von Masken im rle-Format. Wettbewerbskennzahlen: Würfelkoeffizient und 3D-Hausdorff-Distanz

🛠 Ansätze

Die klassische Aufgabe, medizinische Daten zu segmentieren: Nach der Betrachtung öffentlicher Laptops haben wir 3 Hauptlösungsansätze identifiziert:

  1. Semantische oder Instanzsegmentierung von 2D-Daten. Hier werden alle Slices mit Masken in das Netzwerk eingespeist und segmentiert.

  2. Semantische oder Instanzsegmentierung auf den sogenannten 2,5D-Daten. (Hier kombinieren wir die Slices zu Tripletts, schneiden verschiedene Farbkanäle aus und erhalten etwas Ähnliches wie Stereobilder). Architekturen zur Segmentierung von 2D- und 2,5D-Bildern: SegNet, Unet mit diversen Backbones, diverse Kombinationen mit Vision Transformern wie TransResUnet etc.

  3. Semantische Segmentierung von 3D-Daten – wir kleben alle Slices zu einem Objekt zusammen und speisen es in das neuronale Netzwerk ein. Architekturen: Squeeze-and-Excitation UNet, SegResNet

Welcher Ansatz hat Ihrer Meinung nach ganz oben gelandet?

🔌Was hast du probiert?

Da wir näher am Ende in den Wettbewerb eingestiegen sind, haben wir uns entschieden, sofort zu untersuchen, welche Ansätze bereits ganz oben auf der Rangliste stehen. Es wurde sofort entschieden, die Ressourcen des Teams aufzuteilen und sich auf 2,5D- und 3D-Daten zu konzentrieren. In den besten Traditionen der wettbewerbsfähigen Datenwissenschaft haben wir uns entschieden, mehr verschiedene Architekturen zu trainieren, um die Stabilität des endgültigen Modells sicherzustellen, während wir gleichzeitig mit verschiedenen Verlustfunktionen, Schedulern und Erweiterungen experimentieren. Und am Ende, wenn Zeit ist, versuchen Sie, Masken aus 2,5D- und 3D-Meshes zu mischen (reines Wiehern – sehen Sie, was passiert). Vergessen Sie nicht, dass die Inferenz nur 9 Stunden dauert – Tests haben gezeigt, dass die Inferenz mit dem 1-fachen mehr als eine Stunde dauert. Das heißt, insgesamt konnten nicht mehr als 8 Faltungen verwendet werden. Es war also eine schwierige Auswahl. Der ursprüngliche Plan, 30 Grids zu mischen, musste schnell aufgegeben werden.

Was hat es mit 2D-Architekturen auf sich?

Wir begannen mit 2D-Architekturen. Wir haben die klassische Version ausprobiert – Unet mit einem dickeren Backbone (EfficientNet-b7). Allerdings schnitt er schlecht ab. Idee durchgesickert.

Aus diesem Grund haben wir uns für TransResUnet entschieden. Dies ist eine ziemlich neue (~2021) Architektur für medizinische Daten mit ResNet und einem Transformator als Feature-Extraktor. Wir haben verschiedene Kombinationen von Verlustfunktionen für das Ensemble und eine Variante mit einem schwereren Transformator genommen. Das Ensemble der besten Faltungen dieser Modelle war dem öffentlichen Teil der Bestenliste um nur 0,006 dem Ensemble der 3D-Architekturen unterlegen. Mit Blick auf die Zukunft ist die Lücke privat auf 0,018 gewachsen.

Was ist mit 3D-Architekturen? Wir versuchen, die Unet-Baseline zu schlagen.

Um mit 3D zu arbeiten, haben wir mit der Auswahl guter Modelle begonnen. Wir wurden müde und studierten eine Reihe von Artikeln der Gewinner zweier medizinischer Wettbewerbe in 3D-Segmentierung. Das erste Papier verwendete UNets Squeeze and Excitation Modification (Iantsen et al. Kopf- und Halstumor), dessen Autoren den gewannen „Segmentierung von Kopf-Hals-Tumoren“ im Jahr 2020. Der zweite Artikel war von NVIDIA, wo die Autoren gewonnen haben “BRATS 2021 Gehirntumor NVIDIA” Segmentierung von Hirntumoren. Es wurde ein einfaches UNet verwendet, das mit der nnUnet-Bibliothek auf GitHub optimiert wurde. Squeeze und Erregung UNet schnitt besser ab als baselan mit fettem Unet. Das Einrichten von nnUnet hätte zu viel Zeit gekostet, und es ging bereits zur Neige. Wir haben uns entschieden statt nnUnet eine Alternative zu DynUnet aus der Bibliothek zu nehmen MONAI. MONAI ist eine erstklassige Bibliothek für die medizinische Segmentierung und umfasst Modelle, Erweiterungen, Verluste, Metriken usw. DynUnet ist ein dynamisches Unet, das für eine bestimmte Aufgabe angepasst werden kann. Allerdings fielen die Ergebnisse etwas schlechter aus als die Unet-Baseline, wir haben sie nicht in den Käfig genommen.

Gehen Sie voran und testen Sie SwinUNETR und Segresnet aus MONAI. Die SwinUNETR-Architektur zeigte bei vielen Segmentierungsaufgaben Top-Ergebnisse, aber bei unserer Aufgabe stellte sich die Geschwindigkeit als schlechter als die Unet-Baseline heraus. Segresnet ist eines der Top-Modelle des Jahres 2019, das ResNet-Skip-Verbindungen innerhalb von Unet verwendet. Und schon hier waren die Ergebnisse besser als der Ausgangswert! Hurra! Gelungene Architektur gefunden. Was weiter?

✈️ Die richtige Architektur löst nichts. Was zu tun ist?

Sobald wir uns für die Architektur entschieden hatten, haben wir sofort damit begonnen, andere Trainingskonfigurationen zu testen. Verlustmerkmale: Würfelverlust, Tversky-Verlust, BCE-Verlust, Fokusverlust und deren Kombinationen. Als Ergebnis die Kombination vor Verlust und Würfelverlust und Kombination vor Verlust und Tversky-Verlust hat am besten funktioniert.

Wir haben auch zwei Arten von Schedulern ausprobiert: Polynomial (verwendet von Nvidia) und Cosine Annealing mit Warmstarts (verwendet von Iantsen et al.). Kosinusglühen mit Warmstarts lieferte die besten Ergebnisse.

Um das Maximum aus der Architektur herauszuholen, haben wir Dutzende verschiedener Erweiterungen von MONAI durchlaufen. Basierend auf der lokalen Validierung wurden die folgenden Augmentationen ausgewählt: umdrehen, Drehung (15 Grad) Gamma Korrektur, Gaußsches Rauschen und Glättung, Pixel-Shuffling, Pixelausfall, elastische Verformung, intensitätsbezogene Augmentationen. Es gab viele Augmentationen und das Training dauerte mehr als 1000 Epochen.

Im Streben nach Modellstabilisierung haben wir eine Verlängerung der Testzeit hinzugefügt. Dies ist eine Technik, bei der das 3D-Bild während der Inferenz gespiegelt und dann die endgültige Ausgabe gemittelt wird.

Alles ist fertig, jetzt stellen wir das endgültige Ensemble aus 7 Modellen mit Gewichten im Verhältnis zu den Metriken auf der Rangliste zusammen.

😳 Die Arbeit ist getan, aber wir sind immer noch nicht in den Medaillen, verloren?!

Es gibt zwei Möglichkeiten, bei Kaggle zu gewinnen. Die erste besteht darin, sofort ein starkes Modell mit einer guten Geschwindigkeit zu bauen. Die Hauptsache für dieses Modell ist, auf einer privaten Probe zu bleiben. (Zähme die Erschütterung). Der zweite Weg zum Erfolg besteht darin, das endgültige Modell zu stabilisieren und zu diversifizieren. Dann, selbst wenn Sie nicht mit der besten Geschwindigkeit weit von der Spitze abschließen, können Sie in einer privaten Auswahl gut vom Tellerwäscher zum Millionär aufsteigen und die Medaillenzone erreichen. Das ist die Strategie, die wir angesichts des Zeitmangels für uns selbst gewählt haben. Wir validieren das Modell gut und stellen ein Ensemble aus verschiedenen Ansätzen zusammen.

⚔️ Mischen Sie 2,5D- und 3D-Modelle und lassen Sie sich taufen.

Nachdem wir Ensembles von trainierten Modellen mit ausgewählten besten Falten in unseren Händen hatten, die Punktzahlen in der Medaillenspitze (oder nahe daran) erzielten, beschlossen wir, in den letzten 3 Tagen 2,5D- und 3D-Ansätze zu mischen. Es gab noch 15 Einsendungen für alles. Parallel dazu beenden weiterhin andere Architekturen ihr Studium, was ebenfalls auf dem Leaderboard überprüft werden musste.

Schieben Sie Model Blending nicht auf!

Bis zu diesem Zeitpunkt lief alles reibungslos, aber Probleme begannen mit der Mischung von 2,5-D- und 3-D-Ansätzen. Die Gitter erzeugten Tensoren unterschiedlicher Größe, die Masken wurden unterschiedlich dekodiert. Mit Command Brute Force konnten wir dieses Problem beheben. Ein Problem gelöst, ein anderes kam…

Die Entscheidung hörte auf, aus dem Gedächtnis zu gehen. Nun, wieder Team Brute Force. In 6 Händen haben wir begonnen, den Code zu optimieren und neu zu schreiben, es scheint, dass der Prozess begonnen hat …

Plötzlich versetzte Kaggle einen zusätzlichen Stich in den Rücken. Es hat sich herausgestellt, dass erfolglose Einreichungen (Fall durch einen Fehler) als Versuche gezählt werden. Unangenehm, aber wir versuchen, mögliche Fehler vorherzusagen und die Lösung zu stabilisieren.

🔥 Entscheidender Moment und Entscheidungsfindung

Am Ende gab es eine filmische Situation – Es gab eine Wahl, wofür den letzten Versuch ausgeben?

  • Überprüfen Sie noch einmal die Mischung zweier Architekturen, die fehlschlagen können?

  • oder eine frische Kombination fertiger Falten mit anderen Gewichten ausprobieren?

    Was würdest du wählen? Da wir nicht in der Medaillenzone waren, gingen wir kein Risiko ein und setzten alles aufs Spiel. Wir haben uns für die zweite Option entschieden. Es stellte sich heraus, dass es nicht umsonst war …

Nach der Veröffentlichung des privaten Teils der Rangliste wurde unser Team dank des Ensembles von 3D-Architekturen sofort um 90 Plätze unter den ersten Hundert (Platz 92) erschüttert. Einatmen, ausatmen und hier ist eine wohlverdiente Bronze! Zwar gefiel uns auch die Herangehensweise bei 2.5D-Modellen, allerdings sanken diese Modelle eher im Intimbereich. Die meisten Entscheidungen über uns sind aus diesem Grund nach unten geflogen.

🥇 Und wer hat das Gold genommen?

Und was ist mit denen, die in Gold sind? Korrekt! – Mischen von 2D- und 3D-Architekturen! Das Mischen dieser Ansätze ermöglichte es, Goldmedaillen zu gewinnen. Die Jungs sind erfahrener als wir, sie haben früher gemerkt, dass diese beiden Herangehensweisen grundlegend verschieden sind, was bedeutet, dass ihr Ensemble die größte Leistung erbringen sollte. Sie lagen nicht falsch. Wir haben auch verstanden, aber … keine Zeit gehabt.

🤔 Gedanken und Reflexion

Es ist immer schade, keine Zeit zu haben, alle geplanten Hypothesen auszuprobieren, besonders wenn dies zu höheren Positionen führen könnte. Nach Beendigung des Wettbewerbs haben wir noch versucht, ein Ensemble aus 2,5D und 3D zu schicken. Nach mehreren Tagen des Versuchs konnten wir die Speicherprobleme auf Kaggle immer noch nicht lösen. Das hat uns beruhigt, es bedeutet, dass sie nicht geplatzt sind, sondern wirklich einfach nicht damit fertig wurden. Es ist weniger peinlich. Beim nächsten Mal starten wir früher.

✅ Ergebnisse und Schlussfolgerungen

  • Verschieben Sie es nicht bis zum letzten Tag

  • Lernen Sie viele Modelle kennen, probieren Sie verschiedene Ansätze aus.

  • Tun Sie, was andere nicht versucht haben.

  • Spielen Sie als Team! Gemeinsam können Sie Hypothesentests parallel durchführen.

  • Sie haben nicht verloren, bis es keine Ergebnisse aus dem Privaten gibt.

  • Private wird jeden an seinen Platz weisen, also schnall dich an!

  • Kaufen Sie einen leistungsfähigeren Server, Sie können Grids fetter ausführen =)

Vielen Dank für das Lesen bis zum Ende. Verfolgen Sie unsere nächsten Siege in Telegrammkanal. Während Sie diesen Artikel lesen, haben wir möglicherweise etwas anderes gewonnen, indem wir neue Medaillen auf Kaggle gewonnen haben.

Artikelautoren:

Similar Posts

Leave a Reply

Your email address will not be published.