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

Ρομπότ Raspberry Pi 4 Traffic Sign Recognition: 6 βήματα
Ρομπότ Raspberry Pi 4 Traffic Sign Recognition: 6 βήματα

Βίντεο: Ρομπότ Raspberry Pi 4 Traffic Sign Recognition: 6 βήματα

Βίντεο: Ρομπότ Raspberry Pi 4 Traffic Sign Recognition: 6 βήματα
Βίντεο: Prüfungsvorbereitung B2 🚀 Deutsch lernen 2024, Νοέμβριος
Anonim
Ρομπότ Raspberry Pi 4 Traffic Sign Recognition
Ρομπότ Raspberry Pi 4 Traffic Sign Recognition

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

Για παράδειγμα, εάν αναγνωριστεί μια πινακίδα στροφής δεξιά, τότε το ρομπότ θα στρίψει δεξιά, αν αναγνωριστεί μια πινακίδα στροφής αριστερά, τότε το ρομπότ θα στρίψει αριστερά, εάν δεν αναγνωριστεί κανένα από τα δύο, τότε το ρομπότ θα συνεχίσει προς τα εμπρός. Το σύνολο δεδομένων που θα χρησιμοποιηθεί είναι η επίσημη αναγνώριση σημάτων κυκλοφορίας από το INI (2019) (Institut Fur Neuroinformatik), αυτό το σύνολο δεδομένων έχει 43 κλάσεις, ωστόσο χρειάζονται μόνο δύο. Οι φάκελοι 00033 και 00034 στο σύνολο δεδομένων είναι αριστερά και δεξιά πινακίδες στροφής.

Βήμα 1: Απαιτήσεις

Απαιτήσεις
Απαιτήσεις
Απαιτήσεις
Απαιτήσεις
Απαιτήσεις
Απαιτήσεις

Οι απαιτήσεις για αυτό το έργο είναι οι ακόλουθες:

Ένα ρομπότ arduino. (βασικά ένα arduino uno, ένας οδηγός κινητήρα και κινητήρες) (δεν απαιτείται εάν δεν χρησιμοποιείτε ρομπότ)

Ένα βατόμουρο πι 4.

Μια κάμερα πι.

Απαιτείται λογισμικό:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (δεν απαιτείται εάν δεν χρησιμοποιείτε ρομπότ)

Ros (δεν απαιτείται αν δεν χρησιμοποιείτε ρομπότ)

Όποια και αν είναι η αγαπημένη σας ιδέα python (On the raspberry pi, I use Thonny).

Για να ρυθμίσετε το OpenCV και το Tensorflow, ακολουθήστε τις οδηγίες του Adrian. Σύνδεσμος:

Σας συνιστώ να δείτε όσο το δυνατόν περισσότερα σεμινάρια του, είναι πραγματικά ενδιαφέροντα και είναι χρήσιμα τόσο για αρχάριους όσο και για ενδιάμεσα.

Βήμα 2: Εκπαίδευση Δεδομένων

Το σενάριο τρένου έχει σχεδιαστεί για να έχει πρόσβαση στο σύνολο δεδομένων που συγκεντρώνει περίπου 50.000 εικόνες από 43 τάξεις. Το σενάριο είναι γραμμένο σε python, χρησιμοποιώντας μια ποικιλία βιβλιοθηκών: os - πρόκειται για τη σύνδεση του σεναρίου python με τον σωστό κατάλογο όπου βρίσκεται το σύνολο δεδομένων. Matplotlib - αυτό είναι για την εμφάνιση των δεδομένων από το μοντέλο εκπαίδευσης. Tensorflow και keras - αυτές είναι οι βιβλιοθήκες που χρησιμοποιούνται για τη δημιουργία του μοντέλου τεχνητού νευρωνικού δικτύου, χρησιμοποιούνται για το σχεδιασμό του μοντέλου. Numpy - αυτή η βιβλιοθήκη προορίζεται για τη μετατροπή των εικόνων σε έναν πίνακα που μπορεί στη συνέχεια να περάσει από το μοντέλο για να ανακτήσει μια πρόβλεψη.

Το σενάριο που επισυνάπτεται είναι ο κώδικας python για την κατασκευή ενός μοντέλου από το σύνολο δεδομένων. Αυτό συνίσταται σε συνελικτική 2D με είσοδο (5, 5) και ενεργοποίηση του relu και μετά της συγκέντρωσης, μόλις γίνει αυτό, η είσοδος περνάει από άλλη συνέλιξη με είσοδο (3, 3) με την ίδια ενεργοποίηση και συγκέντρωση. Αυτό συμβαίνει μια τελευταία φορά πριν ισοπεδωθεί και στη συνέχεια η πυκνότητα εφαρμόζεται στην ποσότητα των κλάσεων που υπάρχουν, σε αυτή την περίπτωση 43.

