← Alle Beiträge

Rückblick, geschrieben ein paar Tage nach dem Bundeswettbewerb in Heilbronn.

PneuNet: anderthalb Jahre Röntgenbilder, drei Wettbewerbsrunden

Wie aus einer Seminarfacharbeit über Lungenentzündung ein Projekt beim Bundeswettbewerb Jugend forscht wurde, und warum der DICOM-Viewer am Ende das eigentliche Produkt ist.

Vier Schüler und ein Juror mit Urkunden beim Jugend-forscht-Bundeswettbewerb
Jugend-forscht-Bundeswettbewerb, Heilbronn 2024

Heilbronn ist vorbei. Sonderpreis „Gute Prävention und Rehabilitation” der Deutschen Gesetzlichen Unfallversicherung, 1.000 Euro. Kein Bundessieg. Für ein Projekt, das als Seminarfacharbeit angefangen hat, nehme ich das trotzdem sehr gern.

Am Anfang stand eine Zahl aus der Recherche: Die manuelle Diagnose einer Lungenentzündung auf Röntgenbildern liegt bei etwa 76 Prozent Genauigkeit, und in ländlichen Regionen fehlen Radiologen. Nico, Dustin und ich wollten wissen, ob ein neuronales Netz Ärzten da helfen kann. Daraus wurde unsere Besondere Lernleistung am Spezialschulteil des Albert-Schweitzer-Gymnasiums in Erfurt, ab der elften Klasse. Dafür haben wir mit einer Uniklinik zusammengearbeitet. Das hat vor allem Hartnäckigkeit gebraucht.

Ich habe nicht mit PyTorch angefangen, sondern mit NumPy. Erst ein eigenes Netz, Backpropagation von Hand. Langsam, aber danach war klar, was in den Frameworks eigentlich passiert. Dann kam der systematische Vergleich: ResNet, DenseNet, EfficientNet, ConvNeXt und VGG19 auf vier öffentlichen Datensätzen mit bis zu 30.000 Bildern. Dazu eine Lungensegmentierung mit Attention-U-Net und Class Activation Mapping, damit man sieht, wohin das Modell schaut. Am Ende lief alles in einem DICOM-Viewer.

Der Viewer ist der Teil, den man anfassen kann, und für mich das eigentliche Produkt. DICOM ist das Format, in dem Kliniken Röntgenbilder speichern, Bild und Patientendaten in einer Datei. Ein Modell, das nur in einem Notebook läuft, hilft keinem Arzt. Also muss das Modell dahin, wo Ärzte sowieso hinschauen. Der Viewer zeigt die Dateien und eine Patientenliste, in der Mitte das Röntgenbild. Er lässt die Modelle über das Bild laufen und zeigt das Ergebnis direkt darin: die Einschätzung Pneumonie oder gesund, die Lungenmaske aus der Segmentierung und die Class Activation Map als Heatmap. Die Heatmap zeigt, welche Regionen für die Entscheidung am meisten gezählt haben. Leuchtet sie neben der Lunge statt in ihr, stimmt etwas nicht, egal wie sicher das Modell klingt. Genau dafür ist sie da. Eine vollständige Fassung gibt es in C++ mit Qt, eine Testfassung in Python. Die Demo auf dieser Seite baut die Python-Fassung nach, mit öffentlichen Beispielbildern und einer Lupe für die Heatmap. Sie stellt keine Diagnose.

Interaktive Demo Der DICOM-Viewer: Fensterung, Messen, Segmentierung, Zweitmeinung, CAM-Heatmap. Forschungsprototyp, keine Diagnose.

Keine Diagnose · Forschungsprototyp

6Class Activation Mapping zeigt, wohin das ResNet-34 schaut: 7 × 7-Raster der letzten Faltungsschicht, hochskaliert und eingefärbt. Deckkraft per Regler.

Bilder: Beispiel-DICOMs aus dem öffentlichen Repo, RSNA Pneumonia Detection Challenge (2018) / NIH ChestX-ray14, Label „Lung Opacity“. Detektion auf Bild 1 und Lungenmaske auf Bild 3 sind aus den Viewer-Screenshots im Repo nachgezeichnet; alle anderen Overlays und jede CAM-Heatmap sind illustrativ, weil die Modellgewichte nicht öffentlich sind.

Demo mit Beispieldaten

Zum Ausprobieren: Die Demo startet von selbst, sobald sie im Bild ist; ein Klick hinein übernimmt die Steuerung. Nur Beispieldaten.

Ergebnis auf dem Validierungssplit: über 87 Prozent bei der Klassifikation, über 95 Prozent bei der Segmentierung. Wichtig: Das ist ein Validierungssplit, keine Klinik. Das sage ich auch jeder Jury dazu.

Die Runden im Schnelldurchlauf. Februar, Regionalwettbewerb Mittelthüringen an der Bauhaus-Universität Weimar: Regionalsieg als bestes interdisziplinäres Projekt, dazu ein Platz in der JugendUnternimmt Summer School im Sommer. 9. April, Landeswettbewerb in Jena: 1. Preis im Fachgebiet Arbeitswelt und zwei Sonderpreise. Ende Mai dann der 59. Bundeswettbewerb in der experimenta in Heilbronn, vier Tage Stand, Jury, Gespräche.

Was ich nach anderthalb Jahren sicher weiß: Ein Modell zu trainieren ist der kleinere Teil. Daten finden, Ergebnisse ehrlich messen und dasselbe Projekt dreimal vor unterschiedlichen Jurys erklären, das war die eigentliche Arbeit.

Tools und Skills: Python mit NumPy, PyTorch und TensorFlow, CNNs von Hand und als fertige Architekturen, Transfer Learning, Segmentierung mit U-Nets, Class Activation Mapping, OpenCV, DICOM, C++ mit Qt für den Viewer und wissenschaftliches Schreiben.

In zehn Tagen gibt es das Abiturzeugnis. Fertig ist PneuNet damit nicht, der Code wird weiter wachsen.

Read in English →