Recentemente, escrevemos uma coluna no Habr sobre como lançamos nosso próprio brinquedo on-line. Um dos truques sobre os quais estávamos seriamente confusos foi a geração de avatares da IA para o seu personagem "on the fly" de uma fotografia (enquanto trabalhava no protótipo e não faz parte do jogo). Ao mesmo tempo, a própria tecnologia é interessante e pode ser aplicada agora, não apenas conosco. Como prometido, falamos sobre isso com mais detalhes e vamos sentir o protótipo ao vivo!
Abaixo, você também pode encontrar: por que eles fizeram uma escolha em favor de um sistema de treinamento de IA atípico - sem marcar os dados e por que consideramos isso uma inovação científica; nossa fakapy ao criar avatares de IA que não precisam ser repetidos; como e onde a Adaptação de Domínio é usada hoje.

Se não houver tempo para ler a postagem
Seguimos o link para ver o trabalho da IA no momento.
Observe:
1. O conversor não funciona rapidamente, portanto, seja paciente, use energia que não seja de produção.
2. O sistema foi treinado apenas no campo masculino, para que as fotografias femininas deixem homens, provavelmente efeminados. A semelhança de retrato não deve ser esperada, porque Se o número de elementos usados for deliberadamente limitado, falaremos sobre isso abaixo.
De onde surgiu a ideia de criar avatares de IA?
Ela não apareceu do nada. O trabalho de aprendizado de máquina no uKit Group está em andamento há vários anos. Portanto, o projeto WebScore AI , que avalia em tempo real a atratividade visual do site, cerca de um ano atrás, foi aberto a todos os interessados e usado com sucesso para fins internos da empresa.
O uso de redes neurais no desenvolvimento de jogos é um tópico que periodicamente adquire hype considerável. Lembre-se de No Man's Sky ou RimWorld, que recebeu sua parte da atenção do jogo, e não apenas da comunidade, devido ao universo totalmente gerado, que tem variabilidade quase infinita, de acordo com os próprios autores. É verdade que, na realidade, a geração de mundos era procedural e, portanto, isso não tem nada a ver com redes neurais. No entanto, a tendência aqui é óbvia - o mercado está pronto para isso e está esperando, esfregando as mãos!
Achamos que a capacidade de enviar sua foto para o jogo e obter imediatamente um avatar pessoal que mais se parece com você, que ninguém mais tem, é divertido e pode se tornar um chip atraente e interessante. Além disso, a tecnologia pode encontrar claramente sua aplicação fora do jogo.
Vale ressaltar que a semelhança do personagem com uma pessoa real no Web Tycoon será relativa. Este é um passo deliberado, porque coletaremos avatares a partir dos elementos desenhados por nossos designers. E há várias razões para isso. Em primeiro lugar, na saída, queremos obter avatares de jogos no estilo do jogo, preservando o favorito de muitos. Em segundo lugar, certamente é seguro, pois permite sempre obter uma imagem em retrato, independentemente do que o usuário enviou.

Afinal, nem todo mundo quer ver um pepino realista entre os rivais.
Treinamento de modelo sem dados marcados
Essa abordagem do aprendizado de máquina pode ser chamada de inovadora, porque, de fato, a IA aprende sem nenhum dado inicial marcado. Devido ao que isso está acontecendo? A chave para o sucesso é a disponibilidade de ferramentas para gerar dados sintéticos. À frente de possíveis perguntas: não podemos dar as nossas.
Por que você decidiu treinar nossa IA dessa maneira? A marcação de dados é um trabalho monótono e muito volumoso de avaliadores. E se os designers decidirem de repente adicionar ao jogo, por exemplo, um terceiro tipo de óculos (no momento em que escrevemos o sistema havia dois deles), será necessário remarcar tudo, porque cada exemplo previamente marcado agora se torna potencialmente não ideal.
Além disso, no nosso caso, também valeu a pena considerar um momento como subjetividade: se você der 10 pessoas para coletar um avatar para uma foto, obteremos 10 avatares diferentes na saída. Nós checamos.
Foto original:

E os resultados de dois designers diferentes da nossa empresa:

Man vs Machine
Treinar não foi fácil. Primeiro, nossa IA capitulou em todos os aspectos:

Se alguém de repente não entendeu, a foto original é a mesma aqui. A IA transforma as bolsas sob os olhos em óculos de sol. Antenas de hussardo como presente. Os workaholics reais podem considerar isso como um recurso, não um bug.
Abaixo estão mais alguns resultados indicativos.


Ele não adiciona mais pontos e pode até se vestir! Existem alguns problemas com a reprodução de cores.
Diretamente sobre o processo de desenvolvimento
Como ponto de partida, adotamos várias soluções de transferência de estilo prontas, mas rapidamente tivemos que abandoná-las, pois elas não se adequavam a nós em sua forma pura. Também tentamos usar modelos generativos por conta própria, mas rapidamente concluímos que a maioria das soluções que encontramos não possuía exemplos de implementação ou não deu resultado.
Como resultado, o primeiro modelo generativo de sucesso foi o CycleGAN, que tomamos como base, completando-o de acordo com nossas necessidades. Perda Perceptual foi chamada para ajudar o CycleGAN padrão. Isso acentuadamente adicionou beleza às imagens resultantes.
Abaixo, você pode ver o CycleGAN em ação:

