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? Les videre.
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)
… og etter.
1
2.
3.
4.
5
6
7
8
9
10
11
12
1. 3
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”Jeg så en kaffekrus” til forsterkeren og høyttaleren.
Boksing alt det som ga meg en liten, frittstående pakke som kunne bæres rundt og prøvd av noen. Her er en video av det i aksjon.
En forbedring ville være å legge til en liten skjerm slik at brukeren kunne se hva videokameraet ser, men Picamera har en bred servinkel og en skjerm viser seg å være ikke nødvendig.
Hvor bra er dens gjenstandsgjenkjenning
Begynnelsen ser en tobakk
Viser det en mobiltelefon resulterer ofte i det å si at det så en mobiltelefon, men i noen tilfeller en iPod. Men så langt har det fått vannflasker og kaffekopper passende hver gang.
Det gjør imidlertid ikke bra med folk. Peker det på meg på kontoret mitt fører til at det så at det så en “tobakksbutikk, tobakkskonkurransebutikk, tobakkspor”, sannsynligvis på grunn av hyllene av utstyr og deler rett bak meg. Men står mot en tom vegg det sa det så et genser, fjernet at det så en tee skjorte, fjernet det, sa det “badebukser, badebukser”, til tross for å se bare min bare øvre torso og hode. (Jeg vil spare deg på bildet.)
Imagenet Eksempel på mobiltelefonbilder
Imagenet Sample Coffee Mug Images
Det nevrale nettverket er opplært på et datasett som heter Imagenet, versjonen fra den store visuelle anerkjennelsesutfordringen i 2012. at datasettet består av en stor samling av bilder som er delt opp i 1000 klasser, hver klasse, inkludert bilder av et bestemt objekt. Som du kan se fra denne lille prøven fra mobiltelefonklassen, er noen av telefonbildene litt datert. Men objekter som kaffekrus endres imidlertid ikke over tid.
Men det stoppet ikke alle som spilte med det fra å ha det gøy, å gå rundt å teste det på alt i sikte, som å finne en tryllestav for første gang og vri det rundt for å se hva det kunne fremheve.
Er det det beste du kan gjøre?
Vel, først av, tar hver anerkjennelse ca. 10 sekunder på en bringebær PI 3, så heller som må spes opp eller en raskere prosessor som brukes, helst en med en CUDA-aktivert NVIDIA GPU fordi det er den eneste typen GPU-tensorflow som støtter for tiden.
Inception neural nettet er bare så godt som dataene den er opplært på. Defektene jeg påpekte ovenfor angående gjenkjenne mobiltelefoner, og folk er problemer med imagenet datasettet. Bare 3,46% av tiden er alle 5 av sine beste gjetninger feil, mens mennesker som gjør den samme testen, er feil i sine 5 beste gjetninger 5% av tiden. Ikke verst.
Da vi påpekte i vår korte artikkel om de freaky ting nevrale nettverkene gjør i dag, kan lenge kortsiktige minne (LSTM) neurale nettverk undersøke hva de ser i en enkelt ramme av en video, samtidig som de tar hensyn til hva som kom før i videoen. For eksempel har det mye mer tillit at det så en strandball i stedet for en kurvkule hvis den foregående scenen var en strandfest. Som adskiller seg fra begynnelsen neural nettverk i den begynnelsen har bare bildet du viser det for å fortsette.
Hvor får dette oss?
Vil forbedret objektgjenkjenning resultere i utbredt nyttig AI med menneskelige ferdigheter? Evolusjonen av øyet er ofte sitert som en viktig årsak til eksplosjonen i livsformer som kalles den kambrianske eksplosjonen rundt 541 millioner år siden, selv om det er mye argument om det som er den årsaken.
Når disse øynene utviklet seg, var det imidlertid allerede noen form for hjerne å bruke dem. Den hjernen håndterte allerede sansene om berøring, vibrasjon og lukt. Så forbedret objektgjenkjenning alene ville ikke forårsake en revolusjon. For menneskelige ferdigheter vil vår AIS trenge mye mer intelligens. Vi har for tiden bare biter og biter av ideer om hva vi trenger for det.
Hva mange er enige om er at vår AI ville trenge å gjøre spådommer slik at den kunne planlegge. For det kan det ha en intern modell, eller forståelse, i verden å bruke som grunnlag for disse spådommene. For den menneskelige ferdighetene å bruke et lodding forslag til en ledning, vil en intern modell forutsi hva som ville skje når forslaget gjorde kontakt og planlegges basert på det. Når forslaget kontakter ledningen, hvis ting ikke går som forutsatt, vil AI reagere.
Nylig arbeid fra Facebook med generative Adverserial Networks (Gans) kan hint på et utgangspunkt her som inneholder en slik modell og prediktiv evne (hvis du ikke er kjent med Gans, refererer vi igjen til vår korte artikkel om de freaky ting nevrale nettverkene gjør i dag). Den “generative” delen av navnet innebærer at de genererer bilder. Men mye mer spesifikt er disse dypt innviklet ganer, noe som betyr at de inkluderer en forståelse av hva de har sett i bildene de har blitt trent på. For eksempel vet de om Windows, dører og TVer og hvor de går i rom.
Adgl video spådommer
Hva med å lage spådommer? Mye mer arbeid fra Facebook innebærer videoregenerering. Ved hjelp av adversarial gradient forskjell tap prediktorer (AGDL) forutsi de hva de neste to rammene av en video burde være. På bildet av et biljardspill kan du se grounenD Sannhet, dvs. hva som virkelig skjedde, og hva AGDL-nettverket spådde. Det er ikke veldig langt inn i fremtiden, men det er en start.
De er minst små skritt på banen fra en naiv gjenkjenning av en med menneskeligaktig ferdigheter.
I Avslutning
Hvor kan du ha sett Inception Neural Network gjenkjenne objekter før? Vi har dekket [Lukas Biewald] ved hjelp av den på en RC-bil for å gjenkjenne objekter i garasjen / verkstedet.
Mens dette [viste seg å være] moro for alle å bruke som er, hva andre bruker kan du tenke på for det? Hvilken nyttig applikasjon kan du tenke på? Hva kan legges til? Gi oss beskjed i kommentarene nedenfor.