Πώς να ανιχνεύσετε Coronavirus Χρησιμοποιώντας Deep Learning

Αυτόματη ανίχνευση του Covid-19 σε εικόνες ακτίνων Χ χρησιμοποιώντας τεχνικές Python και βαθιά μάθηση

Φωτογραφία από τη Fusion Medical Animation στο Unsplash

Σήμερα, όλοι γνωρίζουμε την ύπαρξη του Covid-19, γνωστότερο ως κορωναϊό.

Πρόκειται για μια λοιμώδη νόσο που προκαλείται από το σοβαρό οξύ σύνδρομο του αναπνευστικού συνδρόμου 2 (SARS-CoV-2). Η ασθένεια εντοπίστηκε για πρώτη φορά το 2019 στο Wuhan της Κίνας και από τότε εξαπλώθηκε παγκοσμίως, με αποτέλεσμα την πανδημία των κορωναϊών 2019-20. Συχνά συμπτώματα περιλαμβάνουν πυρετό, βήχα και δύσπνοια (Wikipedia).

Αλλά σήμερα, δεν θα μιλήσουμε για την ίδια την ασθένεια. Αντίθετα, θα δούμε πώς μπορούμε να δημιουργήσουμε ένα μοντέλο βαθιάς μάθησης στη Python χρησιμοποιώντας TensorFlow, Keras και OpenCV που ταξινομούνται σε Covid-19 θετικές ή Covid-19 αρνητικές εικόνες ακτίνων Χ στο στήθος.

Πριν ξεκινήσουμε, θα ήθελα να αναφέρω ότι αυτό δεν είναι μια επιστημονικά αυστηρή μελέτη. Είναι απλώς ένας τρόπος εξήγησης της βαθιάς μάθησης πρακτικά με τη χρήση πραγματικών προβλημάτων.

Τούτου λεχθέντος, μπορούμε να δημιουργήσουμε το περιβάλλον ανάπτυξης που πρόκειται να χρησιμοποιήσουμε για αυτό το έργο.

Ρυθμίστε το περιβάλλον ανάπτυξης

Φωτογραφία από το DL στο Unsplash

Ένα εικονικό περιβάλλον είναι ένα εργαλείο που βοηθά να κρατήσετε τις εξαρτήσεις που απαιτούνται από διαφορετικά έργα ξεχωριστές δημιουργώντας απομονωμένα εικονικά περιβάλλοντα Python γι 'αυτά. Αυτό σημαίνει ότι κάθε έργο μπορεί να έχει τις δικές του εξαρτήσεις, ανεξάρτητα από τις εξαρτήσεις κάθε άλλου έργου.

Στην Python, για να οικοδομήσουμε ένα εικονικό περιβάλλον, χρησιμοποιούμε το πακέτο virtualenv.

Εγκαταστήστε τη δέσμευση της Python για το virtualenv:

pip εγκαταστήσετε virtualenv

Στη συνέχεια, δημιουργούμε το περιβάλλον με την ακόλουθη εντολή:

virtualenv έργο

Αυτό θα δημιουργήσει το φάκελο του έργου. Στη συνέχεια ενεργοποιούμε το εικονικό περιβάλλον:

Σε UNIX (Mac και Linux): source project / bin / activate

Στα Windows: project \ env \ Scripts \ activate.Bat

Εγκαταστήσαμε και ρυθμίσαμε το περιβάλλον ανάπτυξης και τώρα πρέπει να εγκαταστήσουμε τα πακέτα που θα χρησιμοποιήσουμε κατά τη διάρκεια αυτού του σεμιναρίου:

  • TensorFlow (αυτό μπορεί να διαρκέσει μερικά λεπτά): pip install tensorflow
  • scikit-learn: pip εγκαταστήστε το sklearn
  • Imutils: pip εγκαταστήσετε imutils
  • Matplotlib: pip εγκαταστήστε matplotlib
  • OpenCV: pip εγκαταστήστε το opencv-python

Αφού εγκαταστήσετε όλα αυτά τα πακέτα, είστε έτοιμοι να προχωρήσετε στο επόμενο βήμα.

Τι θα κάνουμε στο Εκπαιδευτικό Πρόγραμμα

Όπως είπα στον τίτλο, θα χτίσουμε ένα CNN που θα ανιχνεύει ότι coronavirus σε εικόνες ακτίνων Χ.

Έτσι δημιουργείται το άρθρο:

  • Κατεβάστε το σύνολο δεδομένων
  • Δημιουργήστε ένα συνελικτικό νευρωνικό δίκτυο για αυτόματη ανίχνευση του Covid-19 σε εικόνες ακτίνων Χ
  • Περιορισμοί του μοντέλου
  • συμπέρασμα

Το σύνολο δεδομένων