Ou outro exemplo, claro e familiar para todos que pelo menos uma vez usaram o aplicativo Prisma:

A principal dificuldade tradicionalmente é conseguir que o modelo generativo aprenda normalmente. Toda a família de tais modelos tem muitas feridas bastante características que nos últimos anos tentaram resolver tudo: um longo período de treinamento, colapso de modo, sensibilidade à inicialização.
Havia também problemas puramente de engenharia que, em teoria, deveriam ser enfrentados por muitos, mas, por alguma razão, poucos escrevem sobre isso. Por exemplo, precisávamos fazer um carregamento paralelo rápido de dados com aumento, e o conjunto padrão de aumento apresentado em keras / tf / pytorch não era suficiente para nós. Além disso, inicialmente eu queria aumentar a CPU. O aumento da CPU tem suas vantagens inegáveis, a principal delas, em nossa opinião, é a capacidade de "descarregar" a placa de vídeo, compartilhando responsabilidades entre os dois computadores.
Como resolver problemas
No caso de treinamento de GANs, trabalhamos principalmente com funções de perda (funções de perda). Então, adicionamos mais perda de identidade e perda de cores. Ao mesmo tempo, brincamos com a arquitetura do gerador dentro do CycleGAN e, como resultado, chegamos a um reznet de 12 blocos (o original era um pouco curto para nós).
No caso de repetir código, escrevemos wrappers de nível superior sobre modelos, permitindo reutilizar o código usado em vários modelos ao mesmo tempo. O código para geradores de data também é generalizado de maneira semelhante pelas mesmas razões.
Para resolver o terceiro problema (carregando com melhorias na CPU), tive que criar e escrever meu próprio chip, mas sobre isso na próxima vez. Diremos apenas que é devido a isso que a tecnologia pode ser usada com sucesso em outros projetos que não estão de forma alguma associados aos avatares.
Fakapy ao criar interfaces AI
O principal erro é uma avaliação incorreta da complexidade da tarefa. À primeira vista, muitas vezes parece haver um grande número de soluções prontas que são 99% adequadas para você. Eles só precisam ser levados e transferidos com segurança para o seu caso. Então, não é assim. Separadamente, vale a pena mostrar como é observar como, na GAN, que estuda com sucesso há vários dias, de repente algo literalmente explode, por que começa a gerar o jogo completo.
Algo assim:

Outro fator sério foi que, nos estágios iniciais, esquecemos de fixar sementes aleatórias e lembramos que os GANs são extremamente sensíveis à inicialização. Um fracasso muito vergonhoso de nossa parte, como a franqueza.
Onde a adaptação do domínio é usada hoje
A adaptação do domínio penetra lenta mas seguramente nas tarefas de IA. Essa tendência constante se deve ao fato de que, apesar do rápido crescimento das informações disponíveis no mundo moderno, a marcação ainda permanece uma tarefa longa e cara. O desenvolvimento do Transfer Learning e sua generalização em face da adaptação do domínio resolve esse problema.
Um exemplo da aplicação prática da adaptação de domínio é o trabalho da Apple para expandir o conjunto de dados de fotografias de olhos humanos, adaptando imagens geradas sinteticamente. Em seu estudo, eles mostraram que uma abordagem eficiente é gerar dados artificiais inicialmente rotulados com subsequente aproximação a dados reais usando métodos de Adaptação de Domínio.

Ou aqui está outro exemplo interessante. Em 2017, um grupo de cientistas apresentou uma abordagem incomum para coletar dados de ruas, estradas, pedestres e outros ambientes nos quais os carros autônomos deveriam estar localizados para o treinamento.
Eles sugeriram pegar essas informações do GTA V.

Para isso, no ambiente virtual do Grand Theft Auto V, foram geradas mais de 480.000 imagens virtuais marcadas de direção normal em rodovias. Usando essas imagens, o sistema foi treinado para ler todas as variáveis básicas necessárias para a condução autônoma básica: determinar a distância dos carros e outros objetos à frente, a marcação da faixa e o ângulo de condução (percurso angular em relação à linha central da faixa). O acidente fatal de Tesla na Flórida também foi analisado.
O futuro é NST e GAN
É possível falar sobre isso com confiança? Talvez sim. A transferência de estilo neural usa o Prisma. Por analogia, novas aplicações estão sendo criadas, e não apenas para fins de entretenimento. Os GANs também podem ser usados como uma ferramenta para solucionar uma ampla variedade de problemas: coloração de imagem, geração de imagem a partir do ruído e até geração de imagem a partir de texto.
Voltando ao tema de gamedev. Aqui, as possibilidades de adaptação do domínio são potencialmente infinitas: se em um caso de treinamento de veículos não tripulados, as texturas do mundo do jogo GTA V foram tiradas, das quais algo muito semelhante às fotos do mundo real saiu, então absolutamente nada o impede de fazer o oposto: gerar texturas de jogos a partir de imagens panorâmicas de cidades reais .
A vantagem do carro é que ele não se cansa. Um computador agora pode gerar um grande número de visualizações diferentes em uma fração de segundo. Nossa tarefa é aprender a fazê-lo de maneira eficiente e eficiente, e resta apenas separar o joio do grão e aproveitar.
Ainda tem dúvidas? Teremos o maior prazer em respondê-las nos comentários.