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.

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.


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,


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.