Το σύνολο δεδομένων της εικόνας Covid-19 που θα χρησιμοποιήσουμε για αυτό το σεμινάριο επιμελήθηκε ο Δρ. Joseph Cohen, μεταδιδακτορικός συνεργάτης στο Πανεπιστήμιο του Μόντρεαλ.

Μπορείτε να κάνετε λήψη του συνόλου δεδομένων από το Dropbox.

Αφού κατεβάσετε το αρχείο zip, αποσυμπιέστε το. Θα πρέπει να δείτε στο φάκελο λήψεων το φάκελο / φάκελο δεδομένων. Μετακινήστε τον στον κατάλογο που θα χρησιμοποιήσετε κατά τη διάρκεια αυτού του έργου.

Για παράδειγμα, ορίστε τον τρόπο με τον οποίο ο κατάλογός μου έχει ρυθμιστεί:

Ο φάκελος του έργου μου

Δομή δεδομένων

Όπως μπορείτε να δείτε στην προηγούμενη εικόνα, το σύνολο δεδομένων χωρίζεται σε δύο φακέλους: / covid και / normal. Ο κατάλογος / covid περιέχει 25 εικόνες ακτίνων Χ θεραπειών θετικών ως προς το Covid, ενώ ο / κανονικός φάκελος περιέχει 25 εικόνες ακτίνων Χ από Covid-αρνητικά στήθη.

Μοντέλο CNN

Αφού δούμε πώς είναι δομημένο το σύνολο δεδομένων μας, μπορούμε να αρχίσουμε να κατασκευάζουμε το σενάριο CNN.

Εισαγωγές και επιχειρήματα

Δημιουργήστε το αρχείο train_covid19.py και επικολλήστε τον ακόλουθο κώδικα:

Το σενάριο που θα δημιουργήσουμε χρησιμοποιεί βιβλιοθήκες TensorFlow, Keras, scikit-learn και OpenCV.

Θα το χρησιμοποιησουμε:

  • TensorFlow και Keras να συνεργαστούν με όλα όσα αφορούν το CNN (συνελικτικό νευρωνικό δίκτυο)
  • scikit-μάθετε να εργάζεστε με την προεπεξεργασία δεδομένων και την αξιολόγηση μοντέλου
  • OpenCV για τη φόρτωση και επεξεργασία εικόνων
  • Matplotlib για να σχεδιάσετε τα αποτελέσματα του μοντέλου

Αφού εισάγουμε τις απαραίτητες ενότητες, αναλύουμε τα επιχειρήματα της γραμμής εντολών και αρχικοποιούμε τα υπερπαραμετρικά (παραμέτρους που θα χρησιμοποιηθούν για την κατασκευή του CNN):

Οι γραμμές 2-9 καθορίζουν τα επιχειρήματά μας γραμμής εντολών:

  • -Dataset είναι η διαδρομή του συνόλου δεδομένων.
  • -Plot είναι ένα προαιρετικό μονοπάτι σε μια γραφική παράσταση ιστορικού εκπαίδευσης εξόδου. Η προεπιλογή είναι plot.png.
  • -Model είναι το προαιρετικό μονοπάτι για το μοντέλο Covid-19 της παραγωγής μας. από προεπιλογή, θα ονομάζεται covid19.model.

Οι γραμμές 13-15 ορίζουν την αρχική ταχύτητα εκμάθησης, τον αριθμό των εποχών εκπαίδευσης και το μέγεθος της παρτίδας.

Φόρτωση και επεξεργασία δεδομένων

Τώρα είμαστε έτοιμοι να φορτώσουμε και να επεξεργαστούμε τα ακτινογραφικά μας δεδομένα:

Για να φορτώσετε τα δεδομένα μας, πιάσαμε όλες τις διαδρομές σε εικόνες στον κατάλογο δεδομένων (γραμμή 3). Στη συνέχεια, για κάθε εικόναPath, εμείς:

  • Εξαγάγετε την ετικέτα κλάσης (είτε Covid είτε κανονική) από τη διαδρομή (Γραμμή 11).
  • Τοποθετήστε την εικόνα, προεπεξεργαστείτε τη με μετατροπή σε παραγγελία καναλιών RGB και μετονομάστε το σε 224 × 224 pixels έτσι ώστε να είναι έτοιμο για το συνεστραμμένο νευρωνικό μας δίκτυο (Γραμμές 15-17).
  • Ενημερώστε τις λίστες δεδομένων και ετικετών μας, αντίστοιχα (Γραμμές 20 και 21).

Γραμμές 25-27: Μετατροπή δεδομένων και ετικετών σε συστοιχίες NumPy.

Τώρα μπορούμε να κωδικοποιήσουμε τις ετικέτες μας με μία θερμή κωδικοποίηση (Γραμμές 2-4) και να χωρίσουμε το σύνολο δεδομένων σε τρένο και να δοκιμάσουμε:

Η μοναδική κωδικοποίηση σημαίνει ότι τα δεδομένα μας θα εμφανίζονται με την ακόλουθη μορφή:

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

Κάθε κωδικοποιημένη ετικέτα αποτελείται από έναν πίνακα δύο στοιχείων με ένα από τα στοιχεία να είναι "ζεστό" (1) ή "όχι" (0). Το χρησιμοποιούμε όπως απαιτείται για την ταξινόμηση θετικών ή αρνητικών περιπτώσεων. δηλαδή, εκτελούμε μια δυαδική ταξινόμηση.

Στη γραμμή 9, το μέγεθος δοκιμής 0.20 σημαίνει ότι χωρίζουμε το σύνολο δεδομένων, διατηρώντας το 20% του για δοκιμή και το υπόλοιπο 80% για την εκπαίδευση.

Στη συνέχεια, στις γραμμές 12-14, πραγματοποιούμε αύξηση δεδομένων, μια τεχνική προεπεξεργασίας δεδομένων που βελτιώνει την ικανότητα ταξινόμησης του μοντέλου μας.

Κατασκευάστε το μοντέλο

Αφού επεξεργαστούμε όλα τα δεδομένα, μπορούμε να αρχικοποιήσουμε το μοντέλο μας. Θα χρησιμοποιήσουμε το μοντέλο VGG16.

Οι γραμμές 2-3 δημιουργούν το δίκτυο VGG16 με βάρη προ-εκπαιδευμένα στο ImageNet.

Στις γραμμές 6-11, κατασκευάζουμε τα στρώματα κεφαλής και στη γραμμή 14 τα προσαρμόζουμε στο μοντέλο.

Στις γραμμές 17-18, παγώζουμε κάθε στρώμα στο μοντέλο μας, έτσι ώστε να μην ενημερώνονται κατά τη διάρκεια της πρώτης εκπαιδευτικής διαδικασίας.

Εκπαιδεύστε το CNN

Είμαστε πλέον έτοιμοι να καταρτίσουμε και να εκπαιδεύσουμε το μοντέλο βαθιάς εκμάθησης Covid-19 (coronavirus):

Γραμμές 3-4: Εδώ συγκεντρώνουμε το CNN με το Optimizer του Adam. Δεδομένου ότι πρόκειται για πρόβλημα δύο κατηγοριών, χρησιμοποιούμε την απώλεια binary_crossentropy και όχι την κατηγοριοποιημένη σταυροδρόμια.

Γραμμές 9-14: Πραγματοποιούμε μια κλήση προς τη μέθοδο του Keras 'fit_generator, ενώ περνάμε στα δεδομένα ακτίνων Χ στο στήθος μας μέσω του αντικειμένου μας για την αύξηση των δεδομένων.

Αξιολογήστε το μοντέλο

Μετά την εκπαίδευση του μοντέλου, το αξιολογούμε:

Γραμμές 3-6: Κάνουμε προβλέψεις για το σετ δοκιμών και αρπάζουμε τους δείκτες πρόβλεψης.

Γραμμές 9-10: Εδώ δημιουργούμε και εκτυπώνουμε μια αναφορά ταξινόμησης χρησιμοποιώντας το βοηθητικό βοηθητικό πρόγραμμα scikit-learn.

Στη συνέχεια, υπολογίζουμε έναν πίνακα συγχύσεων για περαιτέρω στατιστική αξιολόγηση:

Γραμμή 2: Δημιουργία μήτρας σύγχυσης.

Γραμμές 4-6: Χρησιμοποιήστε τη μήτρα σύγχυσης για να εξαγάγετε την ακρίβεια, την ευαισθησία και την ειδικότητα και να τις εκτυπώσετε (Γραμμές 9-12).

Εκπαίδευση ιστορικού και σειριοποίηση μοντέλου

Έχουμε τουλάχιστον τελειώσει τον ανιχνευτή του κορώνα-ιού (Covid-19) CNN. Αλλά θέλουμε επίσης να δούμε το ιστορικό εκπαίδευσης του ανιχνευτή, και στο τέλος, να αποθηκεύσουμε το μοντέλο σε ένα αρχείο.

Γραμμές 2-12: Σχεδιάστε την ακρίβεια / απώλεια της εκπαίδευσης του μοντέλου.

Γραμμή 13: Αποθηκεύστε την πλοκή στην εικόνα plot.png που ορίσαμε στα αρχεία μας.

Γραμμές 16-17: Αποθηκεύσατε το μοντέλο σε αρχείο .model.

Ολοκληρώθηκε!

Εδώ είναι ο πλήρης κώδικας train_covid19.py:

Φωτογραφία από τον Christian Bolt στο Unsplash

Δοκιμή

