<img height="1" width="1" style="display:none;" alt="" src="https://dc.ads.linkedin.com/collect/?pid=33098&amp;fmt=gif">

Deep Art: redes neurais criativas

Eu me lembro de um professor de pintura que eu tive falando: “Esqueça os contornos, eles estão em seu cérebro e não na realidade. Pintar é uma interpretação visual. Você não pinta uma cadeira, você encontra uma solução, na tela, para as cores, luzes e sombras que você observa, ignorando se elas enxergam uma cadeira ou um trem. Se você fizer isso certo, no final, conseguirá uma cadeira”.

Não sou um pintor, minhas cadeiras sempre acabavam parecendo com trens, portanto eu nunca soube se ele estava certo ou não. Provavelmente sim. Mas me pergunto o que ele diria sobre interpretação de imagem – feita por máquinas.

Recentemente, as ANNs (Artificial Neural Networks, ou Redes Neurais Artificiais) começaram a ser utilizadas para produzir imagens, algumas bonitas, como essa aqui:

Blog post Ricardo.png

 

 

 

 

 

 

Esta imagem e muitas outras figuras geradas por máquinas podem ser encontradas no Google Deep Dream.

A imagem final, à direita, não foi produzida por filtros de imagem ou algoritmos mutantes; foi criada por um ANN treinado e especializado em reconhecimento de imagem, nomeado CNN, mas utilizado ao inverso para combinar o conteúdo da primeira imagem do topo esquerdo com o estilo da imagem de baixo. OK, isso parece estranho. Vou começar pelo começo.

O que é uma Rede Neural Artificial?

É uma estrutura de computador inspirada pelas redes neurais biológicas. Quando foram inventadas, no meio do século 20, foram descritas como um modelo computacional do cérebro humano.

Como um diagrama, uma Rede Neural Artificial simples se parece com isso:

II.jpg

O resultado, ou output, é uma previsão, que pode ser representada por uma classe (“Gato”, “Cachorro”, “Trem”, ...) ou apenas um número (uma previsão de preço para uma casa, por exemplo).

A inserção, ou input, é a informação que damos à rede para obter uma previsão. Por exemplo, os pixels de uma imagem, ou uma informação que pode influenciar o preço de uma casa (locação, idade do prédio, etc.).

Dentro disto temos camadas dos chamados neurônios (os círculos brancos). Cada neurônio recebe inserções de dados e as utiliza para computar um resultado, um valor utilizado como informação para outros neurônios. Cada uma dessas conexões (as flechas no diagrama) tem 2 variáveis únicas, um peso e um erro.

Uma rede não seria de muito uso sem ser treinada para algum propósito. Um treinamento consiste em alimentar uma rede com várias amostras de informação identificada. Posto de outra maneira, nós dizemos à rede qual resultado é o correto para as informações que estamos enviando (é como dizer “essa imagem é de um cachorro”, “essa imagem é de um gato”, e assim por diante, para milhões de imagens, repetidamente). A rede aprende ao ajustar um pouco todos os pesos e erros progressivamente, assim, com as inserções, o resultado da rede se torna cada vez mais próximo ao do resultado identificado previamente.

Essa é uma descrição muito simplificada e sem detalhes de um ANN. Mas, sim, no final o modelo computacional inspirado no cérebro humano é apenas uma grande equação. Então vamos simplificar ainda mais e representar por W todos os pesos, por B todos os erros, por X todas as inserções e por Y todos os resultados e, para aqueles que gostam de estatística (quem não gosta?), vamos ter toda a rede representada na forma de uma regressão linear:

image4.png

Note que esta fórmula é uma super simplificação apenas para que conheçam o propósito deste post. Tendo isso em mente, vamos voltar ao Deep Dream.

Redes neurais vem em diferentes sabores e uma delas é muito boa em processamento 2D: As CNNs (Convolutional Neural Networks, ou Rede Neural Convolucional) são ANNs especiais utilizados pelo Google Deep Dream, e muitos outros sistemas de reconhecimento de imagem (incluindo aplicativos de celular), para classificar imagens. CNNs utilizam camadas dedicadas chamadas de camadas convolucionais que decompõe a imagem em mapas de características, cada um como uma imagem própria (representando partes da figura, cantos, bordas, contornos – meu professor de pintura não gostaria nada disso). CNNs também são utilizadas para reconhecimento de fala, linguagem natural e outras aplicações complexas.

Mas o CNN da Deep Dream não está tentando classificar nada. Como ela chega à imagem final?

Primeiro ela é treinada normalmente para reconhecimento de imagem, dando o X (as imagens) e o Y (a classificação de cada imagem), e ajustando o W e o B na equação:

image5.png

Foi descoberto que durante o procedimento de treinamento, uma CNN especializada em reconhecimento de imagem internamente representa figuras de uma maneira que permite a separação da imagem em conteúdo e estilo. Os mapas de características determinam o conteúdo, enquanto a correlação dos mapas de características nomeados Gram matrix representa o estilo da imagem.

Então o próximo passo é alimentar as imagens de “conteúdo” e “estilo” através da CNN e salvar os mapas de características e a Gram matrix respectivamente.

image6.png

Finalmente, nosso objetivo será o X na equação – a inserção de dados.

Image 7.png

É isso que queremos saber: dado o conteúdo e o estilo, qual é a melhor combinação de ambos? A rede é usada ao reverso para descobrir. Ao invés de ajustar o W e o B, ajustará o X, a imagem inserida, que começa como um ruído branco, em pequenos passos até estar suficientemente próxima ao conteúdo e estilo desejado.

Como a imagem de estilo e a de conteúdo nunca vão combinar, a rede é forçada a criar uma solução, como essa interpretação única do desafio.Image 8.png

Essa técnica é chamada de “deep art” porque, falando sobre uma definição flexível de “arte”, resulta em arte alcançada através de métodos de deep learning. Você pode ler mais sobre isso aqui, aqui e aqui, ou apenas ir à página do Deep Dream e baixar o aplicativo Prisma para você mesmo tentar criar imagens como esta.

Mas chega de falar de assuntos geek. Voltando à arte, o filme “Loving Vincent”, lançado no ano passado, é uma animação na qual mais de 800 pinturas à óleo no estilo de Van Gogh, pintadas durante 6 anos por uma equipe de 125 profissionais, foram utilizadas para criar 65.000 quadros para o filme. Sem desmerecer esse tremendo trabalho e a criatividade inestimável dos criadores, mas talvez o próximo filme deste tipo já possa ser produzido utilizando técnicas de deep learning.

Esse é o primeiro de uma série de posts sobre deep learning. No estilo “Deep Van Gogh”, obrigado ao Google Deep Dream e Feliz ano novo a todos (incluindo as máquinas).

Image 9.png

Compartilhar:
   



Mais lidos

Subscribe to Email Updates