Menu Close

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)

… và sau.

1.
2.
3.
4
5.
6.
7.
số 8
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Vả lại 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 sayTôi thấy một cốc cà phê cho bộ khuếch đại và loa.

Quyền anh ta tất cả những thứ đó đã cho tôi một gói nhỏ, độc lập có thể được mang theo và thử bởi bất cứ ai. Đây là một video về nó trong hành động.

Một cải tiến sẽ là thêm một màn hình nhỏ để người dùng có thể thấy máy ảnh video nhìn thấy gì, nhưng Picamera có góc nhìn rộng và màn hình hóa ra là không cần thiết.

Làm thế nào tốt là sự công nhận đối tượng của nó

Khởi đầu nhìn thấy một người dùng thuốc lá
Cho thấy nó một điện thoại di động thường dẫn đến nó nói rằng nó đã thấy một điện thoại di động, nhưng trong một số trường hợp một ipod. Tuy nhiên, cho đến nay nó đã có được chai nước và cốc cà phê phù hợp mỗi lần.

Tuy nhiên, nó không làm tốt với mọi người. Chỉ vào tôi trong văn phòng của tôi khiến nó nói rằng nó đã thấy một “cửa hàng thuốc lá, cửa hàng thuốc lá, thuốc lá”, có thể là do kệ thiết bị và các bộ phận trực tiếp phía sau tôi. Tuy nhiên, đứng trên một bức tường trống, nó nói rằng nó đã nhìn thấy một chiếc áo, loại bỏ rằng nó đã nhìn thấy một chiếc áo tee, loại bỏ điều đó, nó nói rằng “Trunks tắm, quần bơi”, mặc dù chỉ nhìn thấy thân trên và đầu của tôi. (Tôi sẽ dành cho bạn bức ảnh.)

Hình ảnh hình ảnh điện thoại di động

Hình ảnh mẫu cà phê cốc hình ảnh

Mạng lưới thần kinh được đào tạo trên một bộ dữ liệu có tên là Imagenet, phiên bản từ thử thách nhận dạng hình ảnh lớn của năm 2012. Bộ dữ liệu đó bao gồm một bộ sưu tập hình ảnh khổng lồ được chia thành 1000 lớp, mỗi lớp bao gồm hình ảnh của một đối tượng cụ thể. Như bạn có thể thấy từ mẫu nhỏ này từ lớp điện thoại di động, một số hình ảnh điện thoại có một chút hẹn hò. Tuy nhiên, các đối tượng như cốc cà phê không thay đổi theo thời gian.

Nhưng điều đó đã không ngăn được tất cả những người chơi với nó vì vui chơi, đi bộ xung quanh việc thử nghiệm nó trên tất cả mọi thứ trong tầm nhìn, như tìm một cây đũa thần lần đầu tiên và vẫy nó để xem những gì nó có thể gợi lên.

Đó là điều tốt nhất bạn có thể làm?

Chà, lần đầu tiên, mỗi sự công nhận mất khoảng 10 giây trên Raspberry PI 3, vì vậy, sẽ được tăng tốc hoặc bộ xử lý nhanh hơn được sử dụng, tốt nhất là một bộ xử lý có một GPU NVIDIA hỗ trợ CUDA vì đó là loại GPU Tensorflow duy nhất hỗ trợ.

Net Inception Netal chỉ tốt như dữ liệu được đào tạo trên. Các lỗi tôi đã chỉ ra trên liên quan đến việc nhận ra điện thoại di động và mọi người là các vấn đề với bộ dữ liệu hình ảnh. Chỉ 3,46% thời gian là 5 trong số những dự đoán tốt nhất của nó sai, trong khi con người thực hiện cùng một bài kiểm tra là sai trong 5 dự đoán tốt nhất của họ 5% thời gian. Không tệ.

Như chúng tôi đã chỉ ra trong bài viết ngắn gọn về các mạng lưới thần kinh của Freaky Stuff làm ngày nay, các mạng thần kinh bộ nhớ ngắn hạn (LSTM) dài có thể kiểm tra những gì họ nhìn thấy trong một khung hình của một video, trong khi có tính đến những gì đã xảy ra trước đây trong video. Ví dụ, nó tự tin hơn nhiều rằng nó đã nhìn thấy một quả bóng bãi biển thay vì một quả bóng rổ nếu cảnh tiên tiến là của một bữa tiệc bãi biển. Khác với mạng lưới thần kinh xuất hiện trong sự khởi đầu đó chỉ có hình ảnh bạn hiển thị nó để tiếp tục.

Điều này có được chúng ta ở đâu?

Sẽ cải thiện kết quả nhận dạng đối tượng trong AI hữu ích phổ biến với các kỹ năng giống như con người? Sự phát triển của mắt thường được trích dẫn là một nguyên nhân chính của vụ nổ trong ngôn ngữ sống được gọi là vụ nổ cambrian khoảng 541 triệu năm trước, mặc dù có nhiều tranh luận về việc đó là nguyên nhân đó.

Tuy nhiên, khi đôi mắt đó phát triển, đã có một hình thức của não để sử dụng chúng. Bộ não đó đã xử lý các giác quan của cảm ứng, rung động và mùi. Vì vậy, cải thiện sự công nhận đối tượng một mình sẽ không gây ra một cuộc cách mạng. Đối với các kỹ năng giống như người AIS của chúng tôi sẽ cần nhiều thông minh hơn nhiều. Chúng tôi hiện chỉ có những bit và những ý tưởng về những gì chúng ta cần cho điều đó.

Những gì nhiều đồng ý là AI của chúng tôi sẽ cần đưa ra dự đoán để nó có thể lập kế hoạch. Đối với điều đó, nó có thể có một mô hình nội bộ, hoặc sự hiểu biết, trên thế giới để sử dụng làm cơ sở cho những dự đoán đó. Đối với kỹ năng của con người áp dụng một gợi ý hàn cho một sợi dây, một mô hình nội bộ sẽ dự đoán những gì sẽ xảy ra khi đề xuất liên lạc và sau đó lên kế hoạch dựa trên đó. Khi đề xuất liên lạc với dây, nếu mọi thứ không được dự đoán thì AI sẽ phản ứng.

Công việc gần đây từ Facebook với các mạng kẻ thù tạo (Gans) có thể gợi ý tại một điểm bắt đầu ở đây có chứa một mô hình và khả năng dự đoán như vậy (nếu bạn không quen thuộc với Gans, chúng tôi một lần nữa giới thiệu bạn về bài viết ngắn của chúng tôi về các mạng thần kinh của Freaky làm hôm nay). Phần “Generative” của tên ngụ ý rằng chúng tạo ra hình ảnh. Nhưng cụ thể hơn nhiều, đây là những Gans phức tạp sâu sắc, có nghĩa là chúng bao gồm một sự hiểu biết về những gì họ đã thấy trong những hình ảnh mà họ đã được đào tạo. Ví dụ, họ biết về Windows, cửa ra vào và TV và nơi họ đi trong phòng.

Dự đoán video adgl.
Điều gì về việc đưa ra dự đoán? Làm việc nhiều hơn từ Facebook liên quan đến việc tạo video. Sử dụng các dự đoán tổn thất tổn thất chênh lệch độ dốc (AGDL), họ dự đoán hai khung hình tiếp theo của một video nên được. Trong bức ảnh của một trò chơi bi-a, bạn có thể nhìn thấy các nhómD Sự thật, I.E. Điều gì thực sự đã xảy ra, và những gì mạng AGDL dự đoán. Nó không phải là rất xa trong tương lai nhưng đó là một khởi đầu.

Đó là những bước nhỏ ít nhất trên đường dẫn từ một người nhận dạng đối tượng ngây thơ với một kỹ năng giống như con người.

Trong việc đóng cửa.

Bạn có thể nhìn thấy các đối tượng nhận ra mạng lưới thần kinh thành phố ở đâu? Chúng tôi đã bao gồm [Lukas Biewald] sử dụng nó trên một chiếc xe RC để nhận ra các đối tượng trong nhà để xe / xưởng của mình.

Trong khi điều này [hóa ra là] thú vị cho mọi người sử dụng như vậy, bạn có thể nghĩ gì về việc sử dụng khác? Những ứng dụng hữu ích bạn có thể nghĩ đến? Những gì có thể được thêm vào? Cho chúng tôi biết trong các ý kiến ​​dưới đây.

Leave a Reply

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