Τώρα δοκιμάζουμε το CNN μας. Αλλά πριν από αυτό, κάνουμε μια μικρή ανασκόπηση του τι κάναμε:

  1. Δημιουργήθηκε το εικονικό περιβάλλον και εγκαταστάθηκαν τα TensorFlow, scikit-learn, Imutils, Matplotlib και OpenCV
  2. Λήψη του συνόλου δεδομένων και μίλησε για τη δομή του
  3. Δημιούργησε το train_covid19.py
  4. Εισήγαγε τις απαραίτητες ενότητες
  5. Τοποθετήθηκαν και προεπεξεργάστηκαν το σύνολο δεδομένων
  6. Κατασκευάστε το μοντέλο και τις στρώσεις του
  7. Εκπαιδεύτηκε και έσωσε την ακρίβειά του
  8. Σχεδίασε το ιστορικό ακρίβειας / απώλειας του μοντέλου σε μια εικόνα plot.png
  9. Αποθηκεύτηκε το μοντέλο στο αρχείο covid19.model

Τώρα, ας ρίξουμε μια ματιά στο φάκελο του έργου μας:

Όπως μπορείτε να δείτε, το αρχείο train_covid19.py που δημιουργήσαμε προηγουμένως βρίσκεται στον ίδιο κατάλογο του φακέλου / dataset. Αυτό είναι ένα βασικό σημείο, καθώς το σενάριο αναζητά το φάκελο δεδομένων στο φάκελο / covid-19_x_rays_detect.

Μόλις ο κατάλογός σας έχει ρυθμιστεί όπως φαίνεται προηγουμένως, μπορούμε να εκτελέσουμε το αρχείο train_covid19.py:

Το σύνολο δεδομένων python3 train_covid19.py -dataset

Αυτό θα διαρκέσει μερικά λεπτά, δεδομένου ότι είναι πιο υπολογιστικά δαπανηρό να δουλεύεις με εικόνες. Στο τέλος, η παραγωγή σας θα πρέπει να είναι ως εξής:

Εδώ το train_covid19.py:

  1. Διαβάστε και επεξεργαστείτε το σύνολο δεδομένων
  2. Κατέβαλε τα βάρη του μοντέλου VGG16
  3. Εκπαιδεύτηκε το μοντέλο για 25 εποχές
  4. Αξιολόγησε την απόδοση του CNN
  5. Τυπώθηκε έξω

Τώρα, παρακολουθώντας τον κατάλογό σας, θα πρέπει να δείτε ένα νέο αρχείο plot.png:

Με την ανάγνωση του ιστορικού εκπαίδευσης του μοντέλου, μπορούμε να λάβουμε τα εξής:

  • Το μοντέλο δεν είναι υπερβολικά τοποθετημένο ή υπο-τοποθετημένο. Αυτό σημαίνει ότι δούλεψε το ίδιο για την εκπαίδευση και τη δοκιμή.
  • Η απώλεια του μειώνεται όταν οι εποχές αυξάνονται.

Οι Περιορισμοί του Μοντέλου

Φωτογραφία από τον Ludovic Charlet στο Unsplash

Δημιουργήσαμε ένα συμπαθητικό και τέλεια προσαρμοσμένο νευρωνικό δίκτυο που ανιχνεύει το Covid-19. Από την άλλη πλευρά, το CNN δεν είναι πολύ ακριβές. έχει ακρίβεια 80%, αλλά γιατί;

  • Ίσως να υπάρχει κάποιο καλύτερο μοντέλο για αυτόν τον τύπο ταξινόμησης.
  • Το σύνολο δεδομένων είναι πολύ, αλλά πολύ μικρό. Δυστυχώς, δεν βρήκα άλλες θετικές με Covid-19 θετικές ακτίνες Χ.
  • Είναι δύσκολο να ταξινομήσετε εικόνες, ειδικά για κάποιον που δεν είναι ειδικός στην ιατρική.
  • Το μοντέλο εξετάζει μόνο τις εικόνες, όχι εκεί που ήσασταν τις τελευταίες εβδομάδες, ή κάτι τέτοιο.

συμπέρασμα

Ελπίζω ότι αυτό το άρθρο πέτυχε τον κύριο σκοπό του: να διδάξει τη βαθιά εκμάθηση με έναν πρακτικό τρόπο. Στην πραγματικότητα, διαβάζοντας το προηγούμενο άρθρο μου σχετικά με την ανάλυση συναισθημάτων με την Python ή περιμένοντας μου να δημοσιεύσω άλλα άρθρα, θα ανακαλύψετε ότι η κύρια πρόθεσή μου εξηγεί σύνθετα θέματα με έναν πρακτικό και έξυπνο τρόπο που σας κάνει ικανό να λύσετε πραγματικές -κατά προβλήματα στον κόσμο.