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? Read on.

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)

… dan kemudian.

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”Aku melihat cangkir kopi” ke amplifier dan pembicara.

Tinju semua itu memberi saya paket kecil dan mandiri yang bisa dibawa-bawa dan dicoba oleh siapa pun. Inilah video yang beraksi.

Sebuah peningkatan adalah menambahkan layar kecil sehingga pengguna dapat melihat apa yang dilihat kamera video, tetapi picamera memiliki sudut melihat luas dan layar ternyata tidak perlu.

Seberapa baik pengakuan objeknya

Permulaan melihat tobacconist
Menampilkannya ponsel sering mengakibatkannya dengan mengatakan itu melihat ponsel, tetapi dalam beberapa kasus iPod. Namun, sejauh ini memiliki botol air dan cangkir kopi sesuai setiap waktu.

Namun, itu tidak baik dengan orang-orang. Menunjuknya pada saya di kantor saya menyebabkannya mengatakan itu melihat “toko tembakau, toko tembakau, tembakau”, mungkin karena rak peralatan dan bagian langsung di belakang saya. Namun, berdiri di dinding kosong itu mengatakan melihat kaus, menghilangkan bahwa ia melihat kemeja tee, menghilangkan itu, katanya “batang mandi, batang berenang”, meskipun hanya melihat torso dan kepala atas. (Aku akan mengampuni kamu.)

Imagenet sampel gambar ponsel

Imagenet sampel gambar mug kopi

Jaringan saraf dilatih pada dataset yang disebut Imagenet, versi dari tantangan pengenalan visual besar 2012. Dataset itu terdiri dari koleksi besar gambar yang dibagi menjadi 1000 kelas, setiap gambar dari objek tertentu. Seperti yang Anda lihat dari sampel kecil ini dari kelas ponsel, beberapa gambar ponsel sedikit tanggal. Namun, benda-benda seperti cangkir kopi tidak berubah seiring waktu.

Tapi itu tidak menghentikan semua orang yang bermain dengannya dari bersenang-senang, berjalan-jalan di menguji semuanya yang terlihat, seperti menemukan tongkat ajaib untuk pertama kalinya dan melambaikannya untuk melihat apa yang bisa dilakukan.

Apakah itu yang terbaik yang dapat Anda lakukan?

Nah, pertama, setiap pengakuan membutuhkan waktu sekitar 10 detik pada Raspberry PI 3 sehingga yang harus dipercepat atau prosesor yang lebih cepat digunakan, lebih disukai satu dengan NVIDIA GPU yang mendukung CUDA karena itulah satu-satunya jenis GPU tensorflow yang saat ini didukung.

Net neural awal hanya sebagus data yang dilatih. Cacat yang saya tunjukkan di atas tentang mengenali ponsel dan orang-orang adalah masalah dengan dataset imagenet. Hanya 3,46% dari waktu semua 5 dari tebakan terbaiknya salah, sedangkan manusia melakukan tes yang sama salah dalam 5 tebakan terbaik 5% dari waktu. Tidak buruk.

Ketika kami menunjukkan dalam artikel singkat kami tentang hal-hal aneh jaringan saraf yang dilakukan hari ini, jaringan saraf memori jangka pendek (LSTM) dapat memeriksa apa yang mereka lihat dalam satu bingkai video, sambil memperhitungkan apa yang terjadi sebelumnya dalam video. Misalnya, ia memiliki lebih banyak kepercayaan diri bahwa ia melihat bola pantai, bukan bola keranjang jika adegan yang telah direkam adalah partai pantai. Yang berbeda dari jaringan neural awal dalam awal hanya memiliki gambar yang Anda tunjukkan untuk melanjutkan.

Di mana ini membuat kita?

Akankah peningkatan pengenalan objek menghasilkan AI yang sangat membantu dengan keterampilan seperti manusia? Evolusi mata sering dikutip sebagai penyebab utama ledakan dalam bentuk kehidupan yang dikenal sebagai ledakan Cambrian sekitar 541 juta tahun yang lalu, meskipun ada banyak argumen tentang hal itu.

Ketika mata itu berevolusi, bagaimanapun, sudah ada beberapa bentuk otak untuk menggunakannya. Otak itu sudah menangani indera sentuhan, getaran dan bau. Jadi pengakuan objek yang ditingkatkan saja tidak akan menyebabkan revolusi. Untuk keterampilan seperti manusia, AIS kita akan membutuhkan lebih banyak kecerdasan. Kami saat ini hanya memiliki bit dan potongan ide tentang apa yang kami butuhkan untuk itu.

Yang sangat disepakati adalah bahwa AI kita perlu membuat prediksi sehingga dapat merencanakan. Untuk itu bisa memiliki model internal, atau pemahaman, dunia yang digunakan sebagai dasar untuk prediksi tersebut. Untuk keterampilan manusia dalam menerapkan saran solder ke kawat, model internal akan memprediksi apa yang akan terjadi ketika saran tersebut melakukan kontak dan kemudian berencana berdasarkan itu. Ketika saran menghubungi kawat, jika hal-hal tidak pergi seperti yang diperkirakan maka AI akan bereaksi.

Pekerjaan terbaru dari Facebook dengan Jaringan Adverserial Generatial (GANS) dapat mengisyaratkan titik awal di sini yang berisi model dan kemampuan prediksi (jika Anda tidak terbiasa dengan GANS, kami kembali merujuk Anda ke artikel singkat kami tentang jaringan saraf hal-hal yang aneh lakukan hari ini). Bagian “generatif” dari nama menyiratkan bahwa mereka menghasilkan gambar. Tetapi jauh lebih spesifik, ini adalah GAN yang sangat berbelit-belit, yang berarti bahwa mereka memasukkan pemahaman tentang apa yang telah mereka lihat dalam gambar yang telah mereka latih. Misalnya, mereka tahu tentang jendela, pintu dan TV dan di mana mereka pergi ke kamar.

Prediksi video adGL.
Bagaimana dengan membuat prediksi? Lebih banyak pekerjaan dari Facebook melibatkan pembuatan video. Menggunakan Prediktor Kehilangan GRADIEN GRADISIAL (AGDL) mereka memprediksi apa dua frame video berikutnya. Di foto permainan biliar Anda dapat melihat grounD Kebenaran, mis. Apa yang sebenarnya terjadi, dan apa yang diprediksi oleh Jaringan Agdl. Ini tidak terlalu jauh ke masa depan tetapi itu adalah awal.

Itu setidaknya sedikit langkah kecil di jalur dari pengenal objek naif terhadap satu dengan keterampilan seperti manusia.

Sebagai penutup

Di mana Anda dapat melihat jaringan neural awal mengakui objek sebelumnya? Kami telah membahas [Lukas Biewald] menggunakannya di mobil RC untuk mengenali objek di garasi / bengkelnya.

Sementara ini [ternyata] menyenangkan bagi semua orang untuk menggunakannya, apa yang dapat Anda pikirkan untuk itu? Aplikasi apa yang membantu Anda pikirkan? Apa yang bisa ditambahkan? Beri tahu kami di komentar di bawah ini.

Leave a Reply

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

Related Post

Gamecube LinuxGamecube Linux

Saya tahu minggu ini milik Xbox 360, tetapi kadang-kadang Anda perlu istirahat dari semua hype. Setelah tim Xbox Linux mendapat sistem matang yang didirikan, mereka memutuskan untuk beralih ke Gamecube

Leyden Jar of Doom.Leyden Jar of Doom.

Jar Leyden umumnya hanya kapasitor rumah dasar. Kami telah menunjukkan kepada Anda bagaimana membuatnya sebelumnya. Namun, ini adalah persis bagaimana Anda membuat yang sangat besar. [Nickademuss] menggunakan wadah lima galon