Ensaios: DeepDream

Ensaios: DeepDream

Então um dos projetos mais recentes no qual ando trabalhando envolve utilizar Inteligência Artificial. Não posso falar mais sobre ele por questões de sigilo, mas não há problema em compartilhar um pouco da pesquisa que preciso fazer para desenvolvê-lo.

Assim como descrevi na página Sobre deste blog, eu sou formado arquiteto e portanto não tive uma formação oficial em programação, tendo que aprender tudo por conta própria e sempre pelo caminho mais difícil. Tal maneira, até pouco tempo atrás termos como Machine Learning e AI eram lendas urbanas ao meu ver.

Contudo, para esse trabalho em específico, não há outro caminho (hard code) que possa dar conta do serviço se não o uso de AI, a não ser que eu leve 20 anos.

Mas por onde começar a aprender esta caixa preta? A maioria das informações que encontrei na internet são técnicas demais, exigindo do leitor um profundo conhecimento de programação, GPU e cloud processing – que certamente não é o meu caso. Só depois de muitas horas jogadas no lixo e cada vez mais me sentindo um estúpido que procurei seguir um outro caminho, mais lúdico e menos pertencido. Nada de Neural Network, funções de sigmoide ou qualquer outro termo técnico complicado. Por que não começar por estudos mais visuais (visualmente possível de entender o sucesso ou o fracasso do experimento), focando no resultado e sem se preocupar muito com cada 1 dos conceitos teóricos extremamente complicados? Oras, uma vez bem sucedido o experimento eu volto e reanaliso passo-a-passo cada uma das funções e termos.

Para este primeiro estudo, seguindo a indicação de um amigo, comecei a mergulhar no DeepDream. Mas o que é isso?

Mais fácil começar explicando sua origem: alguns pesquisadores do Google, tentando treinar seu algoritmo para reconhecer imagens como cachorros, pássaros, lagartos, etc., perceberam que as informações geradas no treinamento de reconhecimento também eram muito valiosas no caso contrário, recriar as coisas que o algoritmo começava a aprender. Essa engenharia reversa do algoritmo servia como corpo de prova para ver se o programa realmente estava reconhecendo as coisas corretamente. Contudo, não demorou muito para os pesquisadores perceberem que o modo como o algoritmo entendia as coisas era completamente diferente do modo como um ser humano o entendia.

Sempre que o computador tentava criar alguma imagem, formas meio psicodélicas surgiam. Se o pessoal do Google só achou este evento uma coisa divertida e liberou o código open source, não demorou muito para artistas perceberem o valor criativo desta ferramenta. Para quem quiser ler o post original, clique aqui.

Apesar das imagens parecerem extremamente complexas, seu algoritmo por outro lado é quase que fácil, no mundo do AI pelo menos, de modo que até eu consegui entender e aplicar. Aqui um grande agradecimento ao Kesara Rathnayake por disponibilizar o pack deepdreamer para Python no Github.

Bem, chega de papo e vamos ver como esse deepdreamer lida com um dos meus projetos de arquitetura favoritos: a Capela Médici, em Florença, projetada pelo grande Michelangelo (algum dia eu ainda faço um post sobre ela e por que a acho tão incrível).

 
level-00.jpg

A imponente Capela Medici!

 

Bem, agora para efeito de estudo e aprendizado, vamos estragá-la.

Usei nesse estudo o módulo de Python disponibilizado por Kesara Rathnayake. Para rodá-lo como eu pretendia, precisei fazer algumas alterações, mas no geral tudo correu sem muitos problemas (só 1 semana batendo a cabeça na parede).

Utilizando o famoso módulo TensorFlow, muito comum em aplicações de machine learning e AI em geral, em conjunto com o deepdreamer consegui utilizar um bando de dados de imagens já treinadas do Google, que vem junto com o TensorFlow, para modificar minhas imagens de Input. Percebi que o modo com o Google catalogou as imagens foi seguindo uma hierarquia de abstração, sendo que quanto menor o grau da camada mais abstrato é a imagem de retorno (conforme vocês verão em seguida).


 
level-01.jpg

Ondas

Primeiro nível de abstração

level-02.jpg

Linhas

Segundo nível de abstração

level-03.jpg

Quadrados

Terceiro nível de abstração

level-4.jpg

Círculos

Quarto nível de abstração

level-05.jpg

Olhos

Quinto nível de abstração

level-06.jpg

Cachorros e pessoas

?

Sexto nível de abstração

level-07.jpg

Animais e prédios

?

?

Sétimo nível de abstração

level-08.jpg

Répteis

?

?

?

Oitavo nível de abstração

level-09.jpg

Bolhas

?

?

?

?

Nono nível de abstração

level-10.jpg

Pássaros

?

?

?

?

?

Décimo nível de abstração

level-11.jpg

?

?

?

?

?

?

Décimo primeiro nível de abstração

 

Será que já posso me considerar um especialista em AI? Certamente não, mas posso dizer que este exercício foi um passo muito importante no meu aprendizado no campo do Machine Learning. Vários conceitos que antes eram apenas fumaça começar a fazer um pouco mais de sentido agora.

Conforme eu for tendo mais domínio sobre o assunto, pretendo compartilhar com vocês meus avanços.

 

Obrigado e até a próxima!


Receitas Clássicas: Voronoi

Receitas Clássicas: Voronoi

Brise Soleil Paramétrico

Brise Soleil Paramétrico