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? Pokračuj v čítaní.
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)
… a potom.
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”Videl som hrnček na kávu” k zosilňovači a reproduktoru.
Box je všetko, čo mi dal malý, samostatný balík, ktorý by mohol byť vykonaný a vyskúšal niekto. Tu je video z neho v akcii.
Zlepšenie by bolo pridať malú obrazovku, aby užívateľ mohol vidieť, čo vidí videokameru, ale Picamera má široký uvidiaci uhol a obrazovka sa ukáže, že nie je potrebné.
Ako dobrý je jeho rozpoznávanie objektov
Vzhľadom na toobátko
Ukázalo sa, že mobilný telefón často vedie k tomu, že to hovorí, že videl mobilný telefón, ale v niektorých prípadoch iPod. Avšak, doteraz to vždy dostalo vodné fľaše a hrnčeky na kávu vhodné zakaždým.
Avšak, to nerobí dobre s ľuďmi. Ukázal sa na mňa v mojej kancelárii, spôsobuje, že to znamená, že to videl “tabakový obchod, tobAcconistist, tobAcconistist”, pravdepodobne kvôli regálom zariadení a častí priamo za mnou. Avšak, stojaci proti prázdnej stene, ktorú povedal, že to videl mikinu, odstránila, že to videl tričko tričko, odstránenie toho, že to povedal: “Kúšacie kmene, plávacie kmene”, napriek viditeľnému len moje holé horné trup a hlavu. (Ušetrím vám fotografiu.)
ImageNet Sample Mobilné obrázky
Imagenet Sample Coffee hrnčekové obrázky
Neurónová sieť je vyškolená na súbor údajov s názvom Imagenet, verzia z veľkej výzvy vizuálneho rozpoznávania z roku 2012. Tento súbor údajov sa skladá z obrovskej zbierky obrázkov rozdelených do 1000 tried, každej triedy vrátane obrázkov konkrétneho objektu. Ako môžete vidieť z tejto malej vzorky z triedy mobilného telefónu, niektoré obrázky telefónu sú trochu datované. Avšak objekty, ako sú hrnčeky na kávu, sa časom nezmenia.
Ale to neprestalo každého, kto s ním hral, aby sa pobavili, chodili okolo testovania na všetko v dohľade, ako nájsť magické prútik po prvý raz a máva to, aby ste videli, čo by mohlo vykúzliť.
Je to najlepšie, čo môžete urobiť?
No, najprv vypnúť, každé rozpoznávanie trvá približne 10 sekúnd na Raspberry PI 3, takže buď to musí byť SPED alebo rýchlejší procesor používaný, najlepšie jeden s CUDA-s povoleným NVIDIA GPU, pretože to je jediný typ GPU Tensorflow v súčasnosti podporuje.
Zavádzanie Neural Net je len taká dobrá ako údaje, na ktorých je vyškolený. Vady, ktoré som poukázal vyššie, pokiaľ ide o uznávanie mobilných telefónov a ľudí, sú problémy s údajovým súborom Imagenet. Iba 3,46% času je všetko 5 jeho najlepších odhadov nesprávne, zatiaľ čo ľudia robia tú istú skúšku sú nesprávne v 5 najlepších odhadoch 5% času. Nie zlé.
Ako sme poukázali na náš krátky článok o Freamy Stuff Neural Networks Dnes, dlhá krátkodobá pamäť (LSTM) Neurónové siete môžu preskúmať, čo vidia v jednom rámci videa, pričom berú do úvahy to, čo prišlo na videu. Napríklad má oveľa väčšiu dôveru, že videl plážový loptičku namiesto basketbalu loptu, ak premietajúca scéna bola plážová párty. To sa líši od začiatku neurónovej siete v tomto vzniku má len obraz, ktorý ukážete, aby ste pokračovali.
Kde nás to robí?
Zlepší výsledok rozpoznávania objektov v rozsiahlom užitočnom AI s ľudskými schopnosťami? Vývoj oka je často citovaný ako hlavná príčina výbuchu v životnomkrách známych ako cambrian explózia asi pred 541 miliónmi rokov, hoci o tom, že existuje veľa argumentov o tom, že je to dôvod.
Keď sa však vyvinuli tieto oči, už tam bola nejaká forma mozgu na ich použitie. Ten mozog už zvládol zmysly dotyk, vibrácií a vône. Takže zlepšené rozpoznávanie objektov by nespôsobilo revolúciu. Pre ľudské znalosti by náš AIS potreboval oveľa viac inteligencie. Momentálne máme len bity a nápady na to, čo potrebujeme.
Čo sa zhoduje, je, že naša AI by musela urobiť predpovede, aby mohol plánovať. Pre to by mohlo mať vnútorný model alebo porozumenie sveta, aby sa používal ako základ pre tieto predpovede. Pre ľudskú zručnosť pri použití spájkovacej návrhu k drôtu by vnútorný model predpovedal, čo by sa stalo, keď sa na základe toho navrhol kontakt a potom na základe toho. Keď návrh kontaktuje drôt, ak veci nejdú ako predpovedané, potom AI by reagoval.
Nedávna práca z Facebooku s generálnymi adversmerovými sieťami (gans) môže naznačovať v východiskovom bode, ktorý obsahuje taký model a prediktívnu schopnosť (ak nie ste oboznámení s ganmi, opäť vás odkazuje na náš krátky článok o neuróznych sieťach urobiť dnes). “Generatívna” časť názvu znamená, že vytvárajú obrázky. Ale oveľa konkrétnejšie, toto sú hlboko spletité gance, čo znamená, že zahŕňajú pochopenie toho, čo videli v obrazoch, na ktorých boli vyškolení. Napríklad vedia o oknách, dverách a televízii a kde idú do miestností.
ADGL video predpovede
A čo robiť predpovede? Oveľa viac práce z Facebooku zahŕňa generovanie videa. Použitie protivníkov gradientového rozdielu, prediktory (AGDL) Predpovedajú, čo by mali byť ďalšie dve rámy videa. Na fotografii hry biliardou môžete vidieť grounD Pravda, t.j. Čo sa naozaj stalo, a čo predpovedala sieť AGDL. Nie je to veľmi ďaleko do budúcnosti, ale je to začiatok.
To sú aspoň malé kroky na ceste od naivného uznávania objektov na jednu s ľudskými schopnosťami.
Pri zatváraní
Kde ste videli incepciu Neural Network rozpoznávajúce predmety predtým? Zahŕňali sme [Lukas Biewald] pomocou na RC CAR, aby ste rozpoznali objekty v jeho garáži / workshope.
Zatiaľ čo toto [ukázalo byť] zábava pre každého, kto používa, ako je, aké ďalšie použitia môžete premýšľať? Aká užitočná aplikácia si môžete myslieť? Čo možno pridať? Dajte nám vedieť v poznámkach nižšie.