Kā noteikt koronavīrusu, izmantojot dziļo mācīšanos

Automātiski noteikt Covid-19 rentgena attēlos, izmantojot Python un dziļās mācīšanās metodes

Fusion Medical Animation foto vietnē Unsplash

Mūsdienās mēs visi zinām par Covid-19, kas labāk pazīstams kā koronavīruss, esamību.

Tā ir infekcijas slimība, ko izraisa smags akūts elpošanas sindroms koronavīruss 2 (SARS-CoV-2). Slimība pirmo reizi tika identificēta 2019. gadā Uhanā, Ķīnā, un kopš tā laika ir izplatījusies visā pasaulē, izraisot koronavīrusa pandēmiju 2019. – 2020. Bieži sastopami simptomi ir drudzis, klepus un elpas trūkums (Wikipedia).

Bet šodien mēs nerunāsim par pašu slimību. Drīzāk mēs redzēsim, kā Python izveidot dziļu mācību modeli, izmantojot TensorFlow, Keras un OpenCV, kas tiek klasificēti Covid-19 pozitīvā vai Covid-19 negatīvā krūšu kurvja rentgena attēlos.

Pirms mēs sākam, es gribēju pieminēt, ka šis nav zinātniski precīzs pētījums. Tas ir tikai veids, kā praktiski izskaidrot dziļas mācības, izmantojot reālās pasaules problēmas.

Tomēr mēs varam izveidot attīstības vidi, kuru izmantosim šim projektam.

Iestatiet attīstības vidi

DL foto vietnē Unsplash

Virtuālā vide ir rīks, kas palīdz saglabāt dažādu projektu nepieciešamās atkarības atsevišķi, izveidojot tiem izolētas Python virtuālās vides. Tas nozīmē, ka katram projektam var būt savas atkarības neatkarīgi no tā, kādas atkarības ir katram citam projektam.

Python, lai izveidotu virtuālo vidi, mēs izmantojam paketi virtualenv.

Instalējiet Pyua saiti virtuualenv:

pip instalēt virtualenv

Tad mēs izveidojam vidi ar šādu komandu:

virtuualenv projekts

Tādējādi tiks izveidota projekta mape. Tad mēs aktivizējam virtuālo vidi:

UNIX (Mac un Linux): avota projekts / bin / aktivizēt

Operētājsistēmā Windows: projekts \ env \ skripti \ aktivizēt.Bat

Mēs instalējām un uzstādījām izstrādes vidi, un tagad mums jāinstalē pakotnes, kuras mēs izmantosim šīs apmācības laikā:

  • TensorFlow (tas var aizņemt dažas minūtes): instalējiet tensorflow
  • scikit-Learn: instalējiet sklearn
  • Imutils: instalējiet imutils
  • Matplotlib: instalējiet matplotlib
  • OpenCV: instalējiet OpenCV-python

Pēc visu šo pakotņu instalēšanas esat gatavs pāriet pie nākamās darbības.

Ko mēs gatavojamies darīt apmācībā

Kā jau teicu nosaukumā, mēs izveidosim CNN, kas rentgenstaru attēlos nosaka šo koronavīrusu.

Raksts ir strukturēts šādi:

  • Lejupielādējiet datu kopu
  • Izveidojiet konvolūcijas neironu tīklu, lai automātiski noteiktu Covid-19 rentgena attēlos
  • Modeļa ierobežojumi
  • Secinājums

Datu kopa

Covid-19 rentgena attēlu datu kopu, kuru mēs izmantosim šai apmācībai, kurators bija Monreālas universitātes pēcdoktorantūras doktors Džozefs Koens.

Datu kopu var lejupielādēt no Dropbox.

Kad esat lejupielādējis zip failu, atspiest to. Lejupielāžu mapē būtu jāredz mape / datu kopa. Pārvietojiet to direktorijā, kuru izmantosit šī projekta laikā.

Piemēram, lūk, kā tiek iestatīts mans direktorijs:

Mana projekta mape

Datu kopas uzbūve

Kā redzat iepriekšējā attēlā, mūsu datu kopa ir sadalīta divās mapēs: / covid un / normal. / Covid direktorijā ir 25 Covid-pozitīvu lādes rentgenstaru attēli, savukārt / normal mapē ir 25 Covid-negatīvu lādes rentgena attēli.

CNN modelis

Pēc tam, kad esam redzējuši, kā mūsu datu kopa ir strukturēta, mēs varam sākt veidot savu CNN skriptu.

Imports un argumenti

Izveidojiet failu train_covid19.py un ielīmējiet šo kodu:

