Πίνακας περιεχομένων:

Αναγνώριση εικόνας με πίνακες K210 και Arduino IDE/Micropython: 6 βήματα (με εικόνες)
Αναγνώριση εικόνας με πίνακες K210 και Arduino IDE/Micropython: 6 βήματα (με εικόνες)

Βίντεο: Αναγνώριση εικόνας με πίνακες K210 και Arduino IDE/Micropython: 6 βήματα (με εικόνες)

Βίντεο: Αναγνώριση εικόνας με πίνακες K210 και Arduino IDE/Micropython: 6 βήματα (με εικόνες)
Βίντεο: Εισαγωγή λεζάντας σε εικόνα ή πίνακα στο Microsoft Word 2024, Ιούνιος
Anonim
Image
Image

Έγραψα ήδη ένα άρθρο σχετικά με τον τρόπο εκτέλεσης επιδείξεων OpenMV στο Sipeed Maix Bit και επίσης έκανα ένα βίντεο επίδειξης ανίχνευσης αντικειμένων με αυτόν τον πίνακα. Ένα από τα πολλά ερωτήματα που έχουν κάνει οι άνθρωποι είναι - πώς μπορώ να αναγνωρίσω ένα αντικείμενο για το οποίο το νευρωνικό δίκτυο δεν έχει εκπαιδευτεί; Με άλλα λόγια πώς να φτιάξετε τον δικό σας ταξινομητή εικόνας και να τον εκτελέσετε με επιτάχυνση υλικού.

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

Σε έπιασα! Σε αυτό το άρθρο θα σας διδάξω πώς να δημιουργήσετε τον δικό σας προσαρμοσμένο ταξινομητή εικόνας με μεταφορά εκμάθησης στο Keras, να μετατρέψετε το εκπαιδευμένο μοντέλο σε μορφή.kmodel και να το εκτελέσετε σε πίνακα Sipeed (μπορεί να είναι οποιοσδήποτε πίνακας, Bit/Dock ή Go) χρησιμοποιώντας Micropython ή Arduino IDE. Και μόνο η φαντασία σας θα είναι το όριο σε εργασίες που μπορείτε να κάνετε με αυτή τη γνώση.

ΕΝΗΜΕΡΩΣΗ ΜΑAYΟΥ 2020: Βλέποντας πώς το άρθρο και το βίντεό μου σχετικά με την Αναγνώριση εικόνων με πίνακες K210 εξακολουθούν να είναι πολύ δημοφιλή και μεταξύ των κορυφαίων αποτελεσμάτων στο YouTube και το Google, αποφάσισα να ενημερώσω το άρθρο για να συμπεριλάβω τις πληροφορίες σχετικά με το πλαίσιο AI που βασίζεται στο AXeleRate, Keras στο Edge αναπτύσσω.

Το aXeleRate, ουσιαστικά, βασίζεται στη συλλογή σεναρίων που χρησιμοποίησα για την εκπαίδευση μοντέλων αναγνώρισης εικόνας/ανίχνευσης αντικειμένων - συνδυασμένα σε ένα ενιαίο πλαίσιο και βελτιστοποιημένα για ροή εργασιών στο Google Colab. Είναι πιο βολικό στη χρήση και πιο ενημερωμένο.

Για την παλιά έκδοση του άρθρου, μπορείτε ακόμα να το δείτε στο steemit.com.

Βήμα 1: CNN και Transfer Learning: Some Theory

CNN and Transfer Learning: Some Theory
CNN and Transfer Learning: Some Theory

Το Convolutional Neural Networks ή το CNN είναι μια κατηγορία βαθιών νευρωνικών δικτύων, που χρησιμοποιείται συχνότερα για την ανάλυση οπτικών εικόνων. Υπάρχει πολλή βιβλιογραφία στο Διαδίκτυο σχετικά με το θέμα και θα δώσω κάποιους συνδέσμους στο τελευταίο μέρος του άρθρου. Εν ολίγοις, μπορείτε να σκεφτείτε το CNN ως μια σειρά φίλτρων, που εφαρμόζονται στην εικόνα, κάθε φίλτρο αναζητά ένα συγκεκριμένο χαρακτηριστικό της εικόνας - στα χαμηλότερα στρεπτικά στρώματα τα χαρακτηριστικά είναι συνήθως γραμμές και απλά σχήματα και στα υψηλότερα στρώματα τα χαρακτηριστικά μπορεί να είναι πιο συγκεκριμένο, π.χ. μέρη του σώματος, συγκεκριμένες υφές, μέρη ζώων ή φυτών κ.λπ. Η παρουσία ορισμένων συνόλων μπορεί να μας δώσει μια ιδέα για το τι μπορεί να είναι το αντικείμενο της εικόνας. Μουστάκια, δύο μάτια και μια μαύρη μύτη; Πρέπει να είναι γάτα! Πράσινα φύλλα, κορμός δέντρου; Μοιάζει με δέντρο!

