• Português
  • English
  • Español
  • Neural Style Transfer

    Por: em 3 de maio de 2018

    Talvez você já tenha visto um desses aplicativos que transformam a sua foto em uma pintura do Van Gogh ou que misturam uma foto do seu gato com A grande onda de Kanagawa. Se você já veio ao DataLab, certamente reparou nos quadros dos nossos inspiradores, como a Ada Lovelace e a Katherine Johson, estilizados como imagens de cartoon. Nesse post, vamos discutir como essas imagens são geradas.

    Muitos dos algoritmos por trás desses serviços são baseados em redes convolucionais, e fazem parte de uma área conhecida como neural style transfer. O primeiro trabalho a usar redes convolucionais para transferência de estilo foi publicado em 2015 por Gatys, Ecker e Bethge [1]. Esse paper despertou grande interesse, acadêmico e de mercado, e motivou uma série de trabalhos posteriores.

    No entanto, a transferência de estilo entre imagens não é uma área de pesquisa nova e existia antes da popularização de deep learning, com enfoque especial na síntese de texturas. Uma das técnicas consistia em calcular estatísticas a partir da imagem que tentam capturar as propriedades da textura. A novidade no trabalho de Gatys foi, ao invés de extrair estatísticas diretamente da imagem, calculá-las a partir das camadas internas de uma rede neural convolucional treinada para classificação de imagens, a VGG. Mais precisamente, a VGG é utilizada para calcular a diferença de estilo e de conteúdo entre duas imagens. Considere duas imagens quaisquer A e B, vamos denotar por Fl(A) a camada l da rede neural usando como input a imagem A. A diferença de conteúdo entre as duas imagem é calculada como a soma das diferenças entre das camadas:

    Há uma intuição por trás dessa conta. Cada camada da rede representa a imagem em níveis diferentes de abstração. Os neurônios da primeira camada são ativados por características de baixo nível, como linhas diagonais, cores. Já nas camadas finais, os neurônios são ativados por caractéristicas de alto nível: olhos, orelhas, rodas. Assim, se as representações internas para imagens diferentes são próximas, especialmente nas camadas finais, espera-se que as duas imagens contenham o mesmo objeto. Para calcular a diferença de estilo, ao invés de somar diretamente a diferença entre cada camada, calcula-se a diferença entre estatísticas de cada camada (inspiradas nos trabalhos anteriores em síntese de textura):

    G denota a matriz de Gram, que extrai as estatísticas de segunda ordem da imagem (mais detalhes no artigo). Suponha agora que queremos misturar a foto de um gatinho com o estilo de Composição VII, do Kandinsky. A imagem que buscamos deve ter uma diferença de estilo pequena com a pintura e uma diferença de conteúdo pequena com a foto do gato:

    Isso nos sugere um procedimento de otimização para encontrar a imagem:

    Em termos mais gerais, fixando-se uma imagem com o estilo Ie outra com o conteúdo Ic, encontrar a imagem que mistura o estilo de uma com o conteúdo da outra é um problema de otimização:

    Basta utilizar algum método de otimização (descida no gradiente ou L-BFGS, por exemplo) para min-
    imizar a função custo:
    Note que nenhuma rede neural está sendo treinada, os parâmetros da rede convolucional estão fixos, o processo iterativo é sobre a própria imagem! Essa ideia de descida de gradiente na própria imagem é também o que está por trás do DeepDream, aquelas imagens surreais que se popularizaram como os “sonhos'” das redes neurais.

    Esse processo iterativo para gerar a imagem tem um ponto negativo bem claro: o tempo de execução. As diferenças de estilo e conteúdo devem ser calculadas a cada iteração do algoritmo de otimização, o que significa que a imagem devem ser passada várias vezes pela rede neural. Essa limitação leva a uma pergunta: será que podemos treinar uma rede neural que faça a o processo de otimização para nós? A resposta é sim, e os métodos baseados nessa ideia são conhecidos como fast style transfer. O input da rede, nesse caso, é a própria imagem do gatinho, e a saída é o gatinho estilizado. Os pesos da rede são treinados para minimizar a mesma função custo. Nesse cenário, o estilo está fixo: a rede é treinada para colocar o estilo de Composição VII na imagem de input. No entanto, recentemente foram propostas extensões capazes de lidar com múltiplos estilos e até mesmo um número arbitrário [2,3].

     

    [1] A Neural Algorithm of Artistic Style
    [2] Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
    [3] Instance Normalization: The Missing Ingredient for Fast Stylization
    [4] Gatinho + Kandinsky

    3 de maio de 2018

    Filtre por autor