Mēs izveidosim skriptu, izmantojot TensorFlow, Keras, scikit-learning un OpenCV bibliotēkas.

Mēs izmantosim:

  • TensorFlow un Keras strādā ar visu, kas attiecas uz mūsu CNN (konvolucionālais neironu tīkls)
  • scikit - iemācieties strādāt ar datu priekšapstrādi un modeļa novērtēšanu
  • OpenCV, lai ielādētu un apstrādātu attēlus
  • Matplotlib, lai attēlotu modeļa rezultātus

Pēc nepieciešamo moduļu importēšanas mēs parsējam komandrindas argumentus un inicializējam hiperparametrus (parametrus, kas tiks izmantoti CNN izveidošanai):

2. – 9. Līnija definēja mūsu komandrindas argumentus:

  • –Datne ir datu kopas ceļš.
  • –Plots ir izvēles ceļš uz izvades apmācības vēstures diagrammu. Noklusējums ir plot.png.
  • –Modelis ir izvēles ceļš uz mūsu produkcijas Covid-19 modeli; pēc noklusējuma tas tiks nosaukts covid19.model.

Līnijās 13–15 ir noteikts sākotnējais mācīšanās ātrums, apmācības laikposmu skaits un partijas lielums.

Datu ielāde un apstrāde

Mēs tagad esam gatavi ielādēt un priekšapstrādāt savus rentgena datus:

Lai ielādētu mūsu datus, mēs satveram visus ceļus uz attēliem datu kopas direktorijā (3. rinda). Tad katram imagePath mēs:

  • Izņemiet klases etiķeti (Covid vai parasto) no ceļa (11. rinda).
  • Ielādējiet attēlu, apstrādājiet to, pārveidojot par RGB kanālu pasūtīšanu, un mainiet tā izmēru uz 224 × 224 pikseļiem, lai tas būtu gatavs mūsu konvolūcijas neironu tīklam (15. – 17. Rinda).
  • Atjauniniet attiecīgi mūsu datus un etiķešu sarakstus (20. un 21. rinda).

25. – 27. Līnija: pārveidojiet datus un etiķetes NumPy masīvos.

Tagad mēs varam kodēt mūsu etiķetes ar vienu karstu kodējumu (2. – 4. Līnija) un sadalīt datu kopu vilcienā un pārbaudīt:

Vienkāršs kodējums nozīmē, ka mūsu dati tiks parādīti šādā formātā:

[[0. 1.] [0. 1.] [0. 1.]… [1. 0.] [1. 0.] [1. 0.]]

Katra kodētā etiķete sastāv no divu elementu masīva, kur viens no elementiem ir “karsts” (1) vai “nav” (0). Mēs to izmantojam pēc nepieciešamības, lai klasificētu pozitīvos vai negatīvos gadījumus; tas ir, mēs veicam bināro klasifikāciju.

9. rindā testa lielums 0,20 nozīmē, ka mēs sadalām datu kopu, 20% no tā rezervējot testēšanai, bet atlikušos 80% - apmācībai.

Pēc tam 12. – 14. Rindā mēs veicam datu palielināšanu - datu priekšapstrādes paņēmienu, kas uzlabo mūsu modeļa klasifikācijas spēju.

Veidojiet modeli

Pēc visu datu apstrādes mēs varam inicializēt savu modeli. Mēs izmantosim VGG16 modeli.

2. – 3. Līnija realizē VGG16 tīklu ar svariem, kas iepriekš apmācīti ImageNet.

6. – 11. Rindā mēs konstruējam galvas slāņus, un 14. rindā mēs tos pievienojam modelim.

17–18. Rindā mēs iesaldējam katru modeļa slāni, tāpēc tie netiks atjaunināti pirmā apmācības procesa laikā.

Apmāciet CNN

Mēs tagad esam gatavi apkopot un apmācīt mūsu Covid-19 (koronavīrusa) dziļas mācīšanās modeli:

3. – 4. Līnija: Šeit mēs apkopojam CNN ar Adam optimizētāju. Ņemot vērā, ka šī ir divu klašu problēma, mēs izmantojam bināro_krosentropijas zaudējumu, nevis kategorisku krosentropiju.

9–14. Līnija: Mēs piezvanām uz Keras metodi fit_generator, vienlaikus ievadot krūšu kurvja rentgena datus caur mūsu datu palielināšanas objektu.

Novērtējiet modeli

Pēc modeļa apmācības mēs to novērtējam:

3. – 6. Līnija: mēs veicam prognozes uz testēšanas kopu un satveram prognožu indeksus.

9. – 10. Līnija: Šeit mēs ģenerējam un izdrukājam klasifikācijas pārskatu, izmantojot scikit-Learn palīgu.

