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? Citește mai departe.

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)

… si dupa.

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”Am văzut o cană de cafea” la amplificator și vorbitor.

Boxing tot ce-mi mi-a dat un pachet mic, independent, care ar putea fi transportat și a încercat de oricine. Iată un videoclip cu acțiune.

O îmbunătățire ar fi adăugarea unui ecran mic, astfel încât utilizatorul să poată vedea ce vede camera video, dar Picamera are un unghi larg de vederi și un ecran se dovedește a fi necesar.

Cât de bună este recunoașterea obiectului

Incepție Văzând un tutcconist
Arătând că un telefon mobil rezultă adesea în ea spunând că a văzut un telefon mobil, dar în unele cazuri un iPod. Cu toate acestea, până acum a primit sticle de apă și cani de cafea adecvate de fiecare dată.

Cu toate acestea, nu face bine cu oamenii. Întindeți-l la mine în biroul meu, îi determină să spună că a văzut un “magazin de tutun, magazin de tutun, tutunconist”, probabil datorită rafturilor de echipamente și părți direct în spatele meu. Cu toate acestea, în picioare împotriva unui perete gol, a spus că a văzut o bluză, îndepărtându-se că a văzut o cămașă de tee, îndepărtând asta, a spus “trunchiuri de baie, trunchiuri de înot”, în ciuda vederii doar trunchiul și capul meu. (Îți voi scuti fotografia.)

Imagini Imagini de la Imagenet

Imagini Imagini de cafea eșantion de cafea

Rețeaua neurală este instruită pe un set de date numit Imagenet, versiunea de la provocarea mare de recunoaștere vizuală din 2012. Acest set de date constă dintr-o imensă colecție de imagini împărțite în 1000 de clase, fiecare clasă, inclusiv imagini ale unui anumit obiect. După cum puteți vedea din acest mic eșantion din clasa de telefonie mobilă, unele dintre imaginile telefonului sunt puțin datate. Cu toate acestea, obiectele cum ar fi cani de cafea nu se schimbă în timp.

Dar asta nu a împiedicat pe toți cei care au jucat cu ea să se distreze, mergând în jurul testelor pe tot ceea ce este în vedere, cum ar fi găsirea unei baghete magice pentru prima dată și fluturând-o în jur pentru a vedea ce ar putea convoca.

Este cel mai bun lucru pe care îl puteți face?

Ei bine, în primul rând, fiecare recunoaștere durează aproximativ 10 secunde pe o zmeură PI 3, astfel încât trebuie să fie accelerată sau un procesor mai rapid utilizat, de preferință unul cu un CDA-Activat NVIDIA GPU deoarece acesta este singurul tip de GPU Tensorflow suportă în prezent.

Incepția neuronală neuronală este la fel de bună ca și datele pe care le-a antrenat. Defectele pe care le-am subliniat mai sus privind recunoașterea telefoanelor mobile și a persoanelor sunt probleme cu setul de date Imagenet. Doar 3,46% din timp sunt toate cele 5 dintre cele mai bune presupuneri Greutate, în timp ce oamenii care fac același test sunt greșite în cele mai bune 5 presupuneri de 5% din timp. Nu-i rău.

Așa cum am arătat în scurt articol despre chestii ciudate rețele neuronale, rețelele neuronale pe termen scurt (LSTM) pot examina ceea ce văd într-un singur cadru al unui videoclip, ținând cont de ceea ce a venit înainte în videoclip. De exemplu, are mult mai multă încredere că a văzut o minge de plajă în loc de o minge de coș dacă scena precedentă a fost cea a unei petreceri de plajă. Aceasta diferă de rețeaua neuronală de inceput din acea început are doar imaginea pe care o arătați să continue.

Unde ne face asta?

Îmbunătățirea recunoașterii obiectului rezultă în AI utile pe scară largă cu abilități asemănătoare omului? Evoluția ochiului este adesea citată ca o cauză majoră a exploziei în formarea de viață cunoscută sub numele de explozia Cambrian de aproximativ 541 milioane de ani în urmă, deși există mult argument în legătură cu această cauză.

Când acei ochi au evoluat, totuși, a existat deja o formă de creier să le folosească. Acest creier a tratat deja simțurile de atingere, vibrații și miros. Îmbunătățirea recunoașterii obiectului nu ar provoca o revoluție. Pentru abilitățile asemănătoare omului, AIS ar avea nevoie de multă inteligență. În prezent, avem doar biți și bucăți de idei despre ceea ce avem nevoie pentru asta.

Ce numeroase sunt de acord este că AI noștri ar trebui să facă predicții, astfel încât să poată planifica. Pentru că ar putea avea un model intern sau o înțelegere a lumii să utilizeze ca bază pentru aceste previziuni. Pentru abilitățile umane de a aplica o sugestie de lipit la un fir, un model intern ar prezice ce s-ar întâmpla atunci când sugestia a intrat în contact și apoi planifică pe baza asta. Când sugestia contactează firul, dacă lucrurile nu merg așa cum a fost prezis, atunci AI ar reacționa.

Lucrările recente de pe Facebook cu rețele adversale generative (GANS) pot sugera într-un punct de plecare aici care conține un astfel de model și capacitate predictivă (dacă nu sunteți familiarizați cu gasele, ne referim din nou la articolul nostru scurt despre rețelele neuronale ciudate face astăzi). Partea “generativă” a numelui implică faptul că generează imagini. Dar mult mai precis, acestea sunt gase profund convoluate, ceea ce înseamnă că includ o înțelegere a ceea ce au văzut în imaginile pe care le-au fost instruite. De exemplu, știu despre ferestre, uși și televizoare și unde merg în camere.

ADGL Predicții video
Cum rămâne cu predicțiile? Mult mai multe lucrări de la Facebook implică generarea video. Folosind predictorii de pierdere a gradientului de gradient adversar (AGDL) prezic ce urmează să fie următoarele două cadre ale unui videoclip. În fotografia unui joc de biliard puteți vedea grounulD Adevăr, adică ceea ce sa întâmplat cu adevărat și ce a prezis rețeaua AGDL. Nu este prea departe în viitor, dar este un început.

Acestea sunt cel puțin mici pași pe calea de la un recunoscător al obiectului naiv la unul cu abilități asemănătoare omului.

În încheiere

În cazul în care ați văzut rețeaua neurală inițială care recunoaște obiectele înainte? Am acoperit [Lukas Biewald] folosind-o pe o mașină RC pentru a recunoaște obiectele din garajul / atelierul său.

În timp ce acest lucru [sa dovedit a fi] distractiv pentru toată lumea să folosească ca și ce alte utilizări vă puteți gândi pentru asta? Ce aplicație utile vă puteți gândi? Ce poate fi adăugat? Spuneți-ne în comentariile de mai jos.

Leave a Reply

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