Udacity self-driving car preview

Eis aqui uma grande oportunidade. Para aqueles curiosos sobre o nanodegree de carros autônomos da Udacity, aqui está um preview, para acessar o conteúdo do curso, por tempo limitado.
http://blog.udacity.com/2017/04/free-sneak-preview-self-driving-car-nanodegree-program.html

Divirta-se.

​ O maior trote científico da história

“Treino é treino, jogo é jogo”, já dizia o ditador popular futebolístico.
 

treinoetreino-468x630.jpg
 

Num treino ninguém tem o mesmo nível de seriedade, de stress, de um jogo de verdade.

 

Agora, imagine um time que tem um jogo a cada dez anos. Mas este jogo pode ocorrer a

 

qualquer momento, inesperadamente. Ou seja, para ganhar tem que estar preparado. Mas como se preparar só treinando, sem jogar?

 

É mais ou menos isso que acontece em alguns eventos da vida real. Uma oportunidade de uma vida surge em um momento, e quem estará preparado para tal?

 


 
LIGO
 
O mesmo problema aconteceu num dos maiores projetos do mundo contemporâneo: o Laser Interferometer Gravitational-Wave Observatory (LIGO), que detectou as ondas gravitacionais de Einstein. A história completa encontra-se neste link: http://nautil.us/issue/42/fakes/the-cosmologists-who-faked-it, pelos pesquisadores Jonah Kanner e Alan Weistein, e a solução deles é surpreendente.

 

O projeto LIGO foi construido para capturar as tais ondas gravitacionais de Einstein. Elas tinham sido previstas há 100 anos, mas até o momento ninguém havia conseguido construir equipamentos sensíveis o suficiente para captá-las.
 
O LIGO consiste em 2 detectores gigantescos em formato de L com braços de 4 km, mantendo vácuo interno, e com espelhos refletindo raios laser, ao custo de alguns bilhões de dólares.

 
 
ligo-Aerial5.jpg
 
Portanto, imagine o problema. Um equipamento gigantesco, projetado para capturar onduletas minúsculas a bilhões de anos-luz de distância, sem que ninguém saiba exatamente se elas serão mesmo capturadas, quando aparecerão, e qual o formato delas… É a situação descrita, de treinos eternos por dezenas de anos, até que um dia pode (ou não) ter o jogo real.
 


O “trote”
 
A solução: aplicar um “trote” em si mesmos.
 
Em 2009, os pesquisadores criaram um mecanismo na qual uma equipe pequena (5 pessoas) poderia criar um evento falso. Eles poderiam adicionar secretamente um sinal simulando a tal onda gravitacional, e enganar o resto do time. Esta equipe secreta deveria manter sigilo absoluto nesta operação, sendo que nem a alta gerência poderia saber se a informação detectada era fake ou não.
 
Ligowaves.jpg
 
Toda a equipe de pesquisa sabia que havia a possibilidade de sinais falsos serem propositalmente gerados, mas não saberiam se um sinal específico era verdadeiro ou falso. Este mecanismo é muito bom, porque obriga que os pesquisadores façam um check duplo, triplo, quádruplo, em todas as hipóteses imagináveis: erro nos sensores, ruído vindo de alguma outra fonte, problemas mecânicos nos equipamentos, erros de interpretação, etc… Seria uma forma de policiar a si mesmos, já que é muito fácil cometer um erro nesta situação.
 
Eis que, em setembro de 2010, o LIGO captou um sinal. Era um sinal diferente de todo ruído terrestre até então captado. Os pesquisadores se movimentaram, concluíram que era um evento estranho, e passaram a investigar o mesmo a fundo. Chamaram este sinal de “Cachorro Grande”, por esta ter ocorrido na direção da constelação de “Canis Major”.
 
Assim, pelos próximos 6 meses os pesquisadores diretamente ligados ao LIGO, e uma rede de mais de 700 pesquisadores ao redor do mundo, passaram a investigar todos os detalhes do evento “Cachorro Grande”. Seria um erro de medida? Seria isto real? Haveria problemas no hardware? Erro de interpretação? Como fazer para tanta gente assim concordar com as conclusões de uma investigação tão fora da realidade quanto esta?
 
Em março de 2011, após infindáveis discussões, eles tinham fechado um artigo descrevendo o evento de detecção de ondas gravitacionais. Um grupo de mais de 300 cientistas se reuniu num hotel na Califórnia, com mais algumas centenas conectados pela internet, e votaram a submissão do artigo para uma revista científica. Após inúmeros discursos, contestações, divagações, eles finalmente aprovaram a publicação do artigo.
 
Então o diretor do Laboratório LIGO, Jay Marx, tomou o palco. Ele estava carregando um envelope no seu bolso havia seis meses. O envelope continha a verdade, sobre os dados serem falsos ou não. Seria a diferença entre um prêmio Nobel ou alguém rindo da cara deles. E, finalmente, ele abriu o envelope, para dizer que esses dados eram falsos, injetados artificialmente.
 
Os pesquisadores abriram champanhe, assim mesmo. Se o jogo não foi jogado, pelo menos tinha sido um treino da mais alta intensidade, capacitando-os para um futuro jogo real.
 


O Jogo Real
 
Cinco anos depois, no final de 2015, os detectores do LIGO captaram um sinal diferente de tudo o que já tinham visto antes.
 
Eles tomaram como base o checklist e os questionamentos do trote de 5 anos atrás, para a checagem de tudo o que seria possível. E o sinal passou por todos os critérios. Desta vez, não era um trote programado. Eram as ondas gravitacionais, com nível de confiança de 99.9999 porcento.
 
