Εκπαίδευση νευρωνικού δικτύου για αυτόνομη οδήγηση

Το τεχνητό νευρωνικό δίκτυο είναι το πιο κρίσιμο μέρος ενός αυτόνομου οχήματος, που εγγυάται την οδηγική του συμπεριφορά. Ως εκ τούτου η αποτελεσματική εκπαίδευση του νευρωνικού δικτύου έχει μεγάλη σημασία. Μέρος της εκπαίδευσης αποτελεί η προεπεξεργασία των δεδομένων που έχουν ληφθεί κατά τη διάρκεια της οδήγησης και αποτελούν το σύνολο δεδομένων εκπαίδευσης. Σε αυτό το post περιγράφω εν συντομία μία αλυσίδα επεξεργασίας εικόνων που προηγείται της εκπαίδευσης νευρωνικών δικτύων για αυτόνομη οδήγηση. η αλυσίδα περιλαμβάνεται στο πρόγραμμα αυτόνομης οδήγησης Burro.

Χρησιμότητα

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

Συστατικά της αλυσίδας

Η αλυσίδα επεξεργασίας που θα παρουσιαστεί αποτελείται από συστατικά που είναι στην πραγματικότητα απλές συναρτήσεις-γεννήτριες (generator functions) της Python. Η κάθε συνάρτηση δέχεται σαν είσοδο ενα tuple με τιμές εικόνας και διεύθυνσης, και εξάγει επίσης ένα tuple με τις μετασχηματισμένες τιμές. Ανάλογα με τον σκοπό για τον οποίο έχει δημιουργηθεί, μια συνάρτηση μπορεί να μετασχηματίζει οποιοδήποτε εκ των στοιχείων εισόδου. Στο παρακάτω παράδειγμα η συνάρτηση αποδέχεται μια εικόνα και μία γωνία στροφής σε ακτίνια και επιστρέφει την εικόνα αυτούσια και το ημίτονο της γωνίας:

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

Οι συναρτήσεις συνδέονται κατά την εκτέλεση και σχηματίζουν μια αλυσίδα. Συνολικά 19 συναρτήσεις είναι διαθέσιμες σε τέσσερις ενότητες: διαχείριση αρχείων, μετασχηματισμοί εικονας, μετασχηματισμοί σε array numpy, και λοιπά στοιχεία. Μία ειδική συνάρτηση σαρώνει έναν καθορισμένο υποκατάλογο για αρχεία εικόνας με ειδικό ονόμα από το οποίο προκύπτει η τιμή της γωνίας στροφής που αντιστοιχεί στην εικόνα. Αυτή η συνάρτηση είναι πάντα στην αρχή της αλυσίδας.

Εκπαίδευση με χρήση της αλυσίδας μετασχηματισμού

Στο σχήμα που ακολουθεί φαίνεται η ακολουθία των συναρτήσεων της αλυσίδας μετασχηματισμού που περιλαμβάνονται στο Burro:

Κατάρτιση αγωγού στη Burro
Η αλυσίδα επεξεργασίας του Burro

Η λειτουργία του καθενός από τα συστατικά είναι ως εξής:

  • filename_generator απαριθμεί αρχεία που υπάρχουν στον καθορισμένο υποκατάλογο
  • nth_select είτε περιλαμβάνει είτε αποκλείει κάθε νιοστό στοιχείο και χρησιμοποιείται στο validation
  • equalize_probs επιλεκτικά παραλείπει τα παραδείγματα με βάση τη συχνότητα εμφάνισης, ώστε να εξισώσει τις συχνότητες εμφάνισής τους
  • image_generator φορτώνει μια εικόνα PIL που αντιστοιχεί στο όνομα αρχείου στην είσοδο
  • image_mirror, image_resize και image_crop πραγματοποιούν αντικατοπτρισμό, αλλαγή μεγέθους και περικοπή στην εικόνα
  • array_generator μετατρέπει την εικόνα σε ένα numpy array
  • center_normalize ομαλοποιεί τα δεδομένα εικόνας και τα μετατρέπει ώστε ο μέσος να βρίσκεται στο μηδέν
  • brightness_shifter ρυθμίζει τυχαία την φωτεινότητα της εικόνας
  • gaussian_noise προσθέτει Γκαουσιανό θόρυβο στην εικόνα
  • Τέλος η category_generator μετατρέπει την τιμή ανυσμάτων εξόδου σε κωδικοποίηση one-hot, εφόσον έχει καθοριστεί

 

Εκπαίδευση ενός μοντέλου

Η αλυσίδα επεξεργασίας που παρουσιάστηκε έχει υλοποιηθεί σαν μέρος του Burro. Στο Github υπάρχει στο κλαδί training. Ο ευκολότερος τρόπος να ξεκινήσετε είναι να κάνετε λήψη του αρχείου install-trainer.sh στον υπολογιστή σας και να το εκτελέσετε:

Μόλις τρέξει θα δημιουργήσει ένα νέο φάκελο για την υποδομή εκπαίδευσης και θα εγκαταστήσει όλα τα απαραίτητα αρχεία. Πρέπει να έχετε τις απαραίτητες βιβλιοθήκες εγκατεστημένες στο σύστημά σας. Το Burro δεν να εγκαταστήσει πακέτα system-wide ωστε να αποφευχθούν τυχόν προβλήματα με το σύστημά σας. Κατά βάση θα πρέπει να έχετε εγκατεστημένο το Tensorflow είτε για CPU η GPU.

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

Εναλλακτικά μπορειτε να εκπαιδεύσετε ένα μοντέλο που εξάγει πιθανότητες ανά κατηγορία γωνίας στροφής (categorical):

Η εκπαίδευση θα ξεκινήσει και το Keras θα σας ενημερώνει κατά διαστήματα για την πρόοδο της εκπαίδευσης.

Εν κατακλείδι

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

Αν δεν έχετε κατασκευάσει ακόμη ένα αυτόνομο όχημα, και σας ενδιαφέρει, είναι πολύ εύκολο. Το Backyard Robotics περιέχει tutorials και οδηγούς με έτοιμα μοντέλα και λογισμικό.

Έχετε δημιουργήσει το δικό σας όχημα ή νευρωνικό δίκτυο; Μοιραστείτε την εμπειρία σας στα σχόλια παρακάτω!

Για περισσότερα tutorials, πειράματα και ενημερώσεις, εγγραφείτε στο email μας:

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.