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? Jatka lukemista.

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)

… ja jälkeen.

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”Näin kahvin muki” vahvistimeen ja kaiuttimeen.

Nyrkkeily kaikki, mitä ylös antoi minulle pienen, itsenäisen paketin, joka voitaisiin kuljettaa ja kokeilla kenenkään. Tässä on video siitä toiminnassa.

Parannus olisi lisätä pieni näyttö niin, että käyttäjä voi nähdä, mitä videokamera näkee, mutta Picameralla on laaja näkökulma ja näyttö osoittautuu tarpeelliseksi.

Kuinka hyvä on sen objektin tunnistus

Alustaminen, joka näkee tupakan
Näytetään, että matkapuhelin johtaa usein siihen sanomalla, että se näki matkapuhelimen, mutta joissakin tapauksissa iPod. Tähän mennessä se on kuitenkin saanut vesipulloja ja kahvi mukit, jotka sopivat joka kerta.

Se ei kuitenkaan tee hyvin ihmisten kanssa. Osoita se minulle toimistossani aiheuttaa sen sanovan, että se näki “tupakkakaupan, tupakkakaupan, tupakkauksen”, luultavasti johtuen laitteiden ja osien hyllyistä. Kuitenkin seisoo tyhjä seinä se sanoi, että se näki pusero, poistaen, että se näki tee paita, poistamalla, se sanoi, että “uiminen rungot, uimapuku”, huolimatta vain paljain ylävartalon ja pääni. (Saat sinut valokuvaan.)

Imageenet näyte Matkapuhelin kuvat

ImageNet näyte kahvi muki kuvat

Neuraaliverkosto on koulutettu datelle nimeltä ImageNet, versio suuresta visuaalisesta tunnistushaasteesta. Kuten näet tästä pienestä näyteestä matkapuhelinluokasta, osa puhelinkuvista on hieman päivätty. Kuitenkin esineet, kuten kahvi mukit eivät muutu ajan mittaan.

Mutta se ei pysäyttänyt kaikkia, jotka pelasivat sen hauskaa, kävelemästä sen testaamisesta kaikesta silmissä, kuten löytää taikasauva ensimmäistä kertaa ja heiluttaen sen ympärille, mitä se voisi herättää.

Onko se paras voit tehdä?

Well, first off, each recognition takes around 10 seconds on a Raspberry Pi 3 so either that has to be sped up or a faster processor used, preferably one with a CUDA-enabled Nvidia GPU because that’s the only type of GPU TensorFlow currently supports.

Aloitusvoide on vain yhtä hyvä kuin tiedot, jotka on koulutettu. Edellä mainitut viat, jotka koskevat matkapuhelinten tunnistamista ja ihmisiä, ovat ongelmia Imageset-tietokannan kanssa. Vain 3,46% ajasta on kaikki 5 parhaan arvauksen väärin, kun taas ihmiset tekevät saman testin väärin 5 parhaiten arvailussa 5% ajasta. Ei paha.

Kun huomautimme lyhyessä artikkelissamme Freaky Stuffin hermoverkot Tee tänään, pitkä lyhyen aikavälin muisti (LSTM) Neuraaliset verkot voivat tutkia, mitä he näkevät videon yhdellä kehyksellä ottaen huomioon, mitä videota tuli ennen videossa. Esimerkiksi se on paljon enemmän luottamusta, että se näki rantapallon korin pallon sijaan, jos edeltävä kohtaus oli rannalla. Tämä eroaa inception hermoverkosta tässä alussa on vain kuva, jonka näytät sen jatkaaksesi.

Missä tämä saa meidät?

Parantaa objektin tunnistus johtaa laajalle hyödylliselle AI: lle ihmisen kaltaisilla taitoilla? Silmän kehitystä mainitaan usein tärkeänä syynä räjähdykseen, joka tunnetaan nimellä Cambrian räjähdyssään noin 541 miljoonaa vuotta sitten, vaikka on paljon väitettä siitä, että se aiheuttaa.

Kun nämä silmät kehittyivät kuitenkin, oli jo jonkinlainen aivot käyttämään niitä. Että aivot ovat jo käsitellyt kosketuksen, tärinän ja hajujen aistit. Joten parannettu objektin tunnistus ei yksinään aiheuttanut vallankumousta. Ihmisen kaltaisille taitoille AIS tarvitsisi paljon älykkäämpiä. Meillä on tällä hetkellä vain bittiä ja kappaleita siitä, mitä tarvitsemme.

Mitä lukuisia sopia on, että AI: n olisi tehtävä ennusteita, jotta se voisi suunnitella. Sillä sillä voi olla sisäinen malli tai ymmärrys maailmasta käyttää perustana näille ennusteille. Sisäinen malli ennustaa, mikä tapahtuisi, kun ehdotus teki yhteyden ja sitten suunnitella sitä. Kun ehdotus koskettaa lankaa, jos asiat eivät mene ennustetuiksi, sitten AI reagoi.

Äskettäinen työ Facebookista generaattorilla vastustavilla verkoilla (Gans) voi vihjata lähtökohtana täällä, joka sisältää tällaisen mallin ja ennakoivan kyvyn (jos et tunne Gania, me jälleen viittaavat sinuun lyhyeksi artikkelimme freaky tavaroista hermoverkoista Tee tänään). Nimen “generatiivinen” osa tarkoittaa, että ne tuottavat kuvia. Mutta paljon tarkemmin, nämä ovat syvästi mutkikas gans, mikä tarkoittaa, että ne sisältävät ymmärrystä siitä, mitä he ovat nähneet kuvissa, joita he ovat koulutettuja. Esimerkiksi he tietävät ikkunoista, ovista ja televisioista ja missä he menevät huoneisiin.

ADGL-videon ennusteet
Entä ennusteiden tekeminen? Paljon työtä Facebookista sisältää videon sukupolven. Adversarial Gradient Differend Betes ennustajien (AGDL) avulla he ennustavat, mitä seuraavien kahden videon kehyksen pitäisi olla. Kuvassa biljardipeli näkyy grounD totuus, ts. Mitä todella tapahtui ja mitä AGDL-verkosto ennusti. Se ei ole kovin kaukana tulevaisuuteen, mutta se on alku.

Nämä ovat ainakin pieniä askeleita polulla naiivi-objektin tunnistajan yhdelle ihmisen kaltaisista taitoista.

Sulkemalla

Missä olisit nähnyt alkuperän hermoverkon tunnistamalla esineitä ennen? Olemme kattaneet [Lukas Biewald] käyttämällä sitä RC-autossa tunnistamaan esineitä autotalli / työpaja.

Vaikka tämä [osoittautui] hauskaa kaikille, joita haluat käyttää, mitä muita käyttötarkoituksia voitko ajatella sitä? Mikä hyödyllinen sovellus voi ajatella? Mitä voidaan lisätä? Kerro meille alla olevissa kommenteissa.

Leave a Reply

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