Ελπίζω να έχετε πάρει την ιδέα για την αρχή λειτουργίας του CNN τώρα. Κανονικά ένα βαθύ νευρωνικό δίκτυο χρειάζεται χιλιάδες εικόνες και ώρες προπόνησης (εξαρτάται από το υλικό που χρησιμοποιείτε για την εκπαίδευση) για να «αναπτύξει» φίλτρα που είναι χρήσιμα για την αναγνώριση των τύπων αντικειμένων που θέλετε. Υπάρχει όμως μια συντόμευση.

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

Ακούγεται φοβερό, σωστά; Ας δούμε πώς να το εφαρμόσουμε.

Βήμα 2: Προετοιμάστε το περιβάλλον σας

Προετοιμάστε το Περιβάλλον σας
Προετοιμάστε το Περιβάλλον σας

Υπάρχουν δύο τρόποι για να χρησιμοποιήσετε το aXeleRate: να εκτελείται τοπικά στο μηχάνημα Ubuntu ή στο Google Colab. Για να τρέξετε στο Google Colab, ρίξτε μια ματιά σε αυτό το παράδειγμα:

Ταξινόμηση εικόνας Σημειωματάριο Colab

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

Το εργασιακό μου περιβάλλον είναι το Ubuntu 16.04, 64bit. Μπορείτε να χρησιμοποιήσετε το εικονικό μηχάνημα για να εκτελέσετε εικόνα Ubuntu, καθώς δεν θα χρησιμοποιήσουμε GPU για εκπαίδευση. Με ορισμένες τροποποιήσεις μπορείτε επίσης να εκτελέσετε το σενάριο εκπαίδευσης στα Windows, αλλά για τη μετατροπή μοντέλου θα χρειαστεί να χρησιμοποιήσετε σύστημα Linux. Έτσι, το προτιμότερο περιβάλλον για να εκτελέσετε αυτό το σεμινάριο είναι το Ubuntu 16.04, που εκτελείται εγγενώς ή σε εικονική μηχανή.

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

Κατεβάστε το πρόγραμμα εγκατάστασης εδώ

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

conda create -n ml python = 3,7

Ας ενεργοποιήσουμε το νέο περιβάλλον

conda activ ml

Θα εμφανιστεί ένα πρόθεμα πριν από το κέλυφος bash με το όνομα του περιβάλλοντος, υποδεικνύοντας ότι εργάζεστε τώρα σε αυτό το περιβάλλον.

Βήμα 3: Εγκαταστήστε το AXeleRate και εκτελέστε δοκιμές

Εγκαταστήστε το AXeleRate και εκτελέστε δοκιμές
Εγκαταστήστε το AXeleRate και εκτελέστε δοκιμές

Εγκαταστήστε το aXeleRate στον τοπικό σας υπολογιστή με

pip install git+https://github.com/AIWintermuteAI/aXeleRate

Για να κατεβάσετε παραδείγματα εκτελέστε:

git clone

Μπορείτε να εκτελέσετε γρήγορες δοκιμές με το tests_training.py στο φάκελο aXeleRate. Θα εκτελεί εκπαίδευση και συμπεράσματα για κάθε τύπο μοντέλου, θα αποθηκεύει και θα μετατρέπει εκπαιδευμένα μοντέλα. Δεδομένου ότι εκπαιδεύεται μόνο για 5 εποχές και το σύνολο δεδομένων είναι πολύ μικρό, δεν θα μπορείτε να λάβετε χρήσιμα μοντέλα, αλλά αυτό το σενάριο προορίζεται μόνο για έλεγχο για απουσία σφαλμάτων.

Βήμα 4: Εκπαιδεύστε ξανά το μοντέλο, μετατρέψτε το μοντέλο Keras σε.kmodel

Εκπαιδεύστε εκ νέου το μοντέλο, μετατρέψτε το μοντέλο Keras σε.kmodel
Εκπαιδεύστε εκ νέου το μοντέλο, μετατρέψτε το μοντέλο Keras σε.kmodel

Για αυτό το παράδειγμα παιχνιδιού θα εκπαιδεύσουμε το μοντέλο να αναγνωρίζει τον Άγιο Βασίλη και τον Arduino Uno. Προφανώς μπορείτε να επιλέξετε άλλα μαθήματα. Κατεβάστε το σύνολο δεδομένων από εδώ. Δημιουργήστε ένα αντίγραφο του αρχείου classifier.json στο φάκελο config και, στη συνέχεια, αλλάξτε το ανάλογα, παρόμοιο με το αρχείο ρυθμίσεων στο στιγμιότυπο οθόνης - βεβαιωθείτε ότι η διαδρομή προς τους φακέλους εκπαίδευσης και επικύρωσης είναι σωστή!

Εκτελέστε την ακόλουθη εντολή από το φάκελο aXeleRate:

python axelerate/train.py - c configs/santa_uno.json

