Αναγνώριση εικόνας απομυθοποιημένη

Τίποτα στη μηχανική μάθηση δεν αιχμαλωτίζει τη φαντασία σαν την ικανότητα αναγνώρισης εικόνων. Ο προσδιορισμός των εικόνων πρέπει να σημαίνει «νοημοσύνη», σωστά; Ας απομυθοποιήσουμε.

Η ικανότητα να «βλέπει», όταν πρόκειται για λογισμικό, ξεκινά με την ικανότητα ταξινόμησης. Η ταξινόμηση ταιριάζει με τα δεδομένα. Οι εικόνες είναι δεδομένα με τη μορφή δισδιάστατων πινάκων.

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

Μία από τις κλασικές και αρκετά χρήσιμες εφαρμογές για την ταξινόμηση εικόνας είναι η οπτική αναγνώριση χαρακτήρων (OCR): μετάβαση από εικόνες γραπτής γλώσσας σε δομημένο κείμενο .

Αυτό μπορεί να γίνει για οποιοδήποτε αλφάβητο και μεγάλη ποικιλία στυλ γραφής.

Βήματα στη διαδικασία

Θα δημιουργήσουμε κώδικα για να αναγνωρίσουμε αριθμητικά ψηφία σε εικόνες και να δείξουμε πώς λειτουργεί. Αυτό θα λάβει 3 βήματα:

  1. συλλέξτε και οργανώστε δεδομένα για εργασία (85% της προσπάθειας)
  2. χτίστε και δοκιμάστε ένα μοντέλο πρόβλεψης (10% της προσπάθειας)
  3. χρησιμοποιήστε το μοντέλο για να αναγνωρίσετε εικόνες (5% της προσπάθειας)

Η προετοιμασία των δεδομένων είναι μακράν το μεγαλύτερο μέρος της δουλειάς μας, αυτό ισχύει για τις περισσότερες εργασίες επιστήμης δεδομένων . Υπάρχει ένας λόγος που ονομάζεται επιστήμη DATA!

Η οικοδόμηση του προγνωστικού μοντέλου μας και η χρήση του στην πρόβλεψη τιμών είναι όλα μαθηματικά . Χρησιμοποιούμε λογισμικό για να επαναλάβουμε τα δεδομένα, να σφυρηλατήσουμε επαναληπτικά «βάρη» μέσα σε μαθηματικές εξισώσεις και να εργαστούμε με δομές δεδομένων. Το λογισμικό δεν είναι «έξυπνο», λειτουργεί μαθηματικές εξισώσεις για να κάνει τη στενή γνώση, σε αυτήν την περίπτωση: αναγνώριση εικόνων ψηφίων.

Στην πράξη, τα περισσότερα από αυτά που ονομάζουν "AI" είναι πραγματικά απλά λογισμικό που εκτελεί γνώσεις.

Το προγνωστικό μοντέλο και τα δεδομένα μας

Θα χρησιμοποιήσουμε ένα από τα απλούστερα μοντέλα πρόβλεψης: την παλινδρόμηση «k-πλησιέστεροι γείτονες» ή «kNN», που δημοσιεύθηκε για πρώτη φορά από τον E. Fix, JL Hodges το 1952.

Μια απλή εξήγηση αυτού του αλγορίθμου είναι εδώ και ένα βίντεο με τα μαθηματικά του εδώ. Και επίσης εδώ για όσους θέλουν να δημιουργήσουν τον αλγόριθμο από το μηδέν.

Δείτε πώς λειτουργεί: φανταστείτε ένα γράφημα σημείων δεδομένων και κύκλων που καταγράφουν σημεία k, με κάθε τιμή k να επικυρώνεται έναντι των δεδομένων σας.

Το σφάλμα επικύρωσης για k στα δεδομένα σας έχει ένα ελάχιστο που μπορεί να προσδιοριστεί.

Δεδομένης της «καλύτερης» τιμής για το k μπορείτε να ταξινομήσετε άλλα σημεία με κάποιο μέτρο ακρίβειας.

Θα χρησιμοποιήσουμε τον αλγόριθμο kNN του scikit learn για να αποφύγουμε να δημιουργήσουμε οι μαθηματικοί οι ίδιοι. Βολικά αυτή η βιβλιοθήκη θα μας παρέχει επίσης τα δεδομένα εικόνων μας.

Ας ξεκινήσουμε.

Ο κωδικός είναι εδώ, χρησιμοποιούμε το σημειωματάριο iPython που είναι ένας παραγωγικός τρόπος εργασίας σε έργα επιστήμης δεδομένων. Η σύνταξη κώδικα είναι Python και το παράδειγμά μας δανείζεται από το sk-learning.

Ξεκινήστε εισάγοντας τις απαραίτητες βιβλιοθήκες:

Στη συνέχεια οργανώνουμε τα δεδομένα μας:

training images: 1527, test images: 269

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

Τώρα πιθανώς αναρωτιέστε: πώς οργανώνονται οι ψηφιακές εικόνες; Είναι πίνακες τιμών, μία για κάθε εικονοστοιχείο σε εικόνα 8x8. Ας δούμε ένα.

# one-dimension[ 0. 1. 13. 16. 15. 5. 0. 0. 0. 4. 16. 7. 14. 12. 0. 0. 0. 3. 12. 2. 11. 10. 0. 0. 0. 0. 0. 0. 14. 8. 0. 0. 0. 0. 0. 3. 16. 4. 0. 0. 0. 0. 1. 11. 13. 0. 0. 0. 0. 0. 9. 16. 14. 16. 7. 0. 0. 1. 16. 16. 15. 12. 5. 0.]
# two-dimensions[[ 0. 1. 13. 16. 15. 5. 0. 0.] [ 0. 4. 16. 7. 14. 12. 0. 0.] [ 0. 3. 12. 2. 11. 10. 0. 0.] [ 0. 0. 0. 0. 14. 8. 0. 0.] [ 0. 0. 0. 3. 16. 4. 0. 0.] [ 0. 0. 1. 11. 13. 0. 0. 0.] [ 0. 0. 9. 16. 14. 16. 7. 0.] [ 0. 1. 16. 16. 15. 12. 5. 0.]]

Τα ίδια δεδομένα εικόνας εμφανίζονται ως μια επίπεδη (μονοδιάστατη) συστοιχία και πάλι ως μια συστοιχία 8x8 σε μια συστοιχία (δισδιάστατη). Σκεφτείτε κάθε σειρά της εικόνας ως μια σειρά 8 pixel, υπάρχουν 8 σειρές. Θα μπορούσαμε να αγνοήσουμε την γκρίζα κλίμακα (τις τιμές) και να εργαστούμε με 0 και 1, που θα απλοποιούσαν λίγο τα μαθηματικά.

Μπορούμε να το «σχεδιάσουμε» για να δούμε αυτόν τον πίνακα στη μορφή «pixelated».

Τι ψηφίο είναι αυτό; Ας ρωτήσουμε το μοντέλο μας, αλλά πρώτα πρέπει να το χτίσουμε.

KNN score: 0.951852

Με βάση τα δεδομένα δοκιμών, το μοντέλο πλησιέστερου γείτονα είχε βαθμολογία ακρίβειας 95%, όχι κακό. Επιστρέψτε και αλλάξτε την τιμή «κλάσματος» για να δείτε πώς αυτό επηρεάζει τη βαθμολογία.

array([2])

Το μοντέλο προβλέπει ότι ο πίνακας που φαίνεται παραπάνω είναι « 2 », ο οποίος φαίνεται σωστός.

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

Όχι κακό.

Μπορούμε να δημιουργήσουμε ένα φανταστικό ψηφίο και να δούμε τι σκέφτεται το μοντέλο μας.

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

Πώς λειτουργεί λοιπόν η αναγνώριση εικόνας;

  • Τα δεδομένα εικόνας είναι οργανωμένα : εκπαίδευση και δοκιμή, με ετικέτες (X, y)

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

  • ένα μοντέλο κατασκευάζεται χρησιμοποιώντας ένα από τα πολλά μαθηματικά μοντέλα (kNN, λογιστική παλινδρόμηση, συνελικτικό νευρωνικό δίκτυο κ.λπ.)

Which type of model you choose depends on your data and the type and complexity of the classification work.

  • new data is put into the model to generate a prediction

This is lighting fast: the result of a single mathematical calculation.

If you have a collection of pictures with and without cats, you can build a model to classify if a picture contains a cat. Notice you need training images that are devoid of any cats for this to work.

Of course you can apply multiple models to a picture and identify several things.

Large Data

A significant challenge in all of this is the size of each image since 8x8 is not a reasonable image size for anything but small digits, it’s not uncommon to be dealing with 500x500 pixel images, or larger. That’s 250,000 pixels per image, so 10,000 images of training means doing math on 2.5Billion values to build a model. And the math isn’t just addition or multiplication: we’re multiplying matrices, multiplying by floating-point weights, calculating derivatives. This is why processing power (and memory) is key in certain machine learning applications.

There are strategies to deal with this image size problem:

  • use hardware graphic processor units (GPUs) to speed up the math
  • reduce images to smaller dimensions, without losing clarity
  • μειώστε τα χρώματα σε γκρίζα κλίμακα και κλίσεις (μπορείτε ακόμα να δείτε τη γάτα)
  • Κοιτάξτε τμήματα μιας εικόνας για να βρείτε αυτό που ψάχνετε

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

Τώρα καταλαβαίνετε τα βασικά του πώς λειτουργεί.