DIY RASPBERRY NEURAL NETWORK SEES ALL, RECOGNIZES SOME

As a fun project I thought I’d put Google’s Inception-v3 neural network on a Raspberry Pi to see how well it does at recognizing objects first hand. It [turned out to be] not only fun to implement, but also the way I’d implemented it ended up making for loads of fun for everyone I showed it to, mostly folks at hackerspaces and such gatherings. And yes, some of it bordering on pornographic — cheeky hackers.

An added benefit numerous pointed out is that, once installed, no internet access is required. This is state-of-the-art, standalone object recognition with no big brother knowing what you’ve been up to, unlike with that nosey Alexa.

But will it result in widespread helpful AI? If a neural network can recognize every object around it, will that result in human-like skills? Συνέχισε να διαβάζεις.

How To Do object Recognition

Inception object recognizer internals
The implementation consists of:

Raspberry Pi 3 model B

amplifier and speaker

PiCamera

momentary swtich

cellphone charger battery for the Pi

The heart of the required software is Google’s Inception neural network which is implemented using their TensorFlow framework. You can download it by following the TensorFlow tutorial for image recognition. The tutorial doesn’t involve any programing so don’t worry if you don’t know Python or TensorFlow. That is, unless you’re going to modify their sample code as I did.

classify_image.py printing that it saw a panda
The sample code takes a fixed named file including a picture of a panda and does object recognition on it. It gives the result by printing out that it saw a panda. But that wasn’t enough fun.

I hunted around for some text-to-speech software and found Festival. Now when it wants to say it saw a panda, I modified the sample code to run festival in a linux shell and tell it to actually say “I saw a panda” to the speaker.

Audio Playerhttps://hackaday.com/wp-content/uploads/2017/06/classify_speak_panda_audio.wav

00:00
00:00
00:00

But that still wasn’t fun enough. I connected a PiCamera to the Raspberry Pi, and had that take a photo and give it to the TensorFlow code to do object recognition. In the vernacular, it now ran inference on my photo.

And lastly, to make it all real easy I connected a momemtary switch to one of the Pi’s GPIO pins and took the photo when the momentary switch was pressed.

Here’s the Python program’s main() function before…

1
2
3
4
5
def main(_):
  maybe_download_and_extract()
  image = (FLAGS.image_file if FLAGS.image_file else
           os.path.join(FLAGS.model_dir, ‘cropped_panda.jpg’))
  run_inference_on_image(image)

… και μετά.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def main(_):
  os.system("echo %s | festival –tts" % "Wait while I prepare my brain…")

  maybe_download_and_extract()
  # creates graph from saved GraphDef.
  create_graph()

  # preparing for the switch
  GPIO.setmode(GPIO.BCM)
  GPIO.setup(17, GPIO.IN)

  camera = PiCamera()

  os.system("echo %s | festival –tts" % "I am ready to see things.")

  while True:
    # loop for the switch
    while (GPIO.input(17) == GPIO.LOW):
      time.sleep(0.01)

    # take and write a snapshot to a file
    image = os.path.join(FLAGS.model_dir, ‘seeing_eye_image.jpg’)
    camera.capture(image)

    os.system("echo %s | festival –tts" % "I am thinking about what you showed me…")
    human_string = run_inference_on_image(image)
    os.system("echo I saw a %s | festival –tts" % human_string)

The calls to os.system() are where I run the festival text-to-speech program to make it say something to the speaker.

maybe_download_and_extract() is where Google’s Inception neural network would be downloaded from the Internet, if it’s not already present. By default, it downloads it to /tmp/imagenet which is on a RAM disk. The first time it did this, I copied it from /tmp/imagenet to /home/inception on the SD card and now run the program using a command line that includes where to find the Inception network.

Running the inception object recognizer
The call to create_graph() was moved from inside the run_inference_on_image() function. create_graph() sets up the neural network, which you need do only once. previously the program was a one-shot deal, but now it has an unlimited while loop which calls run_inference_on_image() each time through the loop. Obviously, setting up the neural network is something you do only once (see our introduction to TensorFlow for much more about graphs) so it had to be moved above the loop.

The run_inference_on_image() function is where the image is given to the neural network to do the object recognition. It used to just print out whatever it thought was in the image, but I modified it to instead return the text string including what it thinks the object is, “coffee mug” for example. So the last line is where it would say”Είδα μια κούπα καφέ” στον ενισχυτή και το ηχείο.

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

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

Πόσο καλή είναι η αναγνώρισή του αντικειμένου

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

Ωστόσο, δεν κάνει καλά με τους ανθρώπους. Το δείχνοντάς το στο γραφείο μου αναγκάζει να πει ότι είδε ένα “κατάστημα καπνού, το καπνό κατάστημα, τον καπνό”, πιθανώς λόγω των ράφια του εξοπλισμού και των εξαρτημάτων ακριβώς πίσω μου. Ωστόσο, στέκεται ενάντια σε ένα κενό τοίχο, είπε ότι είδε ένα φούτερ, αφαιρώντας ότι είδε ένα μπλουζάκι μπλουζάκι, αφαιρώντας ότι, είπε “κορμούς κολύμβησης, κολύμπι κορμούς”, παρά το γεγονός ότι βλέπουμε μόνο το γυμνό ανώτερο κορμό και το κεφάλι μου. (Θα σας χαλαρώσω τη φωτογραφία.)

Imagenet δείγμα εικόνων κινητών τηλεφώνων

Imagenet δείγμα καφέ καφέ

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

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

Είναι το καλύτερο που μπορείτε να κάνετε;

Λοιπόν, κάθε αναγνώριση διαρκεί περίπου 10 δευτερόλεπτα σε ένα Raspberry PI 3 έτσι είτε αυτό πρέπει είτε να επιταχυνθεί ή ένας ταχύτερος επεξεργαστής χρησιμοποιείται, κατά προτίμηση ένα με ένα CUDA ενεργοποιημένο NVIDIA GPU επειδή αυτός είναι ο μόνος τύπος Tensorflow GPU που υποστηρίζει αυτήν τη στιγμή.

Το νευρικό δίχτυ της έναρξης είναι τόσο καλό όσο τα δεδομένα που εκπαιδεύονται. Τα ελαττώματα που επεσήμανα παραπάνω σχετικά με την αναγνώριση των κινητών τηλεφώνων και των ανθρώπων είναι ζητήματα με το σύνολο δεδομένων Imagenet. Μόνο το 3,46% του χρόνου είναι όλες οι 5 από τις καλύτερες εικασίες του λάθος, ενώ οι άνθρωποι που κάνουν την ίδια δοκιμασία είναι λάθος στις 5 καλύτερες εικασίες του 5% του χρόνου. Δεν είναι κακό.

Όπως επισημάνσαμε στο σύντομο άρθρο μας σχετικά με τα νευρικά δίκτυα Freaky Stuff σήμερα, τα μακρά βραχυπρόθεσμα μνήμη (LSTM) Neurals μπορούν να εξετάσουν αυτό που βλέπουν σε ένα μόνο πλαίσιο ενός βίντεο, λαμβάνοντας υπόψη το τι έφτασε στο βίντεο. Για παράδειγμα, έχει πολύ περισσότερη εμπιστοσύνη ότι είδε μια μπάλα παραλίας αντί για μια μπάλα μπάσκετ αν η προηγούμενη σκηνή ήταν αυτή ενός παραλιακού κόμματος. Αυτό διαφέρει από το νευρικό δίκτυο της ίδρυσης σε αυτή την έναρξη έχει μόνο την εικόνα που το δείξατε να συνεχίσετε.

Πού μας οδηγεί αυτό;

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

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

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

Πρόσφατες εργασίες από το Facebook με γεννητικά Adverserial δίκτυα (GANS) μπορεί να υπονοεί σε ένα σημείο εκκίνησης εδώ που περιέχει ένα τέτοιο μοντέλο και προγνωστική ικανότητα (αν δεν είστε εξοικειωμένοι με τους Gans, σας παραπέμπουμε και πάλι στο σύντομο άρθρο μας σχετικά με τα νευρικά δίκτυα Freaky Stuff σήμερα). Το “γεννητικό” μέρος του ονόματος υποδηλώνει ότι δημιουργούν εικόνες. Αλλά πολλά πιο συγκεκριμένα, αυτά είναι βαθιά περίπλοκα gans, που σημαίνει ότι περιλαμβάνουν μια κατανόηση του τι έχουν δει στις εικόνες που έχουν εκπαιδευτεί. Για παράδειγμα, γνωρίζουν τα παράθυρα, τις πόρτες και τις τηλεοράσεις και όπου πηγαίνουν στα δωμάτια.

Πρόβλεψη βίντεο ADGL
Τι γίνεται με τη λήψη προβλέψεων; Πολύ περισσότερη δουλειά από το Facebook περιλαμβάνει παραγωγή βίντεο. Χρησιμοποιώντας το Adversararial Differial Differe Prepitor (AGDL) Προβλέπουν τα επόμενα δύο πλαίσια ενός βίντεο. Στη φωτογραφία ενός παιχνιδιού μπιλιάρδου μπορείτε να δείτε το grounD Αλήθεια, δηλ. Αυτό που πραγματικά συνέβη και τι προβλεπόταν το δίκτυο AGDL. Δεν είναι πολύ μακριά στο μέλλον, αλλά είναι μια αρχή.

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

Κλείνοντας

Πού μπορείτε να έχετε δει το Neural Network της έναρξης που αναγνωρίζει τα αντικείμενα πριν; Έχουμε καλύψει [Lukas Biewald] χρησιμοποιώντας το σε ένα αυτοκίνητο RC για να αναγνωρίσει αντικείμενα στο γκαράζ / εργαστήριό του.

Ενώ αυτό [αποδείχθηκε ότι είναι διασκεδαστικό για όλους να χρησιμοποιήσουν όπως είναι, τι άλλες χρήσεις μπορείτε να σκεφτείτε για αυτό; Ποια χρήσιμη εφαρμογή μπορείτε να σκεφτείτε; Τι μπορεί να προστεθεί; Ενημερώστε μας στα σχόλια παρακάτω.

Leave a Reply

Your email address will not be published. Required fields are marked *