Dyp Læring For Å Oppdage Lungebetennelse fra Røntgenbilder
en ende til ende rørledning for lungebetennelse deteksjon fra Røntgenbilder
stakk bak Paywall? Klikk her for å lese hele historien med Min Venn Link!risikoen for lungebetennelse er enorm for mange, spesielt i utviklingsland hvor milliarder står overfor energifattigdom og stole på forurensende former for energi. WHO anslår at over 4 millioner for tidlige dødsfall oppstår årlig fra husholdningenes luftforurensningsrelaterte sykdommer, inkludert lungebetennelse. Over 150 millioner mennesker blir smittet med lungebetennelse på årlig basis, spesielt barn under 5 år. I slike regioner kan problemet forverres ytterligere på grunn av mangel på medisinske ressurser og personell. I Afrikas 57 land er det et gap på 2,3 millioner leger og sykepleiere. For disse populasjonene betyr nøyaktig og rask diagnose alt. Det kan garantere rettidig tilgang til behandling og spare mye nødvendig tid og penger for de som allerede opplever fattigdom.
dette prosjektet er en del Av Brystet X-Ray Bilder (Lungebetennelse) holdt På Kaggle.Bygge en algoritme for å automatisk identifisere om en pasient lider av lungebetennelse eller ikke ved å se på brystet X-ray bilder. Algoritmen måtte være ekstremt nøyaktig fordi menneskers liv står på spill.
miljø og verktøy
- scikit-lær
- keras
- numpy
- pandas
- matplotlib
data
datasettet kan lastes ned fra kaggle nettsiden som du finner her.
Hvor er koden?
Uten mye ado, la oss komme i gang med koden. Det komplette prosjektet på github finner du her.
La oss starte med å laste inn alle biblioteker og avhengigheter.
neste jeg viste noen normale og lungebetennelse bilder å bare ta en titt på hvor mye forskjellig de ser fra det blotte øye. Vel ikke mye!
så deler jeg datasettet i tre sett-tog—, validerings-og testsett.
neste skrev jeg en funksjon der jeg gjorde noen dataforstørrelse, matet trening og test sett bilder til nettverket. Jeg har også laget etiketter for bildene.
utøvelsen av dataforstørrelse er en effektiv måte å øke størrelsen på treningssettet på. Ved å øke treningseksemplene kan nettverket «se» mer varierte, men likevel representative datapunkter under treningen.
da definerte jeg et par datageneratorer: en for treningsdata, og den andre for valideringsdata. En datagenerator er i stand til å laste inn den nødvendige mengden data (en mini-gruppe bilder) direkte fra kildemappen, konvertere dem til treningsdata (matet til modellen) og treningsmål (en vektor av attributter — tilsynssignalet).
for mine eksperimenter setter jeg vanligvis
batch_size = 64
. Generelt bør en verdi mellom 32 og 128 fungere godt. Vanligvis bør du øke / redusere batchstørrelsen i henhold til beregningsressurser og modellens forestillinger.
etter det definerte jeg noen konstanter for senere bruk.
det neste trinnet var å bygge modellen. Dette kan beskrives i følgende 5 trinn.
- jeg brukte fem convolutional blokker består av convolutional lag, max-pooling og batch-normalisering.
- på toppen av det brukte jeg et flatt lag og fulgte det med fire fullt tilkoblede lag.
- Også i mellom har jeg brukt dropouts for å redusere overmontering.
- Aktiveringsfunksjonen Var Relu hele bortsett fra det siste laget Der Det Var Sigmoid, da dette er et binært klassifiseringsproblem.
- Jeg har brukt Adam som optimizer og cross-entropi som tap.
før trening modellen er nyttig å definere en eller flere tilbakeringinger. Ganske praktisk en, er: ModelCheckpoint
og EarlyStopping
.
- ModelCheckpoint: når trening krever mye tid for å oppnå et godt resultat, er det ofte mange iterasjoner som kreves. I dette tilfellet er det bedre å lagre en kopi av den best presterende modellen bare når en epoke som forbedrer beregningene slutter.
- Tidligstopping: noen ganger, under trening kan vi legge merke til at generaliseringsgapet (dvs. forskjellen mellom trening og valideringsfeil) begynner å øke, i stedet for å redusere. Dette er et symptom på overfitting som kan løses på mange måter (redusere modellkapasitet, øke treningsdata, data augumentation, regularization, dropout, etc). Ofte er en praktisk og effektiv løsning å slutte å trene når generaliseringsgapet blir verre.
neste jeg trente modellen for 10 epoker med en batch størrelse på 32. Vær oppmerksom på at vanligvis en høyere batchstørrelse gir bedre resultater, men på bekostning av høyere beregningsbyrde. Noen undersøkelser hevder også at det er en optimal batchstørrelse for best resultat som kan bli funnet ved å investere litt tid på hyper-parameter tuning.
la oss visualisere tomtene for tap og nøyaktighet.
så langt så bra. Modellen er konvergerende som kan observeres fra nedgangen i tap og valideringstap med epoker. Det er også i stand til å nå 90% valideringsnøyaktighet på bare 10 epoker.La oss plotte forvirringsmatrisen og få noen av de andre resultatene også som presisjon, tilbakekalling, F1-poengsum og nøyaktighet.
CONFUSION MATRIX ------------------
]
TEST METRICS ----------------------
Accuracy: 91.02564102564102%
Precision: 89.76190476190476%
Recall: 96.66666666666667%
F1-score: 93.08641975308642
TRAIN METRIC ----------------------
Train acc: 94.23
modellen kan oppnå en nøyaktighet på 91,02%, noe som er ganske bra med tanke på størrelsen på dataene som brukes.
Konklusjoner
selv om dette prosjektet er langt fra komplett, men det er bemerkelsesverdig å se suksessen til dyp læring i slike varierte virkelige problemer. Jeg har vist hvordan å klassifisere positive og negative lungebetennelse data fra en samling Av Røntgenbilder. Modellen ble laget fra bunnen av, som skiller den fra andre metoder som er avhengige av overføring læring tilnærming. I fremtiden kan dette arbeidet utvides til å oppdage Og klassifisere Røntgenbilder som består av lungekreft og lungebetennelse. Å skille Røntgenbilder som inneholder lungekreft og lungebetennelse har vært et stort problem i nyere tid, og vår neste tilnærming bør være å takle dette problemet.