Optimierung der Krankenhausdiagnostik im Bereich der Pneumonie mithilfe von CNNs
Mit dem Aufkommen von COVID-19 standen und stehen bis heute viele Bereiche des täglichen Lebens vor großen Herausforderungen. Neben wirtschaftlichen und soziologischen Herausforderungen kämpft vor allem der Gesundheitssektor gegen das Virus. Ein wichtiges Mittel gegen die Ausbreitung ist das stetige Testen der Bevölkerung. Die hohe Anzahl an Tests führt immer wieder zu verzögerten Auswertungen und Überlastungen der Labore. Neben dem zeitlichen Aspekt ist es vor allem auch eine finanzielle Frage, wie viele Menschen getestet werden können oder wie erfolgreich Infektionsketten verfolgt und durchbrochen werden können. Die Kosten für einen COVID-19-Test belaufen sich im Medianwert auf 127 USD [1]. In Entwicklungsländern ist der Einsatz solch teurer Tests kaum oder nur bedingt möglich.
Es müssen demnach andere Lösungen gefunden werden, um die schweren Folgen einer durch COVID-19 verursachten Lungenentzündung zu verhindern. Schwere Verläufe gehen oftmals mit einer Pneumonie (Lungenentzündung) einher. Das Erkennen einer Lungenentzündung und der Ursache ist ausschlaggebend für den weiteren Verlauf der Erkrankung. Eine Möglichkeit ist es, Röntgenbilder vom Thorax anzufertigen und diese auf typische Merkmale einer Lungenentzündung zu untersuchen. Dieser Artikel zeigt eine mögliche unterstützende Diagnoselösung mithilfe eines prototypischen KI-Systems zur Detektion und Unterscheidung einer viralen oder bakteriellen Infektion.
Röntgenbilder als Diagnosemittel
Das Anfertigen eines Röntgenbildes zur Feststellung oder dem Ausschluss einer Pneumonie ist ein etabliertes Vorgehen der Radiologie. Ein Radiologe sucht dabei nach weißen Flecken im Bild, sogenannte Lungeninfiltrate [2]. Diese stellen eine Verdichtung des Lungengewebes dar und sind Folge eines Entzündungsgeschehens [3]. Abb. 1 zeigt eine Gegenüberstellung zweier Röntgenbilder, wobei das linke Bild einen gesunden und das rechte Bild einen an COVID-19 erkrankten Patienten zeigt. Sicher ist, dass die Unterscheidung nicht immer so einfach ist. Der Einsatz von Computertomografie (CT) führt zwar zu besseren Bildern, ist aber auch mit höheren Kosten verbunden. Auch der notwendige Desinfektionsaufwand ist beim Vergleich der Technologien zu berücksichtigen. Insbesondere bei der Untersuchung von COVID-19-Patienten ist hier der Aufwand beim Röntgen deutlich geringer als bei der CT-Technologie [4]. Erste Versuche zeigen zudem, dass gerade in einer Pandemiesituation auch ein Röntgen durch eine Glasscheibe möglich ist [5].
Mit den heutigen Möglichkeiten des maschinellen Lernens (ML) scheint es sinnvoll, ML für die Diagnose unterstützend einzubringen. Insbesondere Convolutional Neural Networks (CNNs) haben sich für die Klassifikation von Bildern bewährt.
Grundlagen
Grundsätzlich lernt ein Klassifikationssystem durch das Betrachten von Features. Die richtigen Features sind die entscheidenden Variablen für eine erfolgreiche Klassifizierung. In Bezug auf Bilddaten sind mögliche Features die Pixel eines Bildes. Die Position eines Pixels ist aussagekräftig, weshalb das Verwenden eines herkömmlichen neuronalen Netzes hier ausscheidet. Für derartige Grid-Topologien, wie es eine Ansammlung von Pixeln darstellt, ist ein CNN geeignet. Die Funktionsweise eines CNN unterteilt sich in zwei aufeinander aufbauenden Phasen.
In der ersten Phase, dem Feature Learning, werden die relevanten Features eigenständig durch das Netzwerk gefunden. Anders als bei anderen Netzwerktypen müssen demnach die Features nicht händisch bestimmt werden. Dabei wendet das Netzwerk in einer namensgebenden Convolutional-Schicht (kurz Conv-Schicht) mehrere verschiedene Filter an, welche beispielsweise zur Detektion von vertikalen oder horizontalen Kanten dienen. Die Größe der Filter wird dabei deutlich kleiner als das Eingangsbild gewählt, was zu einer reduzierten Anzahl an Verbindungen im Netz führt sowie die Anzahl der zu speichernden Gewichte reduziert. Infolgedessen wird die Berechnungsgeschwindigkeit gesteigert.
Die Gewichte der Filter werden im Zuge der Backpropagation angepasst, sodass die Fehlerquote gegenüber den markierten Trainingsdaten am Ende minimiert wird. Nach dem Anwenden der Filter entstehen Feature-Maps. Eine Aktvierungsfunktion entscheidet anschließend, welche Werte an die nächste Schicht weitergereicht werden. Eine bekannte und performante Aktivierungsfunktion ist die ReLu-Funktion: f(x)=max(0,x). Neben Conv-Schichten kommen auch Pooling-Schichten zum Einsatz. Mithilfe einer Pooling-Operation ist es möglich, die Matrixgröße zu reduzieren, mit dem Ziel, nur die relevanten Informationen zu behalten und die Berechnungsgeschwindigkeit zu erhöhen. Weiterhin führt die Pooling-Operation zu einer Translationsinvarianz wodurch die exakte Position nicht mehr so entscheidend ist. Dies führt dazu, dass relevante Stellen auch bei einer Verschiebung gefunden werden.
Die Ergebnisse einer Conv-Schicht werden zu einer nächsten Conv-Schicht weitergereicht. Während die Filter am Anfang simple Features detektieren, finden die Filter in den höheren Schichten komplexere Features.
Nach der Feature-Learning-Phase kommt die Klassifikation. Diese geschieht wie bei anderen neuronalen Netzwerktypen auch per Fully Connected Layer. Hierbei werden alle Neuronen der aktuellen Schicht mit allen Neuronen der nachfolgenden Schicht verbunden.Durch die Verbindungen werden Features kombiniert, und somit die eigentliche Klassifikation durchgeführt. Im Falle einer binären Klassifikation, also beispielsweise der Unterscheidung zwischen normaler und entzündeter Lunge, folgt nach der letzten Klassifikationsschicht eine Sigmoid-Aktivierungsfunktion. Hierdurch wird das Ergebnis auf 0 oder 1 eingestuft. Abhängig von der gewählten Zuordnung der Klassen fällt die Entscheidung für die eine oder die andere Klasse.
Datenanalyse und Vorverarbeitung
Die zu realisierende KI-Lösung wird anhand zweier Datensätze trainiert und getestet:
Chest-X-Ray-Datensatz [6] | Version 2 | kaggle.com/paultimothymooney/chest-xray-pneumonia |
COVID-19-X-Rays [8] | Version 0.2 | github.com/ieee8023/covid-chestxray-dataset |
Mit dem Chest-X-Ray-(CXR)-Datensatz kommt ein weit verbreiteter Datensatz zum Einsatz. Zudem wird dieser mit COVID-19-CXR angereichert.
Zunächst ist es sinnvoll, sich einen Überblick über die vorliegenden Daten zu verschaffen. Unter Zuhilfenahme der Bibliothek Pandas können die Metadaten zunächst eingelesen werden. Anschließend lassen sich die eingelesenen Metadaten visualisieren (hier mittels der Bibliothek Plotly). Abb. 2 zeigt den originalen CXR-Datensatz als auch den kombinierten Datensatz. Hier wurden insgesamt 206 COVID-19-Bilder hinzugefügt, die zuvor mit dem Label "virus" deklariert wurden.
Wie die Plots aufzeigen, handelt es sich hier um einen unausgeglichenen Datensatz. Das bedeutet, die einzelnen Klassen sind unterschiedlich oft repräsentiert. Insbesondere bei einer Unterscheidung zwischen "Normal" gegenüber "Pneumonie" (bakterielle + virale Lungenentzündung) ist die Klasse "Normal" stark unterrepräsentiert. Eine derartige Verteilung ist im medizinischen Kontext nicht verwunderlich, da hauptsächlich Röntgenbilder bei schon bestehendem Verdacht angefertigt werden.
Die Genauigkeit bei 99,99 Prozent, das Modell ist jedoch gänzlich unbrauchbar.
Das Problem unausgeglichener Datensätze: Nehmen wir an, Sie haben ein KI-System entwickelt, das vorhersagen soll, ob eine Pneumonie vorliegt oder nicht. Ein Training des ML-Modells erfolgt auf 50.000 Röntgenbilder, worunter aber nur fünf Fälle eine Pneumonie aufweisen. Klassifiziert das ML-Modell nun in jedem Fall mit "gesund", so liegt die Genauigkeit bei 99,99 Prozent. Das Modell ist jedoch gänzlich unbrauchbar.
Es existieren unterschiedliche Ansätze, um diesem Problem entgegenzuwirken, wovon einige im Folgenden diskutiert werden.
Die beste Lösung dürfte es wohl sein, mehr Daten für eine Klasse zu finden. Doch Vorsicht: Einfach einen anderen Datensatz in den bestehenden integrieren ist keine gute Idee, da nicht garantiert werden kann, dass es sich tatsächlich um neue Bilder handelt. Die gleichen Bilder könnten beispielsweise auch anders benannt sein. Ist es das Ziel, solch eine Lösung anzugehen, muss also zunächst eine Überprüfung auf Bildgleichheit stattfinden.
Eine weitere Möglichkeit ist es, Bilder von den Klassen wegzunehmen, die überrepräsentiert sind. Das mindert den Datensatz deutlich und ist daher in diesem Fall auch keine sinnvolle Option.
Die dritte Option ist der Einsatz von Data Augmentation und damit dem Transformieren der Bilder. Hierzu zählen Operationen wie z. B. das Rotieren oder die Translation. Die resultierenden Bilder werden dann als neue Eingangsbilder abgespeichert. Dies hat zur Folge, dass die Anzahl der Bilder in unterrepräsentierte Klassen künstlich erhöht wird. Doch auch hier gilt es, sinnvoll vorzugehen: Wendet man die Augmentation-Techniken nur auf eine Klasse an, um die Anzahl der Bilder in dieser zu erhöhen, könnte ein ML-Modell bereits anhand der einseitigen Augmentation ein selbstproduziertes und ungewolltes Muster erkennen.
Die in diesem Projektverlauf gewählte Option für den unausgeglichen Datensatz ist es, die Klassengewichte beim Trainingsprozess anzupassen. Dies hat zur Folge, dass eine fehlerhafte Klassifikation der unterrepräsentierten Klasse höher im Trainingsprozess bestraft wird, als Fehler bei der höher repräsentierten Klasse.
Sofern die Analyse der Daten abgeschlossen ist, kann es an die Vorverarbeitung dieser gehen. Die Daten sollten, wenn möglich, manuell gesichtet und bereinigt werden. Im verwendeten COVID-19-Datensatz sind beispielsweise Röntgenbilder, welche die Lungenflügel nicht frontal zeigen. Auch finden sich im Datensatz einige CT-Bilder. Solche Bilder sind für das anstehende Training eines ML-Modells schädlich und müssen daher aussortiert werden.
Architektur und Training
Nachdem die Daten analysiert und bereinigt sind, kann es nun an das Training gehen. Im Rahmen dieses Projekts kam ein Mehrschichten-Ansatz zum Einsatz, der in Abb. 3 illustriert ist. Umgesetzt wurde das Projekt in Python mit Tensorflow v2.2 (inkl. Keras).
Folglich wird ein Eingangsbild in die erste Schicht (S1) gegeben. Das darin enthaltene ML-Modell entscheidet zwischen dem Vorhandensein einer Lungenentzündung (Pneumonie) und einem gesunden Patienten (Normal).
Die zweite Schicht unterscheidet im Falle einer Lungenentzündung dann zwischen viraler und bakterieller Infektion. Eine zukünftige dritte Schicht könnte möglicherweise zwischen COVID-19 und anderen viralen Ursachen unterscheiden. Aufgrund der noch geringen Menge an frei verfügbaren Bildern zum Zeitpunkt des Projekts fiel eine Entscheidung gegen die Realisierung dieser Schicht aus.
Anders als bei anderen ML-Problemstellungen, können die Bilddaten aufgrund ihrer Größe nicht alle in den RAM geladen werden. Glücklicherweise stellt Keras hierfür eine Lösung in Form eines Image Data Generators bereit. Mit diesem ist es möglich, die Daten batch-weise in den RAM während des Trainingsprozesses zu laden. Gleichzeitig kümmert sich dieser um das Herunterskalieren der Eingangsbilder auf eine uniforme Größe. In diesem Fall wurde eine Bildgröße von 256x256 Pixeln gewählt. Weiterhin können Augmentation-Techniken definiert werden, sodass die Eingangsbilder teilweise zufällig transformiert werden. Dies erhöht die Robustheit des ML-Modells und kann einer Überanpassung (englisch: Overfitting) auf die Trainingsdaten entgegenwirken.
Segmentierung der Lungenflügel
Die Entzündungen sind im Bereich der Lungenflügel lokalisiert. Oftmals besitzen Röntgenbilder nicht-pathologische Features, wie etwa Markierungen für rechts oder links (s. Abb. 4)
Um den Fokus in einem Training mehr auf die relevanten Bildbereiche zu lenken, ist die semantische Segmentierung der Lungenflügel ein möglicher Ansatz. Auch diese Segmentierung kann mittels eines neuronalen Netzes erlangt werden. In diesem Projekt wurde die Netzwerkarchitektur des U-Nets gewählt. Das U-Net [9] ist eine von der Uni Freiburg entwickelte Netzwerkstruktur, die insbesondere im Bereich der medizinischen Bilddaten erprobt ist.
Mithilfe der Bibliothek keras-unet [10] und dem Lung-Masks-Datensatz [11] erfolgt ein Training des Netzwerkes für die Segmentierung von Lungenflügeln. Das resultierende ML-Modell ist in der Lage, für ein Eingangsbild eine Maske der Lungenflügel anzufertigen (a. Abb. 5).
Nun bleibt die Frage zu klären, wie die Maskenerstellung sinnvoll in die bestehende Architektur integriert werden kann? Die Segmentierung liefert nicht immer ein ideales Ergebnis. Daher ist das bloße Trainieren auf den ausgestanzten Lungenflügeln nicht zielführend, da dies dazu führen könnte, dass wichtige Features ausgeschlossen werden, die bei einer Multiplikation mit der Maske verloren gehen. Aus diesem Grund wird der mittels der Maske ausgestanzte Bildausschnitt (Cut Out) als ein zusätzlicher Bildkanal in das ML-Modell gegeben. So gibt es nun neben dem Röntgenbild auch einen Kanal mit dem Cut Out in Grauwerten. Das Anfertigen des Cut Out mit drei Kanälen führte zu keinen besseren Ergebnissen in den Versuchen.
Die neue Segmentierungsschicht wird als Schicht 0 in das System eingehängt. Abb. 6 zeigt die neue Architektur.
Ergebnisse
Bei insgesamt 634 Testbildern (226 normal, 234 bakteriell, 174 viral) zeigte das Vorschalten der Segmentierung und das Integrieren des Cut Out in das ML-Modell deutliche Verbesserungen in der Klassifikation. Eine sinnvolle Metrik ist der F1-Score, welcher das harmonische Mittel zwischen Precision und Recall bildet. Er besitzt die Grenzwerte 0 (= Precision und Recall sind 0) und 1 (= perfekte Werte für Precision und Recall).
Im Test konnte der F1-Score für Schicht 2 im Falle "Normal" von 0.76 auf 0.84 und im Falle von "Pneumonie" von 0.89 auf 0.92 verbessert werden. Ein ähnlicher Trend zeigte sich in Schicht 3, wo die Klassifikation "bakteriell" von 0.84 auf 0.89 sowie "viral" von 0.80 auf 0.86 verbessert wurde. Auch konnten die falsch-negativen Fälle (FN-Fälle) in beiden Schichten (S1, S2) merklich reduziert werden. Die FN-Fälle sind Fälle, in denen das ML-Modell zum Beispiel eine Pneumonie deklariert hat, obwohl der Patient gesund ist. Gerade im Bereich der Medizin ist es wichtig, diese Fälle so gering wie möglich zu halten. Aus diesem Grund sollte gerade in einem medizinischen Kontext die beliebte Metrik der Genauigkeit (Accuracy) nicht als alleinige Metrik herangezogen werden, da FN-Fälle hierbei gleich gewichtet mit den falsch-positiven Fällen (FP-Fälle) gewichtet werden.
Wichtig für die Interpretation: Die aufgezeigten Ergebnisse stammen jeweils aus einem Lauf. Zwar zeigen mehrere Läufe eine ähnliche Tendenz, um endgültig belastbare Ergebnisse zu erhalten und damit eine Signifikanz festzustellen, sind allerdings weitere Techniken wie z. B. der Einsatz von Cross-Validierung notwendig.
Bereitstellung
Im Rahmen des Projekts wurde eine erste prototypische Webanwendung entwickelt, die das Analysieren von Röntgenbildern ermöglicht. Dabei werden die trainierten ML-Modelle der verschiedenen Schichten (S0, S1, S2) in Form von containerisierten Microservices über die Webanwendung angesteuert. Der gesamte Architektur-Stack ist in AWS lauffähig. Abb. 7 zeigt einen Screenshot der Webanwendung.
Limitationen und Übertragbarkeit der Methode
Gerade im KI-Bereich sind die Methode und das anwendende System nur so gut wie die Daten anhand derer es "gelernt" hat. Das hier vorgestellte KI-System kann eine Pneumonie ziemlich gut detektieren. Auch eine Unterscheidung zwischen viraler oder bakterieller Ursache ist möglich. Aufgrund der noch dünnen Datenlage rund um COVID-19 ist die Realisierung eines CNNs für die Unterscheidung zwischen COVID-19 und anderen viralen Ursachen nach unserer Ansicht noch nicht sinnvoll.
Generell ist die verwendete Datenmenge bei dem vorgestellten Prototypen eine Limitation, nicht aber das zugrunde liegende Prinzip – im Gegenteil – dieses kommt besser zum Tragen, wenn mehr Daten zugeführt werden. Zudem ist das Prinzip recht generalistisch. So ist es beispielsweise denkbar, die Segmentierung mit anschließender Klassifikation auch für andere Bereiche wie etwa zur Diagnose von bronchogenen oder anderen Karzinomen anzuwenden.
Zusammenfassung
In diesem Artikel wurde gezeigt, wie die Diagnose einer Pneumonie mithilfe eines KI-Systems unterstützt werden kann. Für die Verwendung der Röntgentechnologie spricht vor allem ein geringer Kostenfaktor, eine schnelle Erstellung der Bilder, sowie der geringere Dekontaminationsaufwand gegenüber CT. Zudem ist die Röntgentechnologie etabliert und damit ebenso in Entwicklungsländern verbreitet. Wichtig ist es zu verstehen, dass die Röntgenbilder immer nur eine Momentaufnahme darstellen. Demzufolge kann ein Patient trotz eines negativen Röntgenbildes infektiös sein. Es kann viele Faktoren geben, weshalb eine Entscheidung abweichend zu einem KI-System getroffen werden muss oder sollte. Daher ist ein Ansatz wie der hier vorgestellte als unterstützende Maßnahme zu sehen. Darüber hinaus sind vor einem tatsächlichen Einsatz weitere medizinische Studien nötig.
Unabhängig davon existiert ein großes Potenzial mithilfe von maschinellem Lernen die Diagnoseoptionen zu verbessern. Die Analyse der Röntgenbilder benötigt bereits im Prototyp nur wenige Sekunden, ein hoher Durchsatz wäre möglich, was insbesondere in Entwicklungsländern sinnvoll erscheint. Für weitere technische Details finden Sie das Projekt quelloffen auf Github.
- Johns Hopkins Coronavirus Resource Center, Q&A: How much does it cost to get a COVID-19 test? It depends. - Johns Hopkins Coronavirus Resource Center
- Radiological Society of North America and American, Pneumonia | Lung inflammation: Diagnosis, Evaluation and Treatment
- D. Prinz: Lungeninfiltrat - DocCheck Flexikon
- M.B. Weinstock, A. Echenique, J. W. Russell, et al.: Chest X-Ray Findings in 636 Ambulatory Patients with COVID-19 Presenting to an Urgent Care Center: A Normal Chest X-Ray Is no Guarantee
- Z. Brady et al.: Technique, radiation safety and image quality for chest X-ray imaging through glass and in mobile settings during the COVID-19 pandemic, Physical and Engineering Sciences in Medicine, Jg. 43, Nr. 3, S. 765–779, 2020, doi: 10.1007/s13246-020-00899-8.
- P. Mooney: Chest X-Ray Images
- Dr. A. Manrique Gil: COVID-19 pneumonia - rapidly progressive | Radiology Case
- P. C. Joseph, M. Paul und D. Lan: COVID-19 image data collection
- O. Ronneberger, P. Fischer und T. Brox: U-Net: Convolutional Networks for Biomedical Image Segmentation, in Lecture Notes in Computer Science, Bd. 9351, Medical image computing and computer-assisted intervention - MICCAI 2015: 18th international conference, Munich, Germany, October 5-9, 2015 : proceedings, part III, N. Navab, J. Hornegger, W. M. Wells und A. F. Frangi, Hg., Cham, Heidelberg, New York, Dordrecht, London: Springer, 2015, S. 234–241, doi: 10.1007/978-3-319-24574-4_28.
- K. Żak: karolzak/keras-unet
- yoctoman: Lung Masks for Shenzhen Hospital Chest X-ray Set