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? תמשיך לקרוא.

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)

… ואחרי.

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”ראיתי ספל קפה” למגבר ורמקול.

איגרוף כל זה נתן לי חבילה קטנה, עצמאית, כי יכול להתבצע מסביב וניסה על ידי אף אחד. הנה וידאו של זה בפעולה.

שיפור יהיה להוסיף מסך קטן, כך שהמשתמש יכול לראות מה מצלמת הווידאו רואה, אבל לפיקמרה יש זווית ראייה רחבה ומסך מתברר לא הכרחי.

כמה טוב הכרה באובייקט שלה

התחלה שראית טבקון
מציג את זה טלפון סלולרי לעתים קרובות תוצאות זה אומר שזה ראה טלפון סלולרי, אבל במקרים מסוימים iPod. עם זאת, עד כה זה קיבל בקבוקי מים וספלי קפה המתאימים בכל פעם.

עם זאת, זה לא עושה טוב עם אנשים. מצביע על כך במשרדי גורם לו לומר שזה ראה “חנות טבק, חנות טבק, טבק”, כנראה בגלל המדפים של ציוד וחלקים ישירות מאחורי. עם זאת, עומד נגד קיר ריק הוא אמר שזה ראה סווטשירט, הסרת שזה ראתה חולצת טי, הסרת שכאשר “בגד ים, גזעי לשחות”, למרות שראיתי רק את הגופים העליונים החשופים שלי ואת הראש. (אני אחסוך לך את התמונה).

Imagenet לדוגמא תמונות

Imagenet לדוגמא קפה ספל תמונות

הרשת העצבית מאומנת על מערך נתונים שנקרא Imagenet, את הגירסה של האתגר הזיהוי החזותי הגדול של 2012. כי נתונים זה מורכב מאוסף ענק של תמונות מחולקות ל 1000 כיתות, כל כיתה כולל תמונות של אובייקט מסוים. כפי שאתה יכול לראות מתוך מדגם קטן זה בכיתה הטלפון הסלולרי, כמה תמונות הטלפון הם קצת מתוארכים. עם זאת, אובייקטים כגון ספלי קפה לא משתנים לאורך זמן.

אבל זה לא עצר את כל מי שיחק עם זה מלהניף, מסתובב לבדיקתו על כל דבר נראה, כמו למצוא שרביט קסם בפעם הראשונה ונופף אותו כדי לראות מה זה יכול להעלות.

האם זה הכי טוב שאתה יכול לעשות?

ובכן, ראשית, כל הכרה לוקח בערך 10 שניות על פטל PI 3 אז זה צריך להיות sped up או מעבד מהיר יותר בשימוש, רצוי אחד עם CUDA מופעל NVIDIA GPU כי זה רק סוג של GPU Tensorflow תומך כרגע.

התחלה Neural Net הוא רק טוב כמו הנתונים שהוא מאומן על. הפגמים שציינתי לעיל על זיהוי טלפונים סלולריים ואנשים הם בעיות עם הנתונים של Imagenet. רק 3.46% מהמקרים הם כל 5 של הניחושים הטוב ביותר שלה לא בסדר, ואילו בני אדם עושה את אותו מבחן טועים 5 הניחושים הטובים ביותר שלהם 5% מהמקרים. לא רע.

כפי שציינו את המאמר הקצר שלנו על דברים freaky רשתות עצביות לעשות היום, זיכרון ארוך לטווח קצר (LSTM) רשתות עצביות יכול לבחון את מה שהם רואים במסגרת אחת של וידאו, תוך התחשבות בחשבון מה בא לפני בווידאו. לדוגמה, יש לה הרבה יותר אמון כי זה ראה כדור החוף במקום כדור סל אם הסצינה preeded היה זה של מסיבת החוף. זה שונה מן התפיסה הרשת העצבית בתפיסה זו יש רק את התמונה שאתה מראה את זה להמשיך.

איפה זה מביא אותנו?

האם שיפור הכרה אובייקט תוצאה של AI מועיל נרחב עם מיומנויות כמו האדם? האבולוציה של העין מצוטטת לעתים קרובות כגורושה מרכזית לפיצוץ ב – Lifforms הידועה בשם פיצוץ הקבריאני בסביבות 541 מיליון שנה, אם כי יש הרבה ויכוח על כך שהוא גורם.

כאשר העיניים האלה התפתחו, עם זאת, כבר היה צורה כלשהי של המוח להשתמש בהם. המוח הזה כבר טיפל בחושי מגע, רטט וריח. הכרה משופרת כל כך לבדה לא תגרום למהפכה. For human-like skills our AIs would need much more intelligence. We currently have only bits and pieces of ideas of what we need for that.

What numerous agree on is that our AI would need to make predictions so that it could plan. For that it could have an internal model, or understanding, of the world to use as a basis for those predictions. For the human skill of applying a soldering suggestion to a wire, an internal model would predict what would happen when the suggestion made contact and then plan based on that. When the suggestion contacts the wire, if things don’t go as predicted then the AI would react.

Recent work from Facebook with Generative Adverserial Networks (GANs) may hint at a starting point here that contains such a model and predictive capability (if you’re not familiar with GANs, we again refer you to our short article about the freaky stuff neural networks לעשות היום). The “generative” part of the name implies that they generate images. but much more specifically, these are deeply convoluted GANs, meaning that they include an understanding of what they’ve seen in the images they’ve been trained on. For example, they know about windows, doors and TVs and where they go in rooms.

ADGL video predictions
What about making predictions? much more work from Facebook involves video generation. using Adversarial gradient difference Loss Predictors (AGDL) they predict what the next two frames of a video ought to be. In the photo of a billiards game you can see the grounללא שם: ד האמת, כלומר באמת קרה, ומה רשת AGDL ניבאה. זה לא רחוק מאוד אל העתיד, אבל זה התחלה.

אלה נמצאים לפחות צעדים קטנים על הנתיב של זיהוי אובייקט נאיבי אחד עם מיומנויות אנושיות.

לסגירה

איפה אולי ראית את התפיסה הרשת העצבית מזהה אובייקטים לפני כן? כיסינו [לוקאס בייברלד] משתמש בו במכונית RC כדי לזהות אובייקטים במוסך שלו / סדנה.

אמנם זה [התברר להיות] כיף לכולם להשתמש בו, אילו שימושים אחרים אתה יכול לחשוב על זה? איזה יישום מועיל אתה יכול לחשוב? מה ניתן להוסיף? תן לנו לדעת את ההערות להלן.

Leave a Reply

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