Cinco meses depois, eles tinham plena confiança de que finalmente tinham conseguido detectar as tais ondas gravitacionais. Após algumas dezenas de publicações, (https://www.ligo.caltech.edu/page/detection-companion-papers), eles anunciaram publicamente a descoberta das ondas gravitacionais (e o ponto alto de suas carreiras é que ganharam um post neste blog, sobre as ondas gravitacionais, clicando aqui).
 
Como se preparar para um grande jogo, que acontece esporadicamente ou nem venha a acontecer? Uma das formas é com simulações do jogo, assim como fazemos simulados de cursinho para o vestibular.

  

Solução do Desafio do Penrose Institute

Neste post, foi apresentado o interessante Desafio do Instituto Penrose. Interessante porque os melhores supercomputadores não conseguem resolver, mas é mais ou menos simples para um ser humano.

https://ideiasesquecidas.com/2017/03/30/desafio-do-penrose-institute/

instituteoff
Brancas jogam e empatam ou vencem

A chave é perceber que as peças Pretas estão travadas. As únicas peças que se movem são os bispos pretos, que não ameaçam o Rei Branco enquanto o mesmo estiver numa casa branca.

Portanto, basta o Rei Branco ficar andando aleatoriamente pelas casas brancas. Nunca será ameaçado. Após enfadonhos 50 movimentos de cada lado, o jogo será considerado empatado pela regra abaixo.

Regra dos cinquenta movimentos: não há captura ou movimento de peão nos últimos 50 movimentos de cada jogador.

 

Podem existir outras respostas, afinal, a imaginação humana é inigualável!

Alguma outra solução?

 

Solução alternativa. A solução do petista.

 

Discutir com petista é como jogar xadrez com pombo. Ele vai derrubar as peças, cagar no tabuleiro e sair cantando vitória.

 

 

 

 

 

Desafio do Penrose Institute

Um desafiozinho de xadrez, criado pelo Penrose Institute.
É um puzzle relativamente simples de resolver, necessitando de um nível um pouco acima de básico de xadrez.
Entretanto, é muito interessante porque nem os melhores supercomputadores do mundo conseguem resolver.
Nota: Roger Penrose é um físico e matemático extremamente respeitado, tendo desenvolvido diversos trabalhos com o conhecido físico Stephen Hawking, um dos primeiros a propor a ideia de Buracos Negros.

O puzzle:
instituteoff.jpg
Peças brancas jogam. Objetivo: brancas empatarem ou vencerem
Sabendo como são programados os computadores, sabe-se também como enganá-los.
Xadrez é um jogo em que o número de combinações facilmente explode para infinito. É difícil olhar 2 jogadas à frente, imagine 5, 10, 15 jogadas à frente! Mesmo o computador mais poderoso do mundo não consegue explorar todas as jogadas possíveis de maneira exaustiva, demoraria milhares de anos para tal. Então, como fazer?
Os programas de computador levam em conta aspectos como a força relativa de cada peça (por exemplo, a dama vale mais que o cavalo), a posição (a dama numa posição central tem mais chance de atuar do que presa atrás de um peão), e também um banco de dados gigantesco de boas jogadas e posições.
220px-Lewis_Chessmen_Overview.jpg
O xadrez é um jogo conhecido há uns 1500 anos (https://en.wikipedia.org/wiki/History_of_chess).  Há séculos, as peças e as regras são as mesmas. Por isso, há centenas de milhares de jogos catalogados, e daí é possível extrair padrões: jogadas de início, meio de jogo, fim de jogo. É como se fossem marcos a serem atingidos numa viagem: para chegar à Índia, primeiro passar pelo Cabo da Boa Esperança, depois pelas ilhas de Madagascar, etc… Isto facilita muito o algoritmo, porque reduz violentamente o número de possibilidades.

Eu não sou nenhum especialista em xadrez, mas só de olhar o tabuleiro, dá para sacar algumas conclusões:

 

  • Em termos de força das peças, as pretas têm muito mais poderio: dama, torre, bispos, enquanto as brancas só tem três peões.
  • O posicionamento das peças é muito esquisito. As pretas, que começam o jogo na parte de cima, estão no lado esquerdo do tabuleiro. Esta posição bem unusual é feita de propósito, para evitar que o computador encontre um marco bem definido. É como chegar à Índia começando a viagem do pólo-norte, da onde não se tem rotas definidas.
  • As peças brancas, embora fortes, estão todas travadas, e numa posição bem maluca. É extremamente improvável, embora não impossível, ter uma situação dessas.
  • Três bispos brancos em casas da mesma cor? Eu já tinha resolvido o puzzle, mas não tinha sacado como seria possível ter três bispos no jogo. Só depois fui perceber: é possível sim, basta avançar um peão branco até a última casa e promover a bispo (também muito unusual).
  • Peças brancas fortes, posições esquisitas, tudo é muito estranho, para forçar o computador a abandonar a estratégia de pegar atalhos, fazê-lo percorrer milhões de combinações possíveis e não chegar a lugar nenhum.

Solução:
Minha solução será publicada daqui a uma semana, para dar aos leitores tempo para pensar.
Atualização: já publiquei a solução, aqui.
Para quem resolver, principalmente se tiver alguma ideia muito legal, enviar a solução para puzzles@penroseinstitute.com.

Sugiro parar a leitura para tentar a solução. Mas segue uma dica, se necessário.
Há alguns critérios possíveis para considerar um jogo empatado:
– Stalemate: brancas não tem jogada possível
– Não existe checkmate possível, exemplo quando sobra rei contra rei
– Repetição três vezes seguidas: a mesma jogada é repetida trẽs vezes consecutivas, pelos dois lados
– Regra dos cinquenta movimentos: não há captura ou movimento de peão nos últimos 50 movimentos de cada jogador.
Nota: Assim como em alguns puzzles anteriores, este me foi passado pelo grande engenheiro Marcos Melo.

RoadMap – Projetos de carro autônomo

Terminei a parte 1 do nanodegree de carros autônomos da Udacity!

nanodegree.jpeg
“Certificado” de conclusão

Foram projetos como o de ensinar um carro a dirigir num ambiente simulado:

E o de treinar uma rede neural para reconhecer placas de trânsito:

Traffic.jpeg

E o de identificar outros veículos e as faixas de trânsito.

 

O Termo 2 do curso envolve sensores Lidar e robótica com C++!

Veja o relatório completo na plataforma Medium:
Relatório completo

O puzzle das 12 bolinhas e a Teoria da Informação

Neste post, usarei uma resolução do puzzle da 12 bolinhas para mostrar como nós, intuitivamente, utilizamos os conceitos da Teoria da Informação para resolver este tipo de problema.


O problema das 12 bolinhas

“Há doze bolinhas, extremamente idênticas. Têm pesos iguais exceto uma delas que tem um peso um pouco diferente. Não se sabe a priori se é mais leve ou mais pesada. Com uma balança de dois pratos, encontre a bola diferente fazendo apenas três pesagens, dizendo também se é mais leve ou mais pesada”.

Sugiro que o leitor perca pelo menos 1 hora tentando resolver por si só, antes de retornar ao post.

Nota: o “culpado” por este post é o meu amigo Marcos Melo, que me enviou este puzzle.

 


Resolução

Imagine que temos 12 bolinhas. Podemos colocar a entropia desta situação inicial numa tabela:

Inform01.png

Pesagem 1: Coloco 4 no primeiro prato, e 4 no segundo, deixando 4 de fora.
Bal01.png

Há duas situações possíveis:

1.1 A balança fica equilibrada
1.2 A balança pende para um dos lados

Situação 1.1 – A balança fica equilibrada

É a situação mais simples. Teremos a certeza de que as 8 bolinhas são neutras, portanto, vamos pintar de cinza.
Bal02.png

 

A bolinha diferente está entre as quatro que ficaram de fora. Vamos colocar 2 bolinhas em um dos pratos, 1 no outro, e deixar 1 de fora. Para equilibrar a balança, vamos colocar uma bolinha neutra no lado que ficou sozinho.

Bal03.png
De novo, temos duas situações:
1.1.1 A balança fica equilibrada
1.1.2 A balança pende para um dos lados

Situação 1.1.1 – A balança fica equilibrada

Bal04.png
Se a balança ficar equilibrada, a bolinha que ficou de fora é o intruso. Uso a terceira e última pesagem somente para decidir se ela é mais leve ou mais pesada. Fim deste ramo da árvore.

Situação 1.1.2 A balança pende para um dos lados

Bal05.png
Vamos pintar as bolinhas do lado mais leve de verde, e do lado mais pesado de vermelho, exceto a bolinha neutra.
Observe que são três bolinhas incógnitas, duas da mesma cor e uma de outra. Vamos chamar este ponto de “Procedimento das três incógnitas“.

Peso as duas bolinhas que eram do mesmo prato.

Bal06.png

1.1.2.1 A balança fica equilibrada: quer dizer que a bolinha que ficou de fora é o intruso, e é mais pesada.
1.1.2.2 A balança pende para um dos lados: o intruso é a bolinha mais leve.

Para o caso em que há duas bolinhas vermelhas e uma verde, a resolução é análoga. Fim deste ramo da árvore.

Este é o caso fácil. Vamos para a outra situação.


Situação 1.2 A balança pende para um dos lados.
Vamos pintar as bolinhas.

 

Bal12.png

Para a segunda pesagem, retirar duas bolas de um prato e uma do outro. Completo com uma neutra.
Também inverto de prato duas das bolinhas que estavam inalteradas. Vou pesar assim:

Bal08.png
Tenho três situações:
1.2.1 A balança fica equilibrada
1.2.2 A balança pende para o lado contrário
1.2.3 A balança continua pendendo para o mesmo lado

Situação 1.2.1 – A balança fica equilibrada
Se a balança fica equilibrada, pinto as bolinhas dos pratos de cinza. Fico com três incógnitas, duas da mesma cor e uma de outra.

Bal09.png
Posso usar o mesmo “Procedimento das três incógnitas” do item 1.1.2 para encontrar o intruso e o seu peso relativo.

1.2.2 A balança pende para o lado contrário
Se a balança pender para o lado contrário à primeira pesagem, quer dizer que uma das duas bolinhas que mudaram de posição é o intruso. Posso pintar as demais de cinza.

Bal10.png
Uso a terceira pesagem, de uma das bolinhas do prato contra um peso neutro. Se der igual, sei que o intruso ficou fora, e se é mais leve ou não. Se der diferente, o intruso é a bolinha pesada, e sei o peso relativo.

1.2.3 A balança pende para o mesmo lado
Neste caso, sei que as bolinhas que ficaram de fora são neutras. E as que mudaram de lado também são neutras.

Bal11.png
Fico com três bolinhas de incógnita. Posso usar o mesmo  “Procedimento das três incógnitas” do item 1.1.2 para encontrar o intruso e o seu peso relativo.

Portanto, está resolvido o puzzle.

De forma geral, em cada passo procurou-se ganhar o máximo possível de informação nova. A distribuição do conjunto incógnitas no prato 1 x incógnitas no prato 2 x incógnitas fora do prato ficou o mais igual possível. E isto tem relação total com Informação.


Qual é a lógica da resolução do puzzle, sob a ótica da Teoria da Informação?

A Teoria da Informação de Claude Shannon, publicada em 1948, é importante para definir limites na transmissão de dados, número de bits para compressão de dados. Tem muita relação com entropia, que é mais ou menos a medida de desorganização do sistema.
A cada passo, tentamos diminuir ao máximo a entropia do sistema.

Início: Entropia máxima.

Inform01.png

Intuitivamente, sabemos que se eu usar a primeira pesagem para pesar uma bolinha em cada prato, e deixar 10 de fora, vou estar ganhando pouca informação. Se, por sorte, uma das duas bolinhas pesadas for mais leve ou mais pesada, resolvo de cara a situação, mas esta é uma possibilidade remota. A medida de entropia retira esta intuição por probabilidades.

Vejamos.

Após pesar 4 e 4 bolinhas, deixando 4 de fora, temos duas possibilidades: ou a balança dá igual, ou dá diferente.
Se a balança der diferente, saberemos que as 4 de fora são neutras, e que algumas bolinhas não poderão ser a mais leve e outras não poderão ser a mais pesada.
Se a balança der igual, saberemos que as oito serão neutras, mas não temos nenhuma informação sobre as quatro que ficaram de fora.
Inform02.png
Temos 16 incógnitas para primeira situação, e 12 na segunda.
Temos 2/3 de chance ocorrer a primeira situação (probabilidade da bolinha diferente estar entre as 8 pesadas) e 1/3 da segunda situação.
Portanto, o valor esperado do número de incógnitas é de 16*2/3 + 12 *1/3 = 14.6

Se eu pesar 5 e 5, deixando duas de fora?

Teremos o seguinte quadro.
Inform03.png
Valor esperado: 20*10/12 + 6*2/12 = 17.6 (terei mais incógnitas que pesando 4 x 4 x 4)

Se eu pesar 3 e 3, deixando 6 de fora?

Teremos o seguinte quadro.

inform04.png

Valor esperado: 12*6/12 + 18*6/12 = 15 (terei mais incógnitas que pesando 4 x 4 x 4)

Se eu pesar 1 e 1, deixando 10 de fora?

Teremos o seguinte quadro.
Inform05.png

Valor esperado: 4*2/12 + 30*10/12 = 25.6 (terei mais incógnitas que pesando 4 x 4 x 4 ou 5 x 5 x 2 ou 3 x 3 x 6)

E isto confere com a intuição. Pesar 1 e 1 deixando 10 de fora é pior do que pesar 2 x 2 x 8. E a melhor situação é a mais simétrica, 4 x 4 x 4.

Em machine learning, existe até um algoritmo de classificação que usa exatamente este mesmo princípio. O nome do algoritmo é  C4.5, e ele faz o seguinte: em cada passo, calcula a entropia se aplicar um critério, e escolhe o critério que mais reduz a entropia. Depois, escolhe o segundo critério da mesma forma, e assim sucessivamente.

O C4.5 é simples computacionalmente, e na prática chega a bons resultados. E é mais ou menos como aplicar o problema de separar bolinhas com uma balança, porém com milhares de bolinhas, e com uma balança de várias dimensões!

Bom, duvido que a pessoa que inventou o puzzle tivesse pensado em Claude Shannon e o algoritmo C4.5. Só mesmo este blog maluco para fazer este tipo de correlação!

Detecção de Veículos utilizando Visão computacional

 

O projeto 5, do nanodegree de veículos autônomos da Udacity, consistia em identificar veículos num vídeo, utilizando visão computacional.

ScreenshotExample.jpg

Vídeo ilustrativo:

 

Relatório completo na plataforma MediumRelatório completo na plataforma Medium:
View story at Medium.com

Um neurônio de McCulloch-Pitts

O que um único neurônio pode fazer?

 

A primeira noção de neurônio artificial é de um paper de 1943, por dois sujeitos: Warren McCulloch e Walter Pitts.

Imagine Walter Pitts como um pequeno gênio, nascido numa família severa, onde o seu pai odiava a escola e queria que ele trabalhasse. Imagine Pitts escondido na biblioteca pública à noite, lendo o Principia Mathematica de Bertrand Russell (um dos maiores matemáticos de todos os tempos) e sonhando em desvendar o mundo.

Walter Pitts (note a testa do sujeito)

Não conseguindo resistir à tentação, coloco aqui uma imagem do Líder, da revista Incrível Hulk.

O Líder

Anos depois, Pitts encontra Warren McCulloch, um neurofisiologista muito mais velho e já respeitado. McCulloch explica que quer modelar o cérebro de uma maneira lógica, como os neurônios do cérebro funcionam, as analogias com o modelo de computador de Alan Turing, a Principia Mathematica, e assim vai. Algumas horas depois, fica evidente que Pitts é o cara certo para fazer a formulação matemática do problema.

Warren McCulloch
Impressionado pela genialidade de Pitts, McCulloch o “adota”. Pitts passa a morar na casa de McCulloch, e eles trabalham juntos todas as noites, após a família de McCulloch ir para a cama. O brilhante, respeitado, velho cientista e o fugitivo de casa, desempregado, sem ensino médio, jovem gênio.
Juntos, eles criam a primeira ideia de neurônio artificial, no paper “A logical calculus of the ideas immanent in nervous activity”, 1943.

O neurônio artificial é algo que recebe sinais como entrada, multiplica por um peso e compara o resultado contra um discriminante. Se é maior, a saída é um. Senão, é zero.

O neurônio de McCulloch-Pitts é binário, com poucos neurônios e sem técnica de retropropagação para fitar os pesos. Pitts mostrou que uma combinação desses neurônios pode emular as portas lógicas (ou, e, não) e, fazendo isto, fazer o mesmo cálculo que um computador digital. Na mesma época, os computadores digitais estavam sendo projetados pelo grande John von Neumann (outro gênio), o que significava que eles faziam todas as contas no braço.

Imagem do paper de 1943

Após este trabalho seminal, uma área completamente nova começou a florescer. Hoje, há retropropagação, múltiplas camadas, centenas de milhares de neurônios, várias funções de ativação, dropout, convolução, transferência de conhecimento, regularização… e muito, muito mais a vir.

Paper de 1943:

http://link.springer.com/article/10.1007%2FBF02478259

Este paper tem apenas três citações. Uma delas é o Principia Mathematica de Russell e Whitehead.

Apenas para finalizar esta nota histórica, a vida real não é um conto de fadas, de mendigo a príncipe. A vida de Pitts foi de mendigo a príncipe para mendigo de novo. Walter Pitts entrou em depressão após algumas decepções. Ele começou a beber pesadamente, se isolou cada vez mais de todos os outros, e morreu sozinho, na pobreza. Ele tinha 46 anos.


Conclusão

Walter Pitts trabalhou numa biblioteca à noite, com lápis e papel. Fico me imaginando o que ele poderia fazer, se tivesse um computador digital e técnicas modernas como TensorFlow, Keras, GPU…

Um mundo inteiro foi construído a partir do neurônio de McCulloch-Pitts, e um mundo muito, muito maior está sendo construído. O mundo é grande!

Escrevi este post em inglês no link a seguir, com um complemento técnico em Keras.

View story at Medium.com


Projeto 3 – Ensinando um carro a se auto-dirigir

Sobre o projeto 3, do nanodegree de carros autônomos da Udacity.

Consiste em ensinar um carro a dirigir sozinho, num ambiente simulado – um vídeo game mesmo. Lida com visão computacional e redes neurais.

Fiz um relatório bem detalhado (e muito técnico) em https://medium.com/@arnaldogunzi/teaching-a-car-to-drive-himself-e9a2966571c5#.d06wvx7hy.

 

Screenshot01.jpg

View story at Medium.com

Como ser um engenheiro de carros autônomos (self driving cars)

Ainda não é possível ser um Engenheiro de Carros Autônomos, porque não existem cursos de graduação sobre o assunto. Mas é possível ser um “nano engenheiro” de carros autônomos. E este post é uma análise deste nanodegree.

A plataforma de ensino on-line Udacity (www.udacity.com) oferece um curso “nanodegree” sobre carros autônomos. Hoje, final de 2016, é o primeiro curso no mundo, até onde eu sei.

Udacity.jpg

A Udacity é um plataforma de ensino on-line, fundada por uns caras de altíssimo nível técnico e muito idealistas, como o alemão Sebastian Thrun. Este foi o líder da equipe que venceu o grande desafio de carros autônomos da Darpa em 2005, com o carro Stanley, da Universidade de Stanford (vide post sobre o assunto).

stanley

Thrun foi para o Google, após vencer o grande prêmio. Depois de alguns anos trabalhando no veículo autônomo do Google, Thrun decidiu se dedicar integralmente ao Udacity. Ao invés de construir um carro com sistema fechado, ele acha que pode ser mais útil ensinando milhares de pessoas e construindo um carro open-source. E ele é o cabeça deste nanodegree.


O nanodegree

A Udacity tem alguns cursos gratuitos da área de tecnologia, e outros pagos, com acompanhamento, chamados de “nanodegree”. Comecei a fazer, agora em dezembro de 2016, o nanodegree de “Self Driving Cars”. Isto significa que sou uma das primeiras pessoas do mundo a fazer o curso.

O nanodegree “Self Driving Cars” é dividido em três módulos de três meses cada um.  Cada módulo custa US$ 800,00. Se o dólar estiver a R$ 3,50, dá R$ 2.800,00 para cada módulo, e R$ 8.400,00 para tudo. É caro? Depende. Se der para aprender muitas novas tecnologias, não.
Nota solta: Tive uma certa dificuldade de pagar o curso. Pelo valor ser alto, o cartão de crédito bloqueou. Tive que ligar para o banco, ficar um tempão pendurado com o atendente, provar que eu era eu mesmo, depois provar que eu não era um bandido tentando se passar por mim para me roubar, etc…


Módulos
São três módulos sobre o assunto, da qual somente o primeiro existe ainda.

1: Visão computacional e aprendizagem profunda: visão computacional envolve muito mais do que apenas filmar um imagem ou fazer filtros para mudar cor. Envolve identificar e interpretar objetos, e para tal, deve-se lançar mão de ferramentas de aprendizagem profunda, como redes neurais.

Não se sabe muito sobre os módulos 2 e 3, mas os temas são:

2: Sensores (câmera, radar, lidar, gps), localização e controle.
3: Planejamento da rota e sistemas

O engraçado é que não tem nada de mecânica. Só de eletrônica e computação. Os carros já tem toda a mecânica necessária. O que queremos substituir é justamente a inteligência com o uso da computação.


Motivação

Para mim, em particular, o curso já está valendo muito, muito a pena.
Olha o que fiz, na primeira semana do curso. Um projetinho para identificar, através de visão computacional, as linhas da estrada.

Imagem original:
solidWhiteRight.jpg
Desenho da linha através de processamento computacional (linha branca mais espessa):

laneModified.jpg

Fiz até um videozinho demonstrando o método, no link a seguir.

Legal, não?

Agora, um exemplo brasileiro. Av. Hélio Pelegrino, em São Paulo:

frameteste
Original
framelane
Com algoritmo de linhas

Vídeo com o método de identificação de linhas. Não ficou muito bom, mas a pessoa que fez o vídeo (eu) também não sabe filmar direito.


O Background necessário.

Agora, vamos colocar os pés de volta no chão: o curso é num nível bem alto. Por isso, é necessário ter um excelente background técnico. Dá para fazer o projeto acima em uma semana, mas só se o aluno tiver bons pré-requisitos antes. Preferencialmente, é bom ser da área de Exatas, alguma engenharia hard.

Tive um mês e pouco entre a inscrição e o início efetivo do curso. E, como um bom brasileiro descendente de japonês, comecei a estudar o conteúdo do curso antes mesmo dele começar.

Listo a seguir algumas tecnologias utilizadas neste curso.


Linux

Cheguei à conclusão de que era melhor ignorar o Windows para fazer este curso. Isto porque há alguns pacotes de Redes Neurais profundas que só rodam no Linux, ou rodam melhor no Linux (é mais testado, com mais usuários, mais help se der pau). Instalei o Linux Ubuntu. E na verdade, passei a ser um grande fã do Linux. Tem tudo o que é necessário para fazer excelentes trabalhos.

logo-ubuntu_st_no®-orange-hex.png

A única coisa ruim do Linux é que não tem o MS Excel. Até dá para usar o Open Office Calc, mas tenho centenas de milhares de linhas de código legado no Excel, além do que o Excel é onipresente no mundo corporativo.


Programação
A linguagem de programação utilizada é o Python (https://www.python.org) . O python se tornou a língua franca da área de deep learning e computação científica em geral, pela sua facilidade de uso e facilidade de extensão com outras ferramentas.

Python_logo.png

Eu não sabia Python, nem um pouco. Mas já fiz vários programinhas em VBA, Javascript, Java. Meu mestrado foi escrito em Matlab. Sou especialista na linguagem de otimização Aimms. Quando a gente lida com algumas linguagens, fica muito fácil pegar as manhas de outras. E, mesmo assim, fiquei umas duas semanas estudando python e continuo estudando.

python-tour-5-728.jpg


Numpy, Scypi, Pandas, Matplotlib e outros módulos

A grande vantagem do Python é que tem uma sintaxe muito simples, e consegue incorporar facilmente módulos especialistas.

python_sci_pack_ing.png

O numpy e scypi (https://www.scipy.org/) são módulos de computação científica. Eles fazem com que o Python tenha uma notação parecida com o Matlab ou o Octave, e uma performance semelhante. A performance é possível porque o Python é quase como um front end, chamando em background bibliotecas escritas de forma altamente otimizada. Por isso, vira e mexe é necessário instalar algum módulo para fazer algo específico, digamos carregar arquivos (pandas) ou plotar algum gráfico (matplotlib).

O Jupyter Notebook (http://jupyter.org/) é como se fosse uma página da internet que tem alguns trechos de código python rodáveis. Fica bastante didático por ter a interface web, e bastante poderoso por ter todo o código rodável por entre ele.

ipy-notebook-spectral.png


OpenCV

De acordo com a própria filosofia do Sebastian Thrun, de que o software tem que se virar com o hardware que existe, há uma forte dependência de Visão Computacional: interpretar o vídeo, da mesma forma que interpretamos que numa cena, há uma estrada, há carros, há alguém querendo atravessar a rua.

OpenCV_Logo.png

Para tal, há um pacote computacional opensource chamado OpenCV (Open Computer Vision http://opencv.org/). Ele tem dezenas de algoritmos de processamento digital de imagens, para usos diversos. Baixei e instalei o PpenCV. Só que não foi um processo muito simples, tive que instalar um monte de outras coisas, deu pau, etc. Mas no final, deu certo.

Exemplo de aplicação do OpenCV: identificar rostos computacionalmente:

faceDetection.png


Keras, TensorFlow, Cuda

Redes neurais artificiais são algoritmos inspirados no funcionamento dos neurônios do cérebro. Cada neurônio recebe um ou mais inputs, multiplica por um peso, e aplica uma função de ativação, gerando um resultado. Este resultado pode passar para um ou mais neurônios da rede.

neural_net2.jpeg

Há 10 anos atrás, quando fiz a cadeira de Redes Neurais na Federal do Rio de Janeiro, isto tinha pouca aplicação de verdade. O state of the art eram umas redes neurais de 3 camadas, que faziam coisas simples, tão simples que poderiam ser feitas de outros modos.

A área de Redes Neurais deu um salto gigantesco em poucos anos. Aliando a evolução computacional do hardware com novas técnicas de treinamento das redes, e ao processamento maciçamento paralelo em GPU, hoje é possível ter redes neurais profundas, de mais de 100 camadas, com alguns milhares de neurônios, contra as redes neurais rasas do passado.

neuron.jpg

Para efeito de comparação, estima-se que  cérebro humano tenha 100 bilhões de neurônios, que podem gerar uma quantidade infinitamente absurda de conexões… e todo este aparato entre nossas orelhas pesa menos de 1 quilo e meio, e gasta alguns watts de energia. É impressionante.

neurons51.jpg

Não necessariamento o maior número de camadas é melhor. Depende da aplicação. Mas cada camada é como se fosse um nível de abstração a mais. E, para coisas complexas, como ensinar o computador a identificar uma placa de trânsito no meio de um monte de outros fatores, podem ser necessárias muitas camadas da rede neural.

Para ter uma ideia do quão recente é este avanço, o Tensor Flow (pacote computacional de Machine Learning do Google – https://www.tensorflow.org/) foi liberado para o público em nov/2015. Estamos em dez/2016, somente um ano depois.

tensor-flow_opengraph_h.png

O Keras (https://keras.io/) é um wrapper, algo de nível mais alto que utiliza o Theano ou o Tensor Flow por debaixo dos panos: facilita a utilização para os casos mais comuns, sem perder o poder computacional.

keras.png

Um dos truques que diferenciam pacotes como o TensorFlow de um suplemento de redes neurais comum é a capacidade de utilizar o poder do processamento de GPUs.

GPUs são unidades gráficas de processamento, feitas para serem extremamente eficientes no tratamento de imagens. É um mini super computador à disposição. Muito desta evolução foi devida aos vídeo-games, que passaram a exigir mais e mais velocidade, mais realismo, portanto mais pixels a serem processados, maior capacidade de processamento.

GPU.jpg


Matemática

Como não poderia deixar de ser, as ferramentas de processamento de sinais têm muito embasamento teórico na Rainha das Ciências: Cálculo, Álgebra Linear, Otimização. É bom relembrar um pouco desses conceitos.

maths-differential-equations.png


Conclusões

Como foi apresentado, é necessário ter uma série de pré-requisitos para fazer bem o nanodegree.

Não é necessário ter um conhecimento profundo em cada um dos tópicos apresentados. Até porque, como o curso é curto, só são utilizados alguns tópicos que interessam. Mas, para aproveitar bem o conhecimento apresentado, é legal ter uma boa ideia do que são essas ferramentas, de como trabalhar com cada módulo, pelo menos um conhecimento teórico introdutório. Ajuda muito ter um bom background em matemática e programação.

Como toda nova tecnologia, algumas dessas ferramentas podem evoluir bastante, enquanto outras vão morrer.

Imagino que o desenvolvimento dos self-driving cars siga uma clássica curva de inovação.

400px-Gartner_Hype_Cycle.png

No início, muita euforia: vão conquistar o mundo, gerar milhões de motoristas desempregados, etc. Depois do auge, vem a decepção: o negócio não é tão bom assim, não serve para nada. Após isto, a consolidação e uma visão mais real: para alguns nichos isto servirá muito bem, para outros não, não vai tomar todos os empregos do mundo, etc…

De qualquer forma, no meu caso está valendo bastante a pena fazer este curso, por estar em contato com essas novas tecnologias e por estar entendendo o que há de mais avançado no mundo da ciência da computação.

Arnaldo Gunzi

Dez 2016


Agradecimento

Agradecimento especial ao amigo Marcos Melo, por ter me indicado a plataforma Udacity. Ele é mesmo que me presenteou com uma impressora 3D. Dica: quando encontrar uma pessoa de alto nível intelectual, cole nele, porque já diziam os antigos gregos: “diga-me com quem andas, e eu direi que és”.


Links
Plataforma de ensino online:
http://www.udacity.com

Python:
https://www.python.org/
https://www.scipy.org/
http://jupyter.org/

Visão computacional:
http://opencv.org/

Redes Neurais:
https://www.tensorflow.org/
http://deeplearning.net/software/theano/
https://keras.io/

GPU

https://developer.nvidia.com/cuda-gpus

O Grande Prêmio de Nevada de veículos autônomos

Este post é um resumo do que aconteceu no Grande Desafio de veículos autônomos (veículos sem motorista, driverless cars, self driving cars) da DARPA, em 2005, tomando como referência o documentário da agência que consta nos links ao final deste texto.

Driverless_1.jpg

O desafio consistia em construir um veículo totalmente autônomo, para fazer um percurso de 230 quilômetros no terreno irregular do deserto de Nevada, em menos de 10 h. A recompensa, US$ 2 milhões.

A DARPA é a agência de projetos de pesquisas avançadas do departamento de defesa dos Estados Unidos.

Na verdade, esta história começa um ano antes. Em 2004, houve o primeiro desafio de veículos autônomos da Darpa. Mesmo percurso, mesmas regras. Só que ninguém terminou o trajeto. O veículo que foi mais longe foi o Sandstorm, da equipe Vermelha, da Universidade de Carnegie Melon: apenas 11 quilômetros. Todos os veículos tiveram algum problema: quebraram, tombaram após sair do caminho, pegaram fogo, etc.

Sandstorm.jpeg
Sandstorm

Alguns veículos participantes:

veiculo4veiculo5veiculo6

Como o desafio do ano de 2004 foi meio que um fracasso, a DARPA decidiu fazer outro desafio em 2005, um ano e meio depois. E agora, os times estão determinados a vencer.

veiculoTombado.jpeg
Veículo tombado no desafio de 2004

O Grande Desafio de 2005

Conheça os participantes.

Redwhittaker.jpeg

A Equipe Vermelha é a comandada por Red Whitaker, da Universidade Carnegie Mellon. Ele é um veterano da robótica, tendo feito trabalhos brilhantes em automação. Whitaker é um homem ambicioso, duro, agressivo. Quer ser o primeiro, e não vai medir esforços para tal. Chama o time Vermelho de “Exército Vermelho”. Ele lidera um pavilhão de engenheiros, mecânicos e programadores, e exige cada gota de suor de seu time.

Para aumentar a chance de vencer a corrida, Whitaker vai correr com dois carros: o veterano Sandstorm, do desafio do ano anterior, e o novo veículo Highlander.

highlander.jpeg
Highlander
  • O filho mais novo tem a mesma personalidade do pai: agressivo, forte, grande. Malvadão.
  • Já o veterano é mais fraco, mais prudente. Projetado para ao menos terminar a corrida.

Um problema que ocorrera no ano anterior foi que os sensores conseguiam enxergar de perto, mas não tinham muita condição de ver um pouco mais longe. Então, para este ano, a equipe vermelha incorporou sensores de longa distância para compensar esta falha.

Whittaker comanda um batalhão de mais de 100 pessoas, com um orçamento de 3 milhões de dólares, e tem como objetivo vencer a corrida com um dos dois carros.

O segundo grande concorrente é Sebastian Thrun, da Universidade de Stanford.

sebastianthrun.jpeg
Sebastian Thrun

Ele é calmo, dócil, bem intencionado e genial. Foi parceiro de Red Whittaker por muito tempo, na Universidade Carnegie Melon. É especialista em aprendizado profundo de máquinas, e desenvolveu robôs inteligentes que ajudam velhinhos, pegam bolas de tênis, exploram o fundo do mar.

Obviamente Thrun quer vencer a corrida, mas principalmente quer contribuir para o avanço da tecnologia.

O foco de Thrun é o software, não o hardware, ao contrário da equipe vermelha que tem um grupo focado só na mecânica e outro só nos sensores. O cérebro, não os músculos. Thrun conseguiu com a Volkswagen um veículo cheio de servo-motores controláveis por computador, e o batizou de Stanley, que é um diminutivo de Stanford.

stanley.jpeg
Stanley

Stanley tem os sensores mais simples possíveis. Não tem nenhum sensor que se move, para não quebrar.

Nem todos os veículos são carros. A máquina mais leve da competição é a motocicleta autônoma “Ghost Rider”, criada por um cara chamado Anthony Lewandowiski (será que é parente do juiz do STF?).

autonomousbike.jpg
Motocicleta autônoma Ghost Rider

Aliás, Ghost Rider é um bom nome. Para quem não sabe, o Motoqueiro Fantasma da Marvel Comics é um sujeito com cara de caveira, todo dark e cheio de correntes, numa motocicleta em chamas. Toda essa pose radical, e ele é bonzinho por dentro. O Motoqueiro Fantasma olha para os bandidos e faz eles se arrependerem de seus atos ruins, haha.

GhostRider.jpeg

O caminhão autônomo, um monstro comparado aos outros, é criação do time Terramax.

teamTerraMax.jpeg
Caminhão autônomo Terramax

O time é formado por um fabricante  de caminhões para situações extremas, para fins militares. Por exemplo, um caminhão anfíbio, que entra na água e vai embora.

Fora esse pessoal, a competição teve mais 19 finalistas, cada um com o seu veículos, suas técnicas, os seus sonhos de glória.


Corrida classificatória

O primeiro dia é classificatório. Os veículos devem percorrer uma pista de obstáculos, e o tempo do circuito define o grid de largada do dia seguinte.

A equipe Vermelha, com o Highlander, é o que teve menor tempo e vai largar na pole-position.

O Stanley, é o segundo. Stanley foi o único veículo que não cometeu nenhuma falha no percurso.

Classificatory.jpeg
Stanley na corrida classificatória

O Sandstorm, da equipe vermelha, é o terceiro do grid de largada.

Ghost Rider foi eliminado, quando entrou num túnel com pouca luz e perdeu a estabilidade.

veiculoobstaculo2.jpeg
Veículo autônomo passando pelos obstáculos

O Grande Prêmio de Nevada

Afinal, o grande dia!

Duas horas antes da corrida, o comitê organizador divulga para os times o percurso a ser seguido.

A equipe do Stanley simplesmente inputa o percurso no software do carro.
Já a equipe vermelha coloca o seu batalhão para pré-calcular as velocidades ideais de todos os trechos do trajeto. Red Whittaker acredita que, quanto mais informação para os seus carros, melhor.

RedTeamAttack.jpeg

A corrida tem início. Os carros são lançados com um intervalo de 5 min entre eles. Primeiro, o Highlander. Depois, o Stanley de Stanford, depois o Sandstorm da equipe Vermelha.

Race01.jpeg

Equipes na largada

Highlander vai muito bem. Consegue performar uma grande velocidade, e abre vantagem sobre os demais carros.

TerraMax foi o último a partir. Anda como a tartaruga do conto de Esopo: devagar e sempre.

Race03.jpeg

Highlander continua abrindo vantagem sobre o segundo colocado, Stanley.

Dezoito veículos conseguem ultrapassar a marca de 11 quilômetros. Ou seja, em um intervalo de 1 ano, o pior competidor performou melhor do que o primeiro colocado do desafio de 2004! Uma evolução considerável.

Highlander estava muito bem. Porém, de repente, Highlander começou a ficar esquisito. Parou na estrada. Parecia estar perdido. O carro prosseguiu viajar após a empacada, mas numa velocidade muito menor.

Enquanto isto, Stanley continuou no seu ritmo, se aproximando.

Os demais carros participantes começaram a quebrar. Sensores quebrados, problemas mecânicos, carros perdidos no deserto… um a um, foram caindo fora da competição.

A equipe Vermelha estava vendo que algo estava errado com o Highlander. Mas, nesta corrida, não havia pit stop para dar uma arrumada. Eles nada podiam fazer, estava tudo nas mãos de Highlander (computador tem mãos?). Aparentemente, o sensor laser de longa distância, que tinha partes móveis, parece quebrado.

Race04.jpeg

Um ponto azul surgia no espelho retrovisor de Highlander. Stanley se aproximava mais e mais.

Stanley se aproximando. O carro atrás do Stanley é de supervisores da corrida.

Race02.jpeg

E, o inevitável acontece! O momento mais épico da história dos carros autônomos! A primeira ultrapassagem de carros autônomos já ocorrida no planeta! Stanley ultrapassa Highlander! Ayrton Senna ultrapassa Alain Proust. Rubens Barrichelo ultrapassa Michael Schumacker! (Ops, isto nunca aconteceu).

Algum tempo depois, o veterano Sandstorm também consegue ultrapassar Highlander. O patinho feio superou o irmão mais jovem.

A posição relativa não mudou mais até o final da corrida.

Finalmente, a linha de chegada. Após 6 horas e 53 minutos, com uma velocidade média de 30 e poucos kilômetros por hora, Stanley cruza a linha de chegada. É o grande vencedor do GP de Nevada.

Race05.jpeg

Onze minutos depois, Sandstorm cruza a linha de chegada, e mais 9 minutos depois, Highlander, apesar de todos os problemas, consegue fazer todo o percurso. Note que uma diferença de 10 minutos em 7 horas é muito pequena, o que mostra que qualquer problema casual poderia ter mudado completamente esta ordem.

Stanford é o primeiro. O time Vermelho emplaca o segundo e terceiro lugares.

Mais dois competidores conseguiram completar a prova: o Kat-5, em quarto lugar, e o Terramax (o caminhão), em quinto. O Terramax demorou 12 horas para fazer o percurso, sendo eliminado pelo limite de tempo de 10 horas. Mas foi um feito incrível, um monstrengo desses conseguir percorrer sozinho 230 quilômetros no deserto.

newOrleans.jpeg
Equipe KAT-5, chegou em 4o lugar

O quarto lugar é um carro tão feio que me lembra algo pré-histórico. É como se fosse os irmãos do Capitão Caverna, na Corrida Maluca.

CorridaMaluca.jpg

Para quem é muito novo, há muito tempo atrás existia um desenho chamado “Corrida Maluca”.

DickVigarista.png

Tinha o Dick Vigarista e o cachorro dele, o Barão Vermelho…

baraovermelho.jpeg

Nesta corrida de carros autônomos, só faltou a Penélope Charmosa.

penelope-charmosa.jpg


Conclusão

O Grande Desafio de 2005 foi um marco na história de carros autônomos. Dirigir é uma das tarefas mais chatas que existe, na minha opinião. Ficar horas olhando para a estrada, fazendo movimentos rotineiros durante quase todo o tempo. Tarefas rotineiras são a especialidade de robôs e computadores.

O mundo precisa de mais gente como Thrun e Whittaker. Caras que revolucionem o software e o hardware. Que desenvolvam aplicações práticas para o mundo.

Me espantou muito o desempenho do Terramax. Talvez uma das principais aplicações de carros autônomos seja em áreas industriais e de alto risco para um ser humano. Por exemplo, o Pentágono planeja que pelo menos um terço dos veículos de guerra sejam autônomos no futuro.

Sebastian Thrun foi para o Google. O carro autônomo do Google tem o DNA de Stanley. Depois de vários anos no Google, Thrun fundou a plataforma de treinamento on-line Udacity. Ele acha que tem mais a contribuir ensinando, e desenvolvendo um carro autônomo open-source, do que trabalhando numa plataforma fechada.

googlecar.jpeg

E é por causa da visão de Thrun que escrevo este post. Sou uma das primeiras pessoas do mundo a começar o nanodegree de carros autônomos da Udacity (https://www.udacity.com/drive). Isto merece um post em especial, mas foi através deste curso que fiquei sabendo do vídeo descrito.

Red Whittaker continua na Universidade Carnegie Melon. A equipe vermelha ganhou o Grand Challenge seguinte, em 2007: carros autônomos na cidade, ao invés de no deserto.

Agora, Whittaker quer conquistar a Lua: está na competição “Google Lunar X Prize”, que tem o objetivo de fazer uma espaçonave robótica ir até a lua, andar 500 metros e transmitir vídeo de alta definição para a Terra.

Vamos ver (e ajudar a escrever) as cenas dos próximos capítulos.

Arnaldo Gunzi

Dez 2016


Links

Vale muito a pena ver o vídeo original, sem as “interpretações” do meu post:

Outros links:

Como ser um engenheiro de veículos autônomos

https://en.wikipedia.org/wiki/DARPA_Grand_Challenge#2005_Grand_Challenge

https://en.wikipedia.org/wiki/Google_Lunar_X_Prize

https://en.wikipedia.org/wiki/Red_Whittaker

Puzzle – pirâmide

 

Tenho um puzzle, que é assim. Como montar uma pirâmide a partir de 4 peças iguais.

É de uma empresa chamada Thinkfun. É um puzzle bem interessante.

s-l300.jpg

São quatro prismas trapezoidais, conforme foto.

piramide1

 

Por tentativa e erro, dá para ver onde as peças combinam.

img_2967

Já temos a base da pirâmide.

img_2968

 

Colocando a última peça:

img_2969

O que gosto neste puzzle é que as 4 peças são simétricas e bonitas. É um bom “brainteaser”.

 



Link da Amazon:

https://www.amazon.com/A-ha-4-Piece-Pyramid-Brainteasers/dp/B001RV8HHY/ref=sr_1_1?s=hpc&ie=UTF8&qid=1480221838&sr=8-1&keywords=thinkfun+pyramid