O Aprendizado por Reforço é a escolha certa para pintar como Bob Ross?

7

Meu local de trabalho está enfrentando um desafio de código de duas semanas que envolve a produção de um algoritmo para reproduzir 100 amostras de pinturas de Bob Ross o mais próximo possível, dadas algumas restrições:

  • As "pinturas" são enviadas como um arquivo JSON contendo uma cor de fundo e uma série de "pinceladas".
  • As pinceladas têm um ponto inicial, ponto final, raio e cor.
  • Há um limite de 500 traços por pintura.
  • Todas as 100 pinturas de referência têm exatamente o mesmo tamanho e proporção: 450x337.

Exemplo original de Bob Ross.

O servidor "pinta" cada envio e faz uma diferença por pixel com a pintura de referência. Cada pixel na pintura enviada é pontuado em um intervalo escalar de 0 a 1, com base em como é semelhante ao valor do pixel de origem e a pontuação da pintura é uma média de todas as pontuações de pixels. O pessoal da competição lançou bibliotecas para imagens de pintura e pontuação que podem ser executadas na linha de comando no MacOS / Linux.

Eu sinto que esse problema deve ser favorável ao ML, já que temos um mecanismo de pontuação detalhada de cada tentativa que o algoritmo tenta. Gerar e marcar uma pintura leva apenas cerca de 200ms. Infelizmente, sou principalmente um fanboy da ML (ouço muitos podcasts) e não sei como devo modelar o problema.

Deixar o algoritmo fazer 500 golpes completamente aleatórios e depois classificar a saída levaria uma eternidade para convergir em algo útil. Pensei em limitar o espaço de cores dos traçados a um conjunto das 64 cores mais frequentes em cada pintura (executando um histograma antes de começar a pintar) e também em limitar a seleção do tamanho do pincel do algoritmo.

Para o registro, simplesmente enviar uma imagem que é um campo sólido da cor mais comum me deu uma pontuação de 65%. Os algoritmos atualmente vencedores estão apenas convertendo as pinturas em grades e colocando um ponto da cor média em cada setor em cima de cada um.

Joshua Sullivan
fonte

Respostas:

5

Eu sugeriria algoritmos genéticos (GA) ou outros otimizadores globais para essa pesquisa, pois sua pontuação seqüencial ao "construir" a pintura em estados mais complexos provavelmente não é o melhor guia.

Existem alguns exemplos de quebra-cabeças semelhantes, como criar Mona Lisa fora de círculos , e aqui está um exemplo mais recente do mesmo problema, com exemplos de código .

Uma abordagem de GA consistiria basicamente em uma população de centenas de conjuntos de traços gerados aleatoriamente, nos quais você pontua e avalia as melhores opções. Em seguida, você seleciona da população, favorecendo soluções com a melhor pontuação (existem muitas opções para isso, como escolher apenas a fração superior), usando uma distribuição distorcida que favorece a parte superior. Crie pares de soluções e "crie" eles, pegando algumas partes do primeiro e outras do segundo pai. Adicione apenas um pouco de ruído aleatório como uma "mutação". Quando você tiver feito isso o suficiente para criar uma segunda geração, repita todo o processo. Existem muitas variações.

A RL também deve funcionar, mas você pode ter uma tarefa difícil para criar uma função de política ou valor que possa aprender o mapeamento de ações de acidente vascular cerebral e o estado atual para a política ou valor eventual. É definitivamente viável do ponto de vista teórico. O estado é a imagem atual. A ação é uma escolha do próximo golpe. A recompensa é a melhoria na pontuação, e provavelmente deve ser avaliada em cada ação (mas pode ser feita a cada 10, a cada 50 ou até mesmo no final - atrasos mais longos desafiam mais a RL, mas podem permitir uma iteração mais rápida). A maioria dos algoritmos de RL, como o Q-learning, deve ser capaz de evitar resultados "sem saída", onde boas pontuações iniciais são pistas falsas e precisam ser revisadas.

Não sei, mas ficaria muito interessado em ver se um GA ou RL resolve esse problema com mais eficiência. . . meu pressentimento é que GA seria o caminho a percorrer.

Neil Slater
fonte
11
Este foi meu primeiro pensamento ao ler a descrição do problema ... talvez porque eu tenha assistido recentemente a essa conversa: infoq.com/presentations/genetic-algorithms (50mins), onde esse é um de seus três exemplos de GA. github.com/ckoster22/geneticAlgoKcdc2017 possui o código TypeScript para ele.
Darren Cook
1

Eu acho que seu ceticismo de RL para esta tarefa é bem fundamentado. Mas tem havido alguma pesquisa em direção à construção de redes neurais para reproduzir o estilo dos pintores. Este trabalho aproveita o poder das redes neurais convolucionais.

" Um algoritmo neural do estilo artístico " Leon A. Gatys, Alexander S. Ecker, Matthias Bethge

Na arte, especialmente na pintura, os humanos dominam a habilidade de criar experiências visuais únicas através da composição de uma interação complexa entre o conteúdo e o estilo de uma imagem. Até o momento, a base algorítmica desse processo é desconhecida e não existe um sistema artificial com recursos semelhantes. No entanto, em outras áreas-chave da percepção visual, como o reconhecimento de objetos e rostos, o desempenho quase humano foi demonstrado recentemente por uma classe de modelos de visão de inspiração biológica chamados Deep Neural Networks.1, 2 Aqui, introduzimos um sistema artificial baseado em uma rede neural profunda que cria imagens artísticas de alta qualidade perceptiva. O sistema utiliza representações neurais para separar e recombinar o conteúdo e o estilo de imagens arbitrárias, fornecendo um algoritmo neural para a criação de imagens artísticas. Além disso,

Sycorax diz restabelecer Monica
fonte
11
Eu realmente não estou procurando transferência de estilo ... mais na linha de "dadas algumas limitações comportamentais estritas, faça o possível para recriar uma entrada arbitrária".
Joshua Sullivan