Arte neuronal | Arte gerada por IA

Conteúdo

Introdução

A arte sempre transcendeu eras de existência humana. Podemos ver seus traços desde os tempos pré-históricos, como a arte Harappan na civilização do Vale do Indo até a arte contemporânea nos tempos modernos.. Sobre tudo, a arte tem sido um meio de expressar a criatividade de alguém, visões de como percebemos o mundo. Como disse o lendário Leonardo Da Vinci,

"Pintura é poesia que se vê mais do que se sente".

O que às vezes esquecemos é que a maior parte da arte segue um padrão. Um padrão que nos agrada e faz sentido em nosso cérebro. Na próxima vez que eu ver uma pintura, tente notar as pinceladas nele. Você verá um padrão emergindo da tinta. Nós, como seres humanos, somos especialistas em reconhecer esses padrões. Nossos mecanismos neurais evoluíram para serem excepcionalmente frios ao longo dos anos no reconhecimento de padrões na natureza..

Agora você pode perguntar por que estou falando sobre arte e padrões. Isso porque vou mostrar a vocês como criar arte com a ajuda de cérebros artificiais!! Neste artigo, vamos construir uma rede neural artificial que irá extrair estilo de uma imagem e replicá-lo na outra. Então você está pronto?

Tabela de conteúdo

  • O que é arte neural?
  • Familiarize-se com o ponto crucial
  • Codificando
  • Para onde ir a partir daqui?
  • Recursos adicionais

O que é arte neural?

Vamos tentar entender este tópico com um exemplo.

the-starry-night-18891-jpglarge-6178391

Fonte [1]

A imagem acima é a famosa “A noite Estrelada” o Vincent Van Gogh. Basta olhar para a pintura por alguns minutos. O que você vê? Você percebe as pinceladas? Você vê as curvas e bordas que definem cada objeto, o que torna tão fácil para você reconhecê-los?

Agora vamos fazer uma tarefa rápida. Tente se lembrar dos padrões que você vê. Basta preencher seu cérebro com cada pequeno detalhe. Feito? OK, agora dê uma olhada na seguinte imagem.

tubingen-2640255

Fonte [2]

Esta é uma fotografia tirada de uma cidade chamada "Tübingen" localizada na Alemanha. Para a próxima etapa da tarefa, feche os olhos e tente reproduzir o estilo de uma noite estrelada com esta imagem. Pergunte a si mesmo, se você é van gogh (Hipoteticamente, claro!) E eles pedem que você desenhe esta fotografia levando em consideração os estilos que você memorizou antes, como você faria?

Pensar

.

.

.

.

Você conseguiu? Excelente! Você acabou de fazer arte neural!

.

.

.

Quer ver o que uma rede neural artificial pode fazer?
tubingen_starry_night-3736448

Fonte [2]

Você pode perguntar como uma máquina realizou tal tarefa. É simples, uma vez que você entende a essência!

O que a rede neural faz é tentar extrair o “pontos importantes” de ambas as imagens, quer dizer, tente reconhecer quais atributos definem a imagem e aprender com ela. Esses atributos aprendidos são uma representação interna da rede neural, que pode ser visto abaixo.

neural-art-1-1302146Fonte [2]

Então você conheceu os conceitos teóricos envolvidos na arte neural, agora vamos conhecer os aspectos práticos de sua implementação.

Entre no cérebro de um artista artificial:

A arte neural funciona da seguinte maneira:

  • Primeiro definimos as funções de perda necessárias para gerar nosso resultado, quer dizer, perda de estilo, perda de conteúdo e perda total de variação.
  • Nós definimos nossa função de otimização, quer dizer, algoritmo de retropropagação. Aqui usamos L-BFGS porque é mais rápido e mais eficiente para dados menores.
  • Em seguida, definimos nosso estilo e atributos de conteúdo de nosso modelo.
  • Em seguida, passamos uma imagem para o nosso modelo (de preferência nossa imagem de base) e nós o otimizamos para minimizar todas as perdas que definimos acima.

Saberemos alguns dos pontos importantes que você deve saber antes de começar. Embora a maioria dos fundamentos das redes neurais seja abordada neste artigo, Vou reiterar alguns deles e explicar algumas coisas adicionais.

  • O que é uma função de perda? A função de perda é uma função que calcula a diferença entre os valores previstos e os valores originais.. Basicamente, diz quanto erro ocorreu em um cálculo. Em qualquer algoritmo de aprendizado de máquina, a função de perda é usada para estimar o desempenho do modelo nos dados. Isso é especialmente útil no caso de redes neurais, onde você tenta iterativamente fazer seu modelo funcionar melhor. Ao implementar arte neural, deve controlar três funções de perda, a saber:
    • Perda de conteúdo, quer dizer, a diferença entre o “contente” da imagem resultante e da imagem de base. Isso é feito para garantir que seu modelo não se desvie muito da imagem de base..
    • Perda de estilo, quer dizer, a diferença entre o “estilo” da imagem resultante e da imagem de base. Para fazer isso, você precisa primeiro calcular a matriz de grama de ambas as imagens e então encontrar suas diferenças. A matriz de Gram nada mais é do que encontrar a covariância de uma imagem consigo mesma. Isso é feito para manter o estilo na imagem resultante.
    • Perda total de validação, quer dizer, a diferença entre um pixel na imagem resultante e seu pixel vizinho. Isso é feito para que a imagem permaneça visualmente coerente..
  • O que é uma função de otimização? Quando calculamos a função de perda, tentamos minimizar nossas perdas alterando os parâmetros. A função de otimização nos ajuda a descobrir quanta mudança é necessária para tornar nosso modelo melhor “otimizado”. Aqui, implementamos um método de otimização chamado algoritmo Broyden-Fletcher-Goldfarb-Shanno (BFGS). BFGS é uma variante do algoritmo de gradiente descendente em que uma diferenciação de segunda ordem é feita para encontrar o mínimo local. Leitura Este artigo para obter uma perspectiva matemática do algoritmo.

