Syväoppiminen keuhkokuumeen toteamiseksi röntgenkuvista

jumissa paywallin takana? Klikkaa tästä lukeaksesi koko jutun ystäväni Linkin kanssa!

keuhkokuumeen riski on valtava monille, erityisesti kehitysmaissa, joissa miljardit kärsivät energiaköyhyydestä ja ovat riippuvaisia saastuttavista energiamuodoista. WHO: n arvion mukaan kotitalouksien ilmansaasteisiin liittyviin sairauksiin, kuten keuhkokuumeeseen, kuolee vuosittain yli 4 miljoonaa ennenaikaista ihmistä. Yli 150 miljoonaa ihmistä saa vuosittain keuhkokuumeen, erityisesti alle 5-vuotiaat lapset. Tällaisilla alueilla ongelma voi pahentua entisestään, koska lääkintäresurssit ja henkilöstö ovat vähissä. Esimerkiksi Afrikan 57 maassa on 2,3 miljoonan lääkärin ja sairaanhoitajan aukko. Näille populaatioille tarkka ja nopea diagnoosi merkitsee kaikkea. Se voi taata ajoissa hoitoon pääsyn ja säästää paljon aikaa ja rahaa niille, jotka jo kärsivät köyhyydestä.

Tämä projekti on osa Kagglella otettuja Keuhkoröntgenkuvia (keuhkokuume).

Rakenna algoritmi, joka tunnistaa automaattisesti, sairastaako potilas keuhkokuumetta vai ei, katsomalla rintakehän röntgenkuvia. Algoritmin piti olla äärimmäisen tarkka, koska ihmisten elämät ovat vaakalaudalla.

ympäristö ja työkalut

  1. skikit-opi
  2. keras
  3. numpy

  4. pandas
  5. atplotlib

tiedot

aineisto on ladattavissa kagglen verkkosivuilta, jotka löytyvät täältä.

missä on koodi?

ilman suurempia puheita, aloitetaan koodin kanssa. Koko projekti GitHubista löytyy täältä.

aloitetaan lataamalla kaikki kirjastot ja riippuvuudet.

seuraavaksi näytin normaaleja ja keuhkokuumeisia kuvia vain nähdäkseni, kuinka paljon erilaisilta ne näyttävät paljaalta silmältä. No ei paljoa!

otoskuvat

sitten Jaan tietojoukon kolmeen sarjaan-juna—, validointi-ja testijoukkoihin.

seuraavaksi kirjoitin funktion, jossa tein jonkin verran tiedonsuurennusta, syötin treeni-ja testisarjan kuvat verkkoon. Loin kuviin myös etiketit.

tietojen lisääminen on tehokas tapa kasvattaa koulutussarjan kokoa. Koulutusesimerkkien lisääminen antaa verkostolle mahdollisuuden” nähdä ” monipuolisempia, mutta silti edustavampia datapisteitä koulutuksen aikana.

sen jälkeen määrittelin pari datageneraattoria: yhden koulutustietoihin ja toisen validointitietoihin. Datageneraattori pystyy lataamaan tarvittavan määrän dataa (mini erä kuvia) suoraan lähdekansiosta, muuntaa ne koulutustietoihin (syötetään malliin) ja koulutuskohteisiin (attribuuttien vektori — valvontasignaali).

kokeilleni asetan yleensä batch_size = 64. Yleensä arvo välillä 32 ja 128 pitäisi toimia hyvin. Yleensä sinun pitäisi lisätä/pienentää erän kokoa laskennallisten resurssien ja mallin suorituskyvyn mukaan.

tämän jälkeen määrittelin joitakin vakioita myöhempää käyttöä varten.

seuraava vaihe oli mallin rakentaminen. Tämä voidaan kuvata seuraavat 5 vaiheet.

  1. käytin viittä convolutionaalista lohkoa, jotka koostuivat convolutionaalisesta kerroksesta, max-poolingista ja erä-normalisoinnista.
  2. sen päällä käytin tasaista kerrosta ja sen jälkeen neljä täysin yhdistettyä kerrosta.
  3. myös välillä olen käyttänyt keskeyttämisiä vähentääkseni ylisovitusta.
  4. Aktivointifunktio oli Relu koko ajan lukuun ottamatta viimeistä kerrosta, jossa se oli sigmoidi, koska kyseessä on binäärinen luokitteluongelma.
  5. olen käyttänyt Adamia optimoijana ja risti-entropiaa tappiona.

ennen koulutusta malli on hyödyllinen määriteltäessä yksi tai useampi takaisinkutsu. Pretty handy one, ovat: ModelCheckpoint ja EarlyStopping.

  • ModelCheckpoint: kun harjoittelu vaatii paljon aikaa hyvän tuloksen saavuttamiseksi, tarvitaan usein monta toistoa. Tässä tapauksessa on parempi tallentaa kopio parhaiten suoriutuvasta mallista vasta, kun mittareita parantava aikakausi päättyy.
  • EarlyStopping: joskus harjoittelun aikana huomaamme, että yleistysero (eli koulutus-ja validointivirheen ero) alkaa kasvaa sen sijaan, että se vähenisi. Tämä on ylikuntoutumisen oire, joka voidaan ratkaista monella tavalla (mallikapasiteetin vähentäminen, harjoitustietojen lisääminen, tietojen lisääminen, Regularisointi, keskeyttäminen jne.). Usein käytännöllinen ja tehokas ratkaisu on lopettaa harjoittelu, kun yleistysero pahenee.

varhainen lopettaminen

seuraavaksi koulutin mallia 10 aikakautta, joiden eräkoko oli 32. Huomaa, että yleensä suurempi erän koko antaa parempia tuloksia, mutta kustannuksella suurempi laskennallinen taakka. Jotkut tutkimukset väittävät myös, että on optimaalinen erän koko parhaat tulokset, jotka voitaisiin löytää investoimalla jonkin aikaa hyper-parametri tuning.

visualisoidaan häviö-ja tarkkuusalot.

tarkkuus vs EPOCH | loss vs EPOCH

toistaiseksi niin hyvä. Malli on konvergoiva, mikä voidaan havaita häviön ja validointihäviön vähenemisestä aikakausina. Lisäksi se pystyy saavuttamaan 90% validointitarkkuuden vain 10 aikakautta.

piirretään sekaannusmatriisi ja saadaan myös muita tuloksia, kuten tarkkuus, takaisinkutsu, F1-pisteet ja tarkkuus.

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

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

malli pystyy saavuttamaan 91,02 prosentin tarkkuuden, mikä on melko hyvä ottaen huomioon käytetyn datan koon.

johtopäätökset

vaikka tämä hanke on kaikkea muuta kuin valmis, on huomattavaa, että syväoppiminen on onnistunut näin erilaisissa reaalimaailman ongelmissa. Olen osoittanut, miten luokitella positiivinen ja negatiivinen keuhkokuume tiedot kokoelma röntgenkuvia. Malli tehtiin tyhjästä, mikä erottaa sen muista menetelmistä, jotka nojaavat vahvasti siirtokoulutukseen. Tulevaisuudessa tätä työtä voitaisiin laajentaa keuhkosyövän ja keuhkokuumeen muodostavien röntgenkuvien havaitsemiseksi ja luokittelemiseksi. Keuhkosyöpää ja keuhkokuumetta sisältävien röntgenkuvien erottaminen toisistaan on ollut viime aikoina suuri ongelma, ja seuraava lähestymistapamme pitäisi olla ongelman ratkaiseminen.



Vastaa

Sähköpostiosoitettasi ei julkaista.