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? Leia.
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)
… e depois.
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”Eu vi uma caneca de café” para o amplificador e orador.
Boxe tudo isso deu-me um pequeno pacote autônomo que poderia ser carregado e tentou por ninguém. Aqui está um vídeo dele em ação.
Uma melhoria seria adicionar uma pequena tela para que o usuário pudesse ver o que a câmera de vídeo vê, mas o Picamera tem um ângulo de ver amplo e uma tela acaba por não ser necessário.
Quão bom é o reconhecimento do objeto
Inception vendo um tabaco
Mostrando-lhe um celular muitas vezes resulta nele dizendo que viu um celular, mas em alguns casos um iPod. No entanto, até agora ele obteve garrafas de água e canecas de café apropriadas todas as vezes.
No entanto, não faz bem com as pessoas. Apontar para mim no meu escritório faz com que ele diga que viu uma “loja de tabaco, loja de tabacconista, tabacconista”, provavelmente devido às prateleiras de equipamentos e peças diretamente atrás de mim. No entanto, de pé contra uma parede em branco, disse que viu uma camisola, removendo que viu uma camiseta, removendo que, disse “troncos de banho, troncos de natação”, apesar de ver apenas meu tronco e cabeça superior. (Eu vou te poupar a foto.)
Imagens de celulares imagenet
Imagenet amostra caneca de café Imagens
A rede neural é treinada em um conjunto de dados chamado ImageNet, a versão do grande desafio visual do reconhecimento de 2012. Esse DataSet consiste em uma enorme coleção de imagens divididas em 1000 aulas, cada classe, incluindo imagens de um determinado objeto. Como você pode ver a partir desta pequena amostra da classe celular, algumas das imagens do telefone são um pouco datadas. No entanto, objetos como canecas de café não mudam com o tempo.
Mas isso não parou a todos que jogaram com isso de se divertir, andando em testando em tudo à vista, como encontrar uma varinha mágica pela primeira vez e acenando para ver o que poderia conjurar.
Isso é o melhor que você pode fazer?
Bem, em primeiro lugar, cada reconhecimento leva cerca de 10 segundos em um PI 3 de framboesa 3 assim que tem que ser acelerado ou um processador mais rápido usado, de preferência um com uma nvidia gpu habilitada para CUDA, porque esse é o único tipo de fluxo de tensor de GPU atualmente suporta.
A rede neural de início é tão boa quanto os dados em que é treinada. Os defeitos que apontei acima referentes a reconhecer telefones celulares e as pessoas são questões com o DataSet ImageNet. Apenas 3,46% do tempo são todos 5 das suas melhores adivinhações erradas, enquanto os seres humanos que fazem o mesmo teste estão errados em seus 5 melhores palpites 5% do tempo. Nada mal.
Como destacamos em nosso pequeno artigo sobre as redes neurais de coisas freaky hoje, a memória neural de longa duração (LSTM) pode examinar o que eles vêem em um único quadro de um vídeo, levando em conta o que veio antes no vídeo. Por exemplo, tem muita confiança que viu uma bola de praia em vez de uma bola de cesta se a cena precedente era a de uma festa na praia. Isso difere da Inception Neural Rede nesse início tem apenas a imagem que você mostra para continuar.
Onde isso nos leva?
A melhoria do reconhecimento de objetos resultará em Ai generalizada da AI com habilidades semelhantes a humanos? A evolução do olho é frequentemente citada como uma das principais causas da explosão nas formas de vida conhecida como a explosão Cambriana em torno de 541 milhões de anos atrás, embora haja muito argumento sobre isso ser essa causa.
Quando esses olhos evoluíram, no entanto, já havia alguma forma de cérebro para usá-los. Esse cérebro já lidou com os sentidos de toque, vibração e cheiro. Então, o reconhecimento de objetos melhorado sozinho não causaria uma revolução. Para habilidades semelhantes a humanos, nosso AIS precisaria de muita inteligência. Atualmente, temos apenas bits e peças de ideias sobre o que precisamos para isso.
Que numerosos concordam é que nossa IA precisaria fazer previsões para que pudesse planejar. Para isso, pode ter um modelo interno ou compreensão, do mundo para usar como base para essas previsões. Para a habilidade humana de aplicar uma sugestão de solda a um fio, um modelo interno prevê o que aconteceria quando a sugestão fez contato e depois planejar com base nisso. Quando a sugestão contate o fio, se as coisas não forem previstas, o AI reagiria.
Trabalhos recentes do Facebook com redes adversas geradoras (GANS) podem sugerir um ponto de partida aqui que contém um modelo e capacidade preditiva (se você não está familiarizado com as gans, nós novamente encaminhamos você ao nosso pequeno artigo sobre as redes neurais de coisas freaky faça hoje). A parte “gerativa” do nome implica que geram imagens. Mas muito mais especificamente, estes são profundamente complicados gans, o que significa que incluem uma compreensão do que viu nas imagens que foram treinadas. Por exemplo, eles sabem sobre janelas, portas e TVs e onde eles vão em quartos.
Previsões de vídeo adgl
Que tal fazer previsões? Muito mais trabalho do Facebook envolve a geração de vídeo. Usando preditores de perda de diferença de gradiente adversário (AGDL) eles prevêem quais os próximos dois quadros de um vídeo devem ser. Na foto de um jogo de bilhar você pode ver o grounD verdade, ou seja, o que realmente aconteceu e o que a rede da AGDL previu. Não é muito longe no futuro, mas é um começo.
Esses são pelo menos pequenos passos no caminho de um reconhecedor de objetos ingênuos para um com habilidades semelhantes a humanos.
No fechamento
Onde você pode ter visto a rede neural de início reconhecendo objetos antes? Nós cobrimos [Lukas Biewsald] usando-o em um carro RC para reconhecer objetos em sua garagem / oficina.
Enquanto isso [acabou por ser] divertido para todos usarem como é, que outros usos você consegue pensar por isso? Que aplicação útil você consegue pensar? O que pode ser adicionado? Deixe-nos saber nos comentários abaixo.