Το επόμενο βήμα ήταν η σύνταξη του μοντέλου. Αυτό είναι το μέρος που ορίζει το βελτιστοποιητή, ένα sgd ήταν το πιο κατάλληλο αφού αυτό ήταν παρόμοιο με το βελτιστοποιητή που χρησιμοποιήθηκε στην εργασία 1. Το Sgd σημαίνει Stochastic gradient descent. Επίσης μέσα στον μεταγλωττιστή η ζημία πρέπει να ρυθμιστεί, η επιλογή μιας απώλειας sparse_categorical_crossentropy είναι η καλύτερη προσαρμογή αφού οι κατηγορίες είναι ακέραιοι και το μοντέλο θα βγάλει μια πρόβλεψη για κάθε κλάση ως float μεταξύ 0 και 1. 1 με ακρίβεια 100%.

Μόλις ολοκληρωθεί ο μεταγλωττιστής, πρέπει να εφαρμοστεί μια γεννήτρια για να ξεκινήσει το μοντέλο την επεξεργασία των εισόδων εικόνας. Η γεννήτρια αποτελείται από πολλά μέρη: training_set - αυτός είναι ο σύνδεσμος με το σύνολο δεδομένων που χρησιμοποιείται για εκπαίδευση, βήματα_per_epoch - αυτά είναι τα βήματα αριθμού ανά εποχή που απαιτούνται, εποχές - αυτές είναι οι πόσες φορές το πρόγραμμα θα επαναληφθεί μέσω ενός πλήρους συνόλου δεδομένων, validation_data - αυτός είναι ο σύνδεσμος προς το σύνολο δεδομένων που χρησιμοποιείται για την επικύρωση, validation_steps - ο αριθμός των βημάτων που χρησιμοποιούνται για την επικύρωση, η επικύρωση πραγματοποιείται στο τέλος κάθε εποχής.

Γενικά, ένα πλήρες σκούπισμα ολόκληρου του συνόλου δεδομένων πρέπει να είναι πλήρες ανά εποχή. Ως εκ τούτου, για παράδειγμα, ένα σύνολο δεδομένων 1024 εικόνων θα απαιτήσει: Μέγεθος παρτίδας = 32, Βήματα ανά εποχή = 32, εποχές = 1. Κάθε βήμα περιλαμβάνει ολόκληρο το μέγεθος παρτίδας, οπότε με μέγεθος παρτίδας 32 τα βήματα θα είναι 32. Από την άλλη χέρι, είναι καλύτερο να έχετε μεγαλύτερο μέγεθος παρτίδας από τον αριθμό των κλάσεων, αυτό συμβαίνει επειδή εάν το μέγεθος της παρτίδας είναι μικρότερο, τότε κάθε βήμα δεν μπορεί να περιλαμβάνει μια εικόνα από κάθε κλάση.

Μόλις το μοντέλο ολοκληρώσει την εκπαίδευση, χρησιμοποιώντας το matplotlib το πρόγραμμα θα κάνει μια γραφική παράσταση των αποτελεσμάτων, αυτό δείχνει την ιστορία της εκπαίδευσης από την αρχή μέχρι το τέλος. Το γράφημα αποτελείται από ακρίβεια, ακρίβεια επικύρωσης, απώλεια και απώλεια επικύρωσης. Αυτό χωρίζεται ανά εποχή για να δείξει πώς προχώρησε η εκπαίδευση. Το τελευταίο στάδιο είναι να αποθηκεύσετε το μοντέλο ως αρχείο.h5 στο οποίο μπορείτε να έχετε πρόσβαση αργότερα για τη διαδικασία πρόβλεψης. Η αποθήκευση του μοντέλου σημαίνει ότι κάθε φορά που εκτελείται το πρόγραμμα πρόβλεψης το εκπαιδευτικό πρόγραμμα δεν χρειάζεται να τρέχει ξανά. Το εκπαιδευτικό πρόγραμμα μπορεί να διαρκέσει έως και 10 λεπτά ανά εποχή σε ένα βατόμουρο πι.

Επισυνάπτεται το σενάριο εκπαίδευσης:

Βήμα 3: Εφαρμογή των προβλέψεων της κάμερας Pi

