Πώς να (πραγματικά) εντοπίζετε εύκολα αντικείμενα με βαθιά μάθηση

Βρήκα μια δημοφιλής θέση στο hackernews με τον τίτλο Πώς να εντοπίσετε εύκολα αντικείμενα με βαθιά μάθηση στο Raspberry Pi. Το άρθρο εξετάζει το μοντέλο ανίχνευσης αντικειμένων YOLO που μπορεί να χρησιμοποιηθεί για ανίχνευση και ταξινόμηση αντικειμένων σε πραγματικό χρόνο. Το άρθρο συνεχίζει για να συζητήσει το μοντέλο σε υψηλό επίπεδο και να προχωρήσει σε μια υπηρεσία, η οποία πραγματοποιεί ανίχνευση αντικειμένων μέσω του API.

Το άρθρο παρέχει μια επισκόπηση υψηλού επιπέδου του μοντέλου YOLO, αλλά η αντίδρασή μου μετά την ανάγνωση του άρθρου μπορεί να συνοψιστεί καλύτερα με ένα σχόλιο από την ανάρτηση hackernews:

Πώς να σχεδιάσετε μια κουκουβάγια, ναι

Αυτή είναι η θέση που ήθελα να διαβάσω στο μοντέλο YOLO.

Κοιτάζετε μόνο μία φορά (YOLO)

Πριν από το YOLO, η περισσότερη ανίχνευση αντικειμένων χρησιμοποιούσε συρόμενα παράθυρα για την ανίχνευση αντικειμένων Αυτό ουσιαστικά σημαίνει ότι ένας αλγόριθμος σαρώνει την εικόνα χρησιμοποιώντας παράθυρα αυθαίρετου μεγέθους και ελέγχει αν υπάρχει ένα αντικείμενο που ανιχνεύει εκεί.

Συρόμενο παράθυρο που σαρώνει μια εικόνα

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

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

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

Η έξοδος του μοντέλου YOLO v3 είναι ένα σπειροειδές στρώμα (19, 19, 425). Οι (19, 19) είναι ο αριθμός των τετραγώνων στα οποία διαιρείται η εικόνα. Η τελευταία μονάδα (425) είναι μια συνένωση κάθε παραμέτρου κουτιού σύνδεσης, διαστήματα εμπιστοσύνης και πιθανότητες κλάσης.

Ένα πλαίσιο οριοθέτησης ορίζεται από 5 παραμέτρους: x, y, πλάτος, ύψος και τιμή εμπιστοσύνης. Ο αριθμός των κλάσεων (C) θα είναι ένα ζεστό διάνυσμα με όσες κατηγορίες το δίκτυο εκπαιδεύτηκε (στην περίπτωση αυτή 80). Και ο αριθμός των πλαισίων οριοθέτησης (Β) ρυθμίζεται κατά τη διάρκεια της εκπαίδευσης (στην περίπτωση αυτή 5 - βλέπε Διαστάσεις κουτιού συστοιχίας με άγκυρες). Το μέγεθος 425 στο στρώμα εξόδου είναι (B * (5 + C)) ή (5 * (5 + 80)) ή 425. Η έξοδος μπορεί στη συνέχεια να αναλύεται και να φιλτράρεται με βάση την κατηγορία και την εμπιστοσύνη. Από εκεί, μπορείτε να καθορίσετε ποιο επίπεδο εμπιστοσύνης θέλετε να εξετάσετε έναν αγώνα. Η αλλαγή αυτής της τιμής αλλάζει πόσες αντικείμενα ανιχνεύονται. Παρακάτω εμφανίζεται ένα όριο 0:

Το μοντέλο YOLO έχει μερικά ενδιαφέροντα χαρακτηριστικά που αξίζει να καταδυθείτε.

Offsets

Αντί να προβλέψουμε τις απόλυτες συντεταγμένες του πλαισίου οριοθέτησης, ο YOLO προβλέπει αντισταθμίσεις βάσει του τετραγώνου του πλέγματος. Χρησιμοποιεί μια λειτουργία sigmoid για να διατηρήσει τις μετατοπίσεις x και y μεταξύ 0 και 1 με το (0, 0) να είναι το επάνω αριστερό μέρος του τετραγώνου και το (1, 1) να είναι το κάτω δεξιά. Χωρίς αυτόν τον περιορισμό, οποιοδήποτε κέντρο χαρτονομισμάτων μπορεί να καταλήξει σε οποιοδήποτε σημείο της εικόνας, ανεξάρτητα από το πού προέρχεται.

Διαστάσεις κουτιού συστοιχίας με άγκυρες

Προκειμένου να βοηθήσει στην εκμάθηση των σωστών διαστάσεων για κάθε κιβώτιο, το YOLO παρέχει ορισμένες αρχικές τιμές (άγκυρες). Όπως αναφέρθηκε παραπάνω, υπάρχουν 5 πλαίσια οριοθέτησης για κάθε έξοδο. Οι έξοδοι για το ύψος και το πλάτος αυτών των τιμών πολλαπλασιάζονται με τις αντίστοιχες άγκυρες για τον προσδιορισμό των τελικών διαστάσεων του κιβωτίου. Εδώ είναι οι άγκυρες:

σειρά ([[0.57273, 0.677385],
       [1.87446, 2.06253],
       [3.33843, 5.47434],
       [7.88282, 3.52778],
       [9.77052, 9.16828]])

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

Εκπαίδευση πολλαπλών κλιμάκων

Όπως συμβαίνει με τις περισσότερες μεθόδους ανίχνευσης, το YOLO χρησιμοποιεί προ-εκπαιδευμένα επίπεδα από το ImageNet. Η χρήση προ-εκπαιδευμένων στρώσεων συνέλιξης εξοικονομεί πολύ χρόνο, καθώς επιτρέπει σε ένα μοντέλο να ταιριάζει με απλές άκρες και βασικές λειτουργίες χωρίς να ξεκινά από το μηδέν. Αλλά τα περισσότερα προ-εκπαιδευμένα δίκτυα εκπαιδεύονται σε εικόνες με διαστάσεις μικρότερες από 256 x 256, ενώ η YOLO χρησιμοποιεί είσοδο 448 x 448, αν και αυτό είναι ευέλικτο. Προκειμένου να προσαρμοστούν για τις μεγαλύτερες διαστάσεις εικόνας, το βασικό προ-εκπαιδευμένο δίκτυο έχει βελτιωθεί και έχει εκπαιδευτεί για 10 εποχές στο μεγαλύτερο μέγεθος εικόνας.

Δεδομένου ότι το μοντέλο YOLO χρησιμοποιεί μόνο συνελικτικά στρώματα, αυτό επιτρέπει την αλλαγή της εισόδου. Κατά τη διάρκεια της εκπαίδευσης, η ομάδα άλλαξε τις διαστάσεις εισόδου κάθε 10 παρτίδες. Δεδομένου ότι τα μοντέλα down-samples με συντελεστή 32, χρησιμοποίησαν διαστάσεις εικόνας που είναι πολλαπλάσια των 32, με το μικρότερο να είναι 320 x 320 και το μεγαλύτερο 608 x 608. Αυτό βοήθησε στην οικοδόμηση ενός πιο ισχυρού μοντέλου.

Εκπαίδευση για ταξινόμηση και ανίχνευση

Κατά τη διάρκεια της εκπαίδευσης, η ομάδα ανέλυσε τα σύνολα δεδομένων ανίχνευσης και ταξινόμησης. Διαφορετικές λειτουργίες απώλειας χρησιμοποιήθηκαν για κάθε μία κατά τη διάρκεια της αναπαραγωγής, ανάλογα με την εργασία. Αυτό επέτρεψε στο μοντέλο να μάθει από ένα πολύ μεγαλύτερο σύνολο δεδομένων. Ωστόσο, τα σύνολα δεδομένων περιέχουν διαφορές στον τρόπο με τον οποίο επισημαίνουν αντικείμενα. Για παράδειγμα, τα σύνολα δεδομένων ανίχνευσης έχουν γενικές ετικέτες, όπως "σκύλος" ή "βάρκα". Ωστόσο, το ImageNet έχει πιο συγκεκριμένες ταξινομήσεις όπως το "Norfolk Terrier". Έτσι, η ομάδα χρησιμοποίησε το WordNet, μια βάση δεδομένων γλώσσας που δομεί τις λέξεις και τον τρόπο με τον οποίο συνδέονται. Έτσι, οι "Norfolk terrier" και "Yorkshire terrier" είναι και οι δύο υποόνες του "terrier" που είναι ένας τύπος "κυνηγετικού σκύλου" που είναι ένας τύπος "σκύλου" και ούτω καθεξής.

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

Τρέξιμο YOLO

Η ανίχνευση αντικειμένων σε πραγματικό χρόνο απαιτεί μια GPU, αλλά ανίχνευση αντικειμένων σε μία μόνο εικόνα είναι δυνατή σε μια CPU λόγω της αποδοτικότητας που συζητήθηκε. Ο ιστότοπος YOLO παρέχει έναν καλό οδηγό:

git κλώνος https://github.com/pjreddie/darknet
cd darknet
φτιαχνω, κανω
wget https://pjreddie.com/media/files/yolov3.weights
./darknet ανιχνεύστε cfg / yolov3.cfg yolov3.weights data / dog.jpg

Υπάρχει επίσης μια μίνι έκδοση με βάρη που είναι μόνο 4,8 MB, τα οποία υποτίθεται ότι τρέχουν σε ένα βατόμουρο pi, αλλά δεν το έχω φτάσει να δουλεύει.

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

Τελικές σκέψεις

Το πιο εντυπωσιακό πράγμα για το YOLO είναι το γεγονός ότι λειτουργεί. Η αρχιτεκτονική μου έχει νόημα. Έχει όλα όσα θα περίμενε κανείς σε μια σύγχρονη αρχιτεκτονική ταξινόμησης εικόνων: συνελικτικές 2δ στρώσεις, διαρροές relu, κανονικοποίηση παρτίδων και μέγιστη συγκέντρωση. Στην πραγματικότητα, μεγάλο μέρος του μοντέλου είναι μια εκ βάθρων έκδοση του Darknet-19. Ωστόσο, το YOLO έχει κάποιες δημιουργικές πινελιές.

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

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

Ο Jeremy Howard από το Fast.ai μίλησε και για αυτό. Ο καθορισμός των λειτουργιών απώλειας είναι περισσότερο μια τέχνη παρά μια επιστήμη. Με πονάει να σκεφτόμουν πόσο χρόνο θα δαπανήσει η ομάδα YOLO για να καθορίσει τη σωστή λειτουργία απώλειας για να επιτύχει καλά αποτελέσματα. Και έπρεπε επίσης να εξισορροπήσουν πόσο να βαρύνουν κάθε απώλεια όταν εκπαιδεύονται στα δύο διαφορετικά σύνολα δεδομένων (COCO και ImageNet).

Δεν ήμουν σε θέση να σκάβω στη λειτουργία απώλειας από YOLO v3, αλλά εδώ είναι η λειτουργία απώλειας για την έκδοση 1:

Επίσης, η ενσωμάτωση με το WordNet βρήκε ιδιαίτερα εντυπωσιακή. Δεν είμαι σίγουρος αν η τεχνική αναπτύχθηκε από την ομάδα YOLO, αλλά είναι πιθανό να αντιγραφεί προς τα εμπρός.

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