głębokie uczenie do wykrywania zapalenia płuc ze zdjęć rentgenowskich

utknął za paywall? Kliknij tutaj, aby przeczytać całą historię z moim przyjacielem Link!

ryzyko zapalenia płuc jest ogromne dla wielu, szczególnie w krajach rozwijających się, gdzie miliardy borykają się z ubóstwem energetycznym i polegają na zanieczyszczających formach energii. WHO szacuje, że ponad 4 milionów przedwczesnych zgonów występuje rocznie z powodu chorób związanych z zanieczyszczeniem powietrza w gospodarstwach domowych, w tym zapalenia płuc. Ponad 150 milionów ludzi zaraża się zapaleniem płuc rocznie, zwłaszcza dzieci poniżej 5 roku życia. W takich regionach problem może być jeszcze bardziej pogłębiony ze względu na brak zasobów medycznych i personelu. Na przykład w 57 krajach Afryki istnieje luka 2,3 miliona lekarzy i pielęgniarek. Dla tych populacji dokładna i szybka diagnoza oznacza wszystko. Może zagwarantować szybki dostęp do leczenia i zaoszczędzić bardzo potrzebny czas i pieniądze osobom, które już doświadczają ubóstwa.

Ten projekt jest częścią zdjęć rentgenowskich klatki piersiowej (zapalenie płuc) wykonanych na Kaggle.

Zbuduj algorytm, aby automatycznie zidentyfikować, czy pacjent cierpi na zapalenie płuc, czy nie, oglądając zdjęcia rentgenowskie klatki piersiowej. Algorytm musiał być niezwykle dokładny, ponieważ stawką jest życie ludzi.

środowisko i narzędzia

  1. scikit-learn
  2. keras
  3. numpy
  4. pandy
  5. matplotlib

dane

zbiór danych można pobrać ze strony Kaggle, którą można znaleźć tutaj.

gdzie jest kod?

bez zbędnych ceregieli, zacznijmy od kodu. Kompletny projekt na GitHubie można znaleźć tutaj.

zacznijmy od załadowania wszystkich bibliotek i zależności.

następnie wyświetliłem kilka normalnych zdjęć, aby zobaczyć, jak bardzo różnią się one gołym okiem. Cóż, niewiele!

przykładowe zdjęcia

następnie dzielę zestaw danych na trzy zestawy-Train, validation i test sets.

następnie napisałem funkcję, w której zrobiłem augmentację danych, wysłałem obrazy zestawów treningowych i testowych do sieci. Stworzyłem również etykiety dla obrazów.

praktyka augmentacji danych jest skutecznym sposobem na zwiększenie rozmiaru zestawu treningowego. Poszerzenie przykładów szkoleniowych pozwala Sieci na „zobaczenie” bardziej zróżnicowanych, ale wciąż reprezentatywnych punktów danych podczas szkolenia.

następnie zdefiniowałem kilka generatorów danych: jeden dla danych treningowych, a drugi dla danych walidacyjnych. Generator danych jest w stanie załadować wymaganą ilość danych (mini partia obrazów) bezpośrednio z folderu źródłowego, przekonwertować je na dane treningowe (przekazywane do modelu) i cele treningowe (wektor atrybutów — sygnał nadzoru).

dla moich eksperymentów Zwykle ustawiambatch_size = 64. Na ogół wartość między 32 A 128 powinna działać dobrze. Zazwyczaj należy zwiększyć / zmniejszyć rozmiar partii w zależności od zasobów obliczeniowych i wydajności modelu.

następnie zdefiniowałem pewne stałe do późniejszego użycia.

kolejnym krokiem było zbudowanie modelu. Można to opisać w następujących 5 krokach.

  1. użyłem pięciu bloków splotowych składających się z warstwy splotowej, Max-poolingu i normalizacji wsadowej.
  2. na wierzchu użyłem spłaszczonej Warstwy, a następnie czterech w pełni połączonych warstw.
  3. również w międzyczasie użyłem dropoutów, aby zmniejszyć przepasowanie.
  4. funkcja aktywacji była Relu w całej warstwie, z wyjątkiem ostatniej warstwy, gdzie była sigmoidalna, ponieważ jest to problem z klasyfikacją binarną.
  5. użyłem Adama jako optymalizatora i entropii Krzyżowej jako straty.

przed treningiem model jest przydatny do zdefiniowania jednego lub więcej wywołań zwrotnych. Bardzo przydatne, są: ModelCheckpoint I EarlyStopping.

  • ModelCheckpoint: gdy szkolenie wymaga dużo czasu, aby osiągnąć dobry wynik, często wymagane jest wiele iteracji. W takim przypadku lepiej jest zapisać kopię najlepiej działającego modelu tylko wtedy, gdy kończy się epoka, która poprawia metrykę.
  • EarlyStopping: czasami podczas treningu możemy zauważyć, że luka uogólniająca (tj. różnica między treningiem a błędem walidacji) zaczyna się zwiększać, a nie zmniejszać. Jest to objaw przepełnienia, który można rozwiązać na wiele sposobów (zmniejszenie pojemności modelu, zwiększenie danych treningowych, augumentacja danych, regularyzacja, porzucenie itp.). Często praktycznym i skutecznym rozwiązaniem jest przerwanie treningu, gdy luka uogólniająca się pogarsza.

wczesne zatrzymanie

następnie wyszkoliłem model na 10 epok z wielkością partii 32. Należy pamiętać, że zwykle większy rozmiar partii daje lepsze wyniki, ale kosztem większego obciążenia obliczeniowego. Niektóre badania twierdzą również, że istnieje optymalny rozmiar partii dla najlepszych wyników, które można znaleźć, inwestując trochę czasu na strojenie hiper-parametrów.

wizualizujmy wykresy strat i dokładności.

dokładność vs Epoka | strata vs Epoka

jak na razie dobrze. Model jest zbieżny, co można zaobserwować ze spadku strat i strat walidacyjnych z epokami. Jest również w stanie osiągnąć 90% dokładność walidacji w zaledwie 10 epokach.

narysujmy macierz zamieszania i uzyskajmy Inne wyniki, takie jak precyzja, przypomnienie, wynik F1 i dokładność.

CONFUSION MATRIX ------------------

]
TEST METRICS ----------------------
Accuracy: 91.02564102564102%
Precision: 89.76190476190476%
Recall: 96.66666666666667%
F1-score: 93.08641975308642
TRAIN METRIC ----------------------
Train acc: 94.23

model jest w stanie osiągnąć dokładność 91.02%, co jest dość dobre, biorąc pod uwagę rozmiar używanych danych.

wnioski

chociaż ten projekt jest daleki od zakończenia, ale to niezwykłe, aby zobaczyć sukces głębokiego uczenia się w tak różnorodnych rzeczywistych problemach. Zademonstrowałem, jak klasyfikować pozytywne i negatywne dane dotyczące zapalenia płuc z kolekcji zdjęć rentgenowskich. Model został wykonany od podstaw, co odróżnia go od innych metod, które w dużym stopniu opierają się na podejściu do uczenia transferowego. W przyszłości praca ta może zostać rozszerzona o wykrywanie i klasyfikację obrazów rentgenowskich obejmujących raka płuc i zapalenie płuc. Rozróżnianie obrazów rentgenowskich zawierających raka płuc i zapalenie płuc było w ostatnim czasie dużym problemem, a naszym następnym podejściem powinno być rozwiązanie tego problemu.



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.