Agora que entendemos qual será o nosso fluxo para construir uma arte neural, Vamos descer e começar a hackear coisas!

Codificando!

Este Diwali foi interessante para mim. Decidi fazer algumas pesquisas sobre arte neural e como a Índia se destaca no dia de Diwali. Me deparei com esta foto “Índia na noite de Diwali”. E pensei em criar algo semelhante na mesma linha. Fazer isso, vamos combinar as duas imagens abaixo com a ajuda da arte neural.

reference_image-300x250-1827801 base_image-300x289-6507695

Fonte [3]

Então, primeiro vamos estabelecer as bases.

Paso 0: Instalar no pc Duro e suas dependências. Para isto, vamos usar um back-end Theano. Altere seu back-end seguindo as etapas mencionadas aqui. O que mais, você também deve definir a ordem adequada para a imagem. No arquivo keras.json, onde mudou o backend, substitua image_dim_ordering por 'tr'. Então, deve ser assim,

"image_dim_ordering": "th"

Paso 1: Em seguida, vá para seu diretório de trabalho e configure sua estrutura de diretório como mostrado abaixo

|-- keras_NeuralStyle                 # este é o seu diretório de trabalho
|   |-- base_image.jpg                # esta é a sua imagem base
|   |-- reference_image.jpg           # esta é a sua imagem de referência

Paso 2: Inicie um notebook jupyter em seu diretório de trabalho digitando jupyter notebook e implementar o seguinte código. Vou apenas fornecer uma visão geral passo a passo do que cada bloco faz.

  • Primeiro, você deve importar todos os módulos necessários para implementar o código

1-2511823

  • A seguir, definir os caminhos das imagens que você deseja projetar.

2-6414563

  • Defina as variáveis ​​necessárias e dê-lhes os valores mostrados abaixo. Observe que esses valores podem ser alterados, mas isso pode mudar drasticamente a saída. O que mais, certifique-se de que o valor da variável img_nrows é o mesmo que img_ncols. Isso é necessário para que a matriz de grama funcione..

3-2951367

  • Em seguida, definimos funções auxiliares. Eles são responsáveis ​​por lidar com o pré-processamento de imagens.

4-1823015

  • Crie marcadores de posição de entrada para passar imagens para o modelo

5-7504910

  • Carregue um modelo de rede neural pré-treinado (se você não sabe o que é pré-treinamento, consulte esta discussão)

6-8079076

  • Imprima o resumo do modelo para ver qual modelo é

7-8892636

  • Armazene os nomes de todas as camadas da rede neural como um dicionário junto com suas saídas

8-9153125

  • Conforme definido acima, nós configuramos as funções de perda

9-8252856

  • Em seguida, definimos os atributos de conteúdo e estilo …

10-8537718 11-6494202

  • E definir gradientes e função de saída final para arte neural

12-9883910 13-7323961

  • Nós definimos as funções para calcular perdas e gradientes

14-3047388 15-2092703

  • Agora pegamos a imagem base como entrada e a iteramos para obter nossa imagem final. Na minha máquina local, leva um minuto para obter o resultado em uma iteração. De acordo com seus recursos (e paciência), levaria no máximo 5 minutos obtêm o resultado. Você também pode aumentar o número de iterações para otimizar ainda mais o resultado.

16-606928317-4977750

  • E depois de uma longa espera, vamos pegar essa linda imagem!

at_iteration_0-4036308

NOTA: O arquivo de código pode ser visto no github aqui.

Para onde ir a partir daqui?

Vimos uma pequena demonstração de uma descoberta significativa no mundo da arte. Muitas modificações foram feitas neste método para torná-lo esteticamente agradável. Por exemplo, Gosto muito esta implementação em que eles pegaram diferentes estilos e os aplicaram a diferentes regiões.

02270_mask_face-150x150-7370341 02270_mask_face_inv-150x150-8755619 okeffe_red_canna-150x150-1180782okeffe_iris-150x150-767286002270-150x150-9543488

As duas primeiras imagens são as máscaras, que ajudam a estabelecer qual parte deve ser estilizada. As próximas duas imagens representam os estilos a serem usados. A última imagem é a imagem base a ser estilizada.

Abaixo está a saída gerada pela arte neural.

02270_output-225x300-9317939

Parece incrível, não? Estou certo de que, como eu, você também adora experimentar arte neural. Para ajudá-lo a começar com isso, Eu cobri o básico da arte neural e como você pode criar sua primeira imagem. Tenho certeza que você está ansioso para explorar mais e, portanto, Estou adicionando alguns recursos adicionais apenas para você.

Recursos adicionais

Estes são alguns dos melhores recursos que encontrei sobre arte neural. Vá em frente e entre no fascinante mundo da arte neural.

Referências

Fontes de imagem

[1] https://www.wikiart.org/en/vincent-van-gogh/the-starry-night-1889
[2] https://arxiv.org/abs/1508.06576
[3] Google

Notas finais

Espero que você tenha achado este artigo inspirador.. Agora é a hora de você conferir e fazer arte você mesmo!! Uma arte é criada, compartilhe com a comunidade. Se você tiver alguma dúvida, Eu adoraria interagir com você nos comentários.. E para obter experiência de trabalho em redes neurais, não se esqueça de tentar nosso problema de prática de aprendizado profundo: Identifique os dígitos.

Você pode colocar suas habilidades e conhecimentos à prova. Verificar Competições ao vivo e competir com os melhores cientistas de dados de todo o mundo.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.