Tālāk mēs aprēķinām sajaukšanas matricu turpmākai statistiskai novērtēšanai:

2. rinda: ģenerējiet neskaidrības matricu.

4. – 6. Līnija: izmantojiet sajaukšanas matricu, lai iegūtu precizitāti, jutīgumu un specifiskumu, un izdrukātu tos (9. – 12. Līnija).

Vēstures apmācības paraugs un modeļa serializācija

Mēs vismaz esam pabeiguši mūsu koronavīrusu (Covid-19) detektoru CNN. Bet mēs vēlamies arī redzēt detektora apmācības vēsturi un beigās saglabāt modeli failā.

2. – 12. Līnija: uzzīmējiet modeļa apmācības precizitāti / zaudējumu.

13. rinda: saglabājiet parauglaukumu plot.png attēlā, kuru mēs definējām mūsu args.

16. – 17. Līnija: modelis tika saglabāts .model failā.

Gatavs!

Šeit ir pilns vilciena_covid19.py kods:

Foto Kristians Bolts vietnē Unsplash

Pārbaude

Tagad mēs pārbaudām savu CNN. Bet pirms tam mēs nedaudz atgādinām par paveikto:

  1. Izveidoja virtuālo vidi un instalēja TensorFlow, scikit-learning, Imutils, Matplotlib un OpenCV
  2. Lejupielādēja datu kopu un runāja par tā struktūru
  3. Izveidots vilciens_covid19.py
  4. Importēja nepieciešamos moduļus
  5. Datu kopa tika ielādēta un apstrādāta
  6. Veidojiet modeli un tā slāņus
  7. Apmācīja to un saglabāja tā precizitāti
  8. Modeļa precizitātes / zaudējumu vēsture tika attēlota plot.png attēlā
  9. Saglabāja modeli failā covid19.model

Tagad apskatīsim mūsu projekta mapi:

Kā redzat, fails vilciens_covid19.py, kuru mēs izveidojām iepriekš, atrodas tajā pašā mapē / datu kopums. Tas ir galvenais punkts, jo skripts mapē / covid-19_x_rays_detect meklē datu kopas mapi.

Kad jūsu direktorijs ir iestatīts, kā redzams iepriekš, mēs varam izpildīt failu train_covid19.py:

python3 train_covid19.py - datu kopas dati

Tas prasīs dažas minūtes, jo darbs ar attēliem skaitļošanas ziņā ir dārgāks. Beigās jūsu izvadei vajadzētu būt šādai:

Šeit vilciens_covid19.py:

  1. Nolasiet un apstrādājiet datu kopu
  2. Lejupielādēja VGG16 modeļa svarus
  3. Apmācīja modeli 25 laikmetiem
  4. Novērtēja CNN sniegumu
  5. Izdrukāja to

Tagad, vērojot direktoriju, jums vajadzētu redzēt jaunu failu plot.png:

Izlasot modeļa apmācības vēsturi, mēs varam iegūt šādus datus:

  • Modelis nav pārmērīgi vai nepietiekami aprīkots. Tas nozīmē, ka apmācībai un testēšanai tas darbojās vienādi.
  • Tā zaudējumi samazinās, palielinoties laikmetam.

Modeļa ierobežojumi

Ludovic Charlet foto vietnē Unsplash

Mēs izveidojām jauku un perfekti aprīkotu konvolūcijas neironu tīklu, kas nosaka Covid-19. No otras puses, mūsu CNN nav ļoti precīzs; tam ir 80% precizitāte, bet kāpēc?

  • Varbūt ir kāds labāks šāda veida klasifikācijas modelis.
  • Datu kopa ir ļoti, bet ļoti maza. Diemžēl neatradu nevienu citu Covid-19 pozitīvu krūšu kurvja rentgenstaru.
  • Attēlus ir grūti klasificēt, it īpaši tiem, kas nav medicīnas eksperti.
  • Modelis ņem vērā tikai attēlus, nevis to, kur esat bijis pēdējās nedēļās, vai kaut ko tamlīdzīgu.

Secinājums

Es ļoti ceru, ka šī raksta galvenā mērķa sasniegšana ir bijusi praktiska - iemācīt padziļinātas mācības. Faktiski, lasot manu iepriekšējo rakstu par sentimenta analīzi ar Python vai gaidot, kad es publicēšu citus rakstus, jūs atklāsit, ka mans galvenais nodoms ir izskaidrot sarežģītas tēmas praktiskā un pārdomātā veidā, kas ļauj jums atrisināt reālu -pasaules problēmas.