Το επόμενο πρόγραμμα είναι το σενάριο πρόβλεψης και εκδότη.

Το πρώτο στάδιο είναι να φορτώσετε το μοντέλο χρησιμοποιώντας το model.load (). Το δεύτερο στάδιο είναι να επαναλάβετε τα καρέ από την κάμερα pi χρησιμοποιώντας opencv και στη συνέχεια να αλλάξετε το μέγεθος του πλαισίου στο ίδιο μέγεθος με τα μεγέθη εισόδου που χρησιμοποιούνται στο στάδιο της προπόνησης, 32 x 32 pixel. Μόλις γίνει αυτό, το νέο μέγεθος αλλάζει στο μοντέλο χρησιμοποιώντας το model.predict () που βγάζει έναν πίνακα, κάθε στοιχείο του πίνακα είναι ένα float από 0 έως 1, ο δείκτης στοιχείων είναι ο ίδιος με την κλάση που αντιπροσωπεύει, επομένως το πρώτο στοιχείο είναι η πρώτη κατηγορία και ο αριθμός είναι η πρόβλεψη της βεβαιότητας ότι η εικόνα προέρχεται από αυτήν την κλάση. Π.χ.

ΣΗΜΕΙΩΣΗ: Εάν δεν χρησιμοποιείτε την πλευρά του ρομπότ. Απλώς αφαιρέστε τις γραμμές:

"εισαγωγή rospy"

def talker (διεύθυνση):

μήνυμα = String ()

pub = rospy. Publisher ('robot', String, queue_size = 10)

rospy.init_node ('talker', anonymous = True)

μήνυμα = κατεύθυνση

rospy.loginfo (μήνυμα)

pub.publish (μήνυμα)"

"ομιλητής (σκηνοθεσία)"

Επισυνάπτεται το σενάριο της κάμερας Pi.

Βήμα 4: Ρομπότ Arduino

Το τελευταίο βήμα είναι το σενάριο του προγράμματος ρομπότ.

Αυτό είναι γραμμένο σε C ++ και είναι ένα αρχείο.ino για το arduino uno. Το πρόγραμμα απαιτεί τη βιβλιοθήκη ros που μπορείτε να βρείτε στο διαχειριστή βιβλιοθηκών στο ide. Μόλις εισαχθεί αυτό, υπάρχουν παραδείγματα αρχείων, επέλεξα να επεκτείνω το αρχείο led blink, καθώς αυτό θα έκανε έναν παρόμοιο στόχο με αυτό που χρειαζόμουν. Το πρόγραμμα συνεχίζει να κάνει κύκλους μέχρι να αποσυνδεθεί η τροφοδοσία, πρώτα ακούει το ρομπότ θέματος, όταν πιάσει μια εντολή από το συγκεκριμένο θέμα θα έχει μια εντολή if για να δει τι λέει η εντολή. Εάν η εντολή είναι αριστερή, τότε το σενάριο εκτελεί τη μέθοδο στροφής αριστερά, εάν η εντολή είναι δεξιά, τότε θα εκτελέσει τη μέθοδο στροφής δεξιά και αλλιώς θα εκτελέσει τη μέθοδο προώθησης. Αυτές οι τρεις μέθοδοι μοιάζουν πολύ μεταξύ τους, λένε ότι οι ψηφιακές ακίδες είναι είτε LOW (γείωση) είτε 100 (PWM) για αυτό, ώστε το ρομπότ να μην είναι πολύ γρήγορο λέγοντας στον οδηγό του κινητήρα να αφήσει μόνο λίγο τάση εξόδου. Η σειρά αυτών των εξόδων είναι αυτό που κάνει το ρομπότ να στρίψει αριστερά και δεξιά ή να προχωρήσει, αυτό οφείλεται στον προσανατολισμό της τάσης που πηγαίνει στους κινητήρες.

Επισυνάπτεται το σενάριο.ino για το arduino.

Βήμα 5: Δοκιμή

Δοκιμές
Δοκιμές
Δοκιμές
Δοκιμές
Δοκιμές
Δοκιμές

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

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

Επισυνάπτεται η έκθεση του Πανεπιστημίου μου για αυτό το έργο. Διαβάστε για περισσότερες λεπτομέρειες του έργου.

Βήμα 6: Όλα τα πρόσθετα αρχεία

Όλα τα πρόσθετα αρχεία
Όλα τα πρόσθετα αρχεία

Μερικά από αυτά ήταν δοκιμαστικά αρχεία που έφτιαξα στην πορεία.

Συνιστάται: