Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Programando um carro autônomo com TensorFlow

By Gad BenramNov 25, 20194 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

1 j3ozce4k gha8obmamdga

A AWS lançou uma ferramenta sensacional para ensinar Reinforcement Learning a iniciantes, mas liberou uma interface bem limitada para controlá-la. Demos um jeito nisso e a transformamos em um Deep Q-Learning Raging Bull, compatível com o OpenAI Gym e movido a TensorFlow.

Em parceria com: Nir Malbin e Aviv Laufer

1 j3ozce4k gha8obmamdga

Quando a AWS lançou o DeepRacer, a ideia era ensinar os fundamentos de reinforcement learning com um carro autônomo físico e interativo. O carro só podia ser controlado por tipos específicos de modelos, treinados no console da AWS e enviados pela interface do próprio carro. Mal sabiam eles que estávamos prestes a transformá-lo em um touro raivoso, pronto para investir contra qualquer objeto pela frente!

A transformação exigiu três etapas: primeiro, descobrir a API que controla o carro. Segundo, desenvolver um ambiente e um agente de deep reinforcement learning para integrá-los aos controles do carro. Por fim, deixar o carro aprender sozinho a esterçar e a avançar contra os objetos.

Interface do OpenAI Gym compatível com o AWS DeepRacer

https://github.com/gidutz/DeepBullFighting

0 forks.

6 stars.

3 issues abertas.

Commits recentes:

Descobrindo a API do carro

Queríamos descobrir a API usada pelo carro. Ao registrar as requisições HTTP do navegador para o carro, vimos que as chamadas ficam em car_ip/api/. Com isso em mãos, conectamos ao carro via SSH e, com o comando "ps", encontramos um servidor web em Python rodando. Entramos no diretório com cd e usamos o grep para procurar a string "/API/" em todos os arquivos .py. Pronto: agora tínhamos a lista de APIs suportadas pelo carro.

Deep Object Detection

Detecção de objetos é a tarefa em que uma máquina aprende a identificar objetos dentro de uma imagem. Usamos uma implementação em TensorFlow/Keras do modelo YOLOv3, capaz de detectar objetos, para extrair o centro e as proporções das garrafas em relação ao quadro inteiro. O objetivo do Deep-Q-Agent é executar ações que aproximem o centro do objeto detectado do centro do quadro.

1 1bbzcqetalxsdjjcogbyawQuadros capturados pela câmera do carro. Com o YOLOv3, encontramos a bounding box de uma garrafa e calculamos o deslocamento do centro da caixa em relação ao centro do quadro. O tamanho do quadro também é calculado.

O Deep-Q-Agent

Saber onde a garrafa está em relação ao carro é uma coisa; outra bem diferente é fazer o carro se mover até ela. Se você não conhece o conceito de Deep Reinforcement Learning, provavelmente tentaria escrever um código que fizesse algum cálculo geométrico para estimar o ângulo em que o carro precisa se deslocar para chegar mais perto da garrafa e ficar de frente para ela. Acontece que reinforcement learning permite que a própria máquina aprenda a se controlar e atingir esse objetivo por tentativa e erro. Nesta implementação, usamos um método chamado Deep Q-Learning, o mesmo que ajudou o DeepMind, do Google, a ensinar computadores a vencer jogos, testado nos clássicos do Atari 2600.

Deep Q-Learning

Deep Q-Learning é uma abordagem para resolver reinforcement learning sem modelar o ambiente; ou seja, sem tentar modelar a física do movimento do carro nem a interação entre o carro e a garrafa. Em vez disso, deixamos a máquina experimentar e aprender quais ações geram a melhor recompensa para um determinado estado.

1 kkhz 1b0pd4dv6 q7biktq

Recompensa?

Em Reinforcement Learning, a recompensa é uma pontuação atribuída ao ator quando ele executa uma ação, partindo do pressuposto de que dá para avaliar o quão "boa" foi essa ação. O ator tenta otimizar suas ações para maximizar as recompensas que recebe. No nosso caso, partimos da ideia de que trazer o centro do objeto detectado para o centro do quadro significaria que o carro está de frente para o objeto e que aumentar a área ocupada pelo objeto na imagem significaria que o carro está mais perto dele. Por isso, combinamos os dois fatores em uma fórmula única que retorna 1 quando o carro está de frente para o objeto e ele cobre a tela inteira, e valores menores conforme o carro se afasta:

step_reward = (1-distance_to_center)*(object_coverage)

Aplicando Deep-Q-Learning ao DeepRacer

O movimento do DeepRacer é controlado por dois parâmetros: ângulo e aceleração (throttle). Ambos são números de ponto flutuante entre -1,0 e +1,0. Uma "ação" consiste em definir os valores de ângulo e throttle e deixar o carro andar por 0,3 segundo. Para simplificar a tarefa, discretizamos o espaço contínuo de ações em 12 tuplas diferentes (ângulo, throttle), de modo que o agente só precisasse escolher uma das 12 combinações possíveis a cada observação.

https://www.youtube.com/watch?v=L2MsII6-kd8

https://gist.github.com/gidutz/d4e0d8aa90293bf5e90b428878f5da35

\\\___________________________________________________________

Curtiu a história? Siga o Gad no Twitter para acompanhar as novidades e novos conteúdos.