Η εκπαίδευση θα ξεκινήσει. Εάν η ακρίβεια επικύρωσης (η μέτρησή μας επικύρωσης) δεν βελτιωθεί για 20 εποχές, η εκπαίδευση θα σταματήσει πρόωρα. Κάθε φορά που βελτιώνεται η ακρίβεια επικύρωσης, το μοντέλο αποθηκεύεται στο φάκελο του έργου. Μετά την ολοκλήρωση της εκπαίδευσης, το aXeleRate μετατρέπει αυτόματα το καλύτερο μοντέλο σε συγκεκριμένες μορφές - μπορείτε να επιλέξετε "tflite", "k210" ή "edgetpu" από τώρα.

Βήμα 5: Εκτελέστε το μοντέλο στο Sipeed Maix Bit

Εκτελέστε το μοντέλο στο Sipeed Maix Bit
Εκτελέστε το μοντέλο στο Sipeed Maix Bit
Εκτελέστε το μοντέλο στο Sipeed Maix Bit
Εκτελέστε το μοντέλο στο Sipeed Maix Bit
Εκτελέστε το μοντέλο στο Sipeed Maix Bit
Εκτελέστε το μοντέλο στο Sipeed Maix Bit

Υπάρχουν δύο τρόποι για να εκτελέσετε το μοντέλο που έχετε τώρα στο υλικό Sipeed Maix: υλικολογισμικό micropython και Arduino IDE. Το υλικό Micropython είναι ευκολότερο στη χρήση, αλλά καταλαμβάνει σημαντικό μέρος της διαθέσιμης μνήμης, οπότε απομένει λιγότερος χώρος για το μοντέλο. Το Arduino IDE είναι βασικά κωδικός C, ο οποίος είναι πολύ πιο αποτελεσματικός και έχει μικρότερο αποτύπωμα μνήμης. Το μοντέλο μου είναι μόλις 1,9Mb, οπότε και οι δύο επιλογές λειτουργούν γι 'αυτό. Μπορείτε να χρησιμοποιήσετε μοντέλα τόσο μεγάλα όσο και 2,9 Mb με το Micropython, για οτιδήποτε μεγαλύτερο πρέπει να λάβετε υπόψη σας χρησιμοποιώντας το Arduino IDE.

Κατεβάστε το OpenMV IDE από εδώ και ελάχιστο υλικολογισμικό μικροπύθων από εδώ.

Κάψτε το υλικολογισμικό με το εργαλείο kflash_gui. Μπορείτε επίσης να επιλέξετε να καεί το εκπαιδευμένο μοντέλο για να αναβοσβήνει επίσης, όπως φαίνεται στο στιγμιότυπο οθόνης. Or αντιγράψτε το σε κάρτα SD (σε αυτήν την περίπτωση αντιγράψτε το.kmodel στη ρίζα μιας κάρτας SD και τοποθετήστε την κάρτα SD στο Sipeed Maix Bit)

Ανοίξτε το OpenMV IDE και πατήστε το κουμπί σύνδεσης. Ανοίξτε το σενάριο santa_uno.py από το φάκελο example_scripts και πατήστε το κουμπί Έναρξη. Θα πρέπει να βλέπετε μια ζωντανή ροή από την κάμερα και αν ανοίξετε το Serial Terminal θα έχετε το κορυφαίο αποτέλεσμα αναγνώρισης εικόνας με το σκορ εμπιστοσύνης!

Για χρήση με το Arduino IDE, πρέπει πρώτα να ακολουθήσετε τη διαδικασία προσθήκης σανίδων Sipeed στο Arduino IDE, η οποία τεκμηριώνεται εδώ. Η έκδοση Arduino IDE πρέπει να είναι τουλάχιστον 1.8.12. Αφού προσθέσετε τους πίνακες, ανοίξτε το σκίτσο mobilenet_v1_transfer_learning.ino και ανεβάστε το στο Sipeed Maix Bit. Αλλάξτε το όνομα του μοντέλου στην κάρτα SD σε "μοντέλο" (ή δημιουργήστε ένα αντίγραφο με αυτό το όνομα). Μπορείτε να αλλάξετε τα ονόματα των ετικετών στα names.cpp. Θα εμφανίσει τη ζωντανή ροή της κάμερας στην οθόνη Sipeed Maix μαζί με το κορυφαίο αποτέλεσμα αναγνώρισης εικόνας.

Βήμα 6: Συμπεράσματα

Ακολουθούν μερικά ακόμη υλικά για να διαβάσετε σχετικά με το θέμα των CNN και τη μεταφορά της μάθησης:

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

Γάτες και σκύλοι και συνελικτικά νευρωνικά δίκτυα Εξηγεί τα βασικά πίσω από τα CNN και απεικονίζει μερικά από τα φίλτρα. Με γάτες!

Εκπαιδεύστε, μετατρέψτε, εκτελέστε το MobileNet στο Sipeed MaixPy και το MaixDuino! Ένα σεμινάριο από την ομάδα Sipeed για το πώς να εκπαιδεύσετε τα μαθήματα Mobilenet 1000 από την αρχή (χωρίς εκμάθηση μεταφοράς). Μπορείτε να κατεβάσετε το προ-εκπαιδευμένο μοντέλο τους και να το δοκιμάσετε!

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

Συνιστάται: