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? Weiter lesen.

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)

… und danach.

1.
2.
3
4.
5.
6.
7
8
9
10
11
12
13
14
fünfzehn
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”Ich habe einen Kaffeetasse an den Verstärker und den Lautsprecher gesehen.

Das Boxen alles, was hoch ist, gab mir ein kleines, Standalone-Paket, das von jemandem herumgetragen und ausprobiert werden konnte. Hier ist ein Video davon in Aktion.

Eine Verbesserung wäre, um einen kleinen Bildschirm hinzuzufügen, so dass der Benutzer sehen konnte, was die Videokamera sieht, aber die Picamera hat einen breiten Sehwinkel und ein Bildschirm ist nicht erforderlich, um nicht erforderlich zu sein.

Wie gut ist die Objekterkennung

Inception einen Tabakladen sehen
Wenn Sie ein Mobiltelefon zeigen, führt dies oft dazu, dass es ein Mobiltelefon sah, aber in einigen Fällen ein iPod. Bislang hat es jedoch jedes Mal Wasserflaschen und Kaffeetassen geeignet.

Es macht jedoch nicht gut mit den Menschen. Wenn ich auf mich in meinem Büro zeigt, gibt es zu sagen, dass es einen “Tabakshop, Tobacconconic-Shop, Tobacconist” gesehen hat, wahrscheinlich aufgrund der Regale der Ausrüstung und Teile direkt hinter mir zurückzuführen. Aber an einer leeren Wand stand, sagte es jedoch, dass es ein Sweatshirt sah, und entfernte, dass es ein T-Shirt sah, das beseitigt, dass es “Badestämme, schwimmende Trunks” sah, obwohl er nur mein nackter oberer Torsos und den Kopf sah. (Ich werde dir das Foto ersparen.)

Imagentet-Beispiel-Mobiltelefonbilder

ImageTet-Probe-Kaffeetassenbilder

Das neuronale Netzwerk wird auf einem Datensatz, der als Imagentenet, der Version von der großen visuellen Anerkennungsherausforderung von 2012, ausgebildet. Wie Sie von dieser kleinen Probe aus der Mobiltelefonklasse sehen können, sind einige der Telefonbilder ein wenig datiert. Objekte wie Kaffeetassen ändern sich jedoch nicht im Laufe der Zeit.

Aber das hat nicht jeden aufgehört, der mit ihm spielte, um Spaß zu haben, mit dem Testen auf alles in Sichtweite zu testen, wie er zum ersten Mal einen Zauberstab fand, und winkte es, um zu sehen, was er zaubern.

Ist das das Beste, was du tun kannst?

Nun, zunächst aus, jede Erkennung dauert etwa 10 Sekunden auf einem Raspberry Pi 3, so dass entweder erfahren oder ein schnellerer Prozessor verwendet werden muss, vorzugsweise eines mit einer Cuda-fähigen NVIDIA GPU, da dies derzeit der einzige Typ von GPU Tensorflow ist, der derzeit derzeit unterstützt.

Das Inception Neuronal Net ist nur so gut wie die ausgebildeten Daten. Die Mängel, auf die ich oben hinsichtlich der Erkennung von Mobiltelefonen hingewiesen habe, und Personen sind Probleme mit dem Imageet-Datensatz. Nur 3,46% der Zeit sind alle 5 ihrer besten Vermutungen falsch, während die Menschen, die denselben Test tun, in ihren 5 besten Vermutungen von 5% der Zeit falsch sind. Nicht schlecht.

Da wir uns in unserem Kurzartikel über die freaky Sachen aufwiesen, können neuronale Netzwerke heute längere Kurzfristige Memory (LSTM) neuronale Netzwerke untersuchen, was sie in einem einzigen Rahmen eines Videos sehen, während sie berücksichtigt werden, während er berücksichtigt, was zuvor in dem Video kam. Zum Beispiel hat es viel mehr Zuverlässigkeit, dass es einen Strandball anstelle eines Korbkugels sah, wenn die vorangegangene Szene das einer Strandparty war. Das unterscheidet sich von dem inzeptten neuronalen Netzwerk, das in diesem Inception nur das Bild hat, das Sie anwenden, um weiterzumachen.

Woher kommt das uns?

Wird das Objekterkennungsergebnis in weit verbreitet hilfreicher AI mit humanähnlichen Fähigkeiten verbessert? Die Evolution des Auges wird häufig als Hauptursache für die Explosion in Lifeformen, die vor etwa 541 Millionen Jahren bekannt ist, oft als Hauptursache für die Explosion, obwohl es vor etwa 541 Millionen Jahren bekannt ist, obwohl es viel Argument darüber gibt, dass dies diese Ursache ist.

Als sich diese Augen entwickelten, gab es jedoch bereits eine Form des Gehirns, um sie zu benutzen. Dieses Gehirn hat die Sinne der Berührung, Vibration und Geruch bereits bewährt. So verbesserte Objekterkennung allein würde keine Revolution verursachen. Für menschliche Fähigkeiten brauchen unsere AIS viel mehr Intelligenz. Wir haben derzeit nur Bits und Ideen, was wir dafür brauchen.

Was zahlreich ist, ist, dass unser AI Vorhersagen müsse, damit er planen könnte. Dafür könnte es ein internes Modell oder ein Verständnis der Welt haben, die als Grundlage für diese Vorhersagen verwendet werden kann. Für die menschliche Fähigkeit, ein Lötvorschlag an einen Draht anzuwenden, würde ein internes Modell vorhersagen, was passieren würde, wenn der Vorschlag angemeldet wird, und darauf basierend darauf planen. Wenn der Vorschlag den Draht berührt, wenn die Dinge nicht wie vorhergesagt gehen, würde die AI reagieren.

Die jüngsten Arbeiten von Facebook mit generativen bensierten Netzwerken (Gans) können hier auf einem Ausgangspunkt hinweisen, der eine solche Modell- und Vorhersagefunktion enthält (wenn Sie nicht mit Gans vertraut sind, reflektieren wir Sie erneut in unseren kurzen Artikel über das freaky Sachen neuronale Netzwerke heute machen). Der “generative” Teil des Namens impliziert, dass sie Bilder generieren. Dies ist jedoch viel genauer gesagt, diese sind zutiefst verwunraten Gans, was bedeutet, dass sie ein Verständnis dafür einbeziehen, was sie in den dargestellten Bildern gesehen haben, an denen sie trainiert wurden. Sie wissen zum Beispiel über Windows, Türen und Fernsehgeräte und wo sie in Räumen gehen.

ADGL-Videoprozenten.
Was ist mit Vorhersagen? Viel mehr Arbeiten von Facebook beinhaltet die Videoerzeugung. Die Verwendung von Gradientenunterschiedsverlustprädiktoren (AGDL) prognostizieren, was die nächsten beiden Frames eines Videos sein sollten. Auf dem Foto eines Billard-Spiels können Sie das Groun sehend Wahrheit, d. H. Was ist wirklich passiert, und was das AgDL-Netzwerk vorhergesagt hat. Es ist nicht weit in die Zukunft, aber es ist ein Anfang.

Das sind mindestens kleine Schritte auf dem Weg von einem naiven Objekterkenner zu einem mit humanähnlichen Fähigkeiten.

Abschließend

Wo könnten Sie das Inception neuronal Network gesehen haben, das Objekte vorher erkannt hat? Wir haben [Lukas Biewald] mit der Verwendung auf einem RC-Auto abgedeckt, um Objekte in seiner Garage / Workshop zu erkennen.

Während dieser [herausstellte sich heraus], dass jeder für alle Spaß macht, wie es ist, welche anderen Anwendungen können Sie dafür denken? Welche hilfreiche Anwendung kannst du denkst? Was kann hinzugefügt werden? Teilen Sie uns in den Kommentaren unten mit.

Back to top