De 30 de novembro a 2 de dezembro, o hackathon PicsArt AI foi realizado em Moscou com um fundo de prêmios de US $ 100.000. A principal tarefa era criar uma solução de IA para processar fotos ou vídeos, que pode ser usada no aplicativo PicsArt. Um colega de trabalho (na época) Arthur Kuzin ofereceu-se para participar, tendo me interessado na idéia de anonimizar fotos pessoais de usuários com detalhes preservados (expressões faciais, etc.). Arthur também telefonou para Ilya Kibardin - uma estudante do Instituto de Física e Tecnologia de Moscou (outra pessoa teve que escrever código). O nome nasceu muito rapidamente: DeepAnon.
Esta será uma história sobre nossa decisão, sua degradação desenvolvimento, hackathon e como não você tem que se adaptar ao júri.
Para hackathon
Havia três maneiras de chegar ao hackathon. O primeiro é entrar no ranking das 50 melhores na tarefa de segmentação de faces - “gênio da ciência de dados”. O segundo é reunir-se imediatamente em um grupo de até 4 pessoas e mostrar um MVP em funcionamento - "equipe animada". Na última versão, era necessário simplesmente enviar uma descrição de sua brilhante idéia. Decidimos não perder tempo e imediatamente, uma semana antes do hackathon, fazer MVP. Bem, em geral, decidimos que eles eram legais, então todos Tima entraram no top 10 da tabela de líderes e, consequentemente, inzeman.

A idéia principal do nosso produto é a seguinte: as pessoas compartilham fotos sem pensar consigo mesmas (às vezes não totalmente legais) nas redes sociais, das quais podem se arrepender mais tarde ou pelas quais podem até ser punidas no futuro. Para se proteger, você pode censurar seu rosto com "quadrados" e encobrir o fundo. Mas então não apenas o rosto ficará oculto, mas também as emoções, e o fundo ficará corrompido. Para manter as emoções no rosto e nos objetos em segundo plano, nosso aplicativo altera todos os rostos da foto e torna o plano de fundo animado. E para que uma pessoa não possa ser reconhecida por roupas, ela é substituída por outra.

Em uma semana, conseguimos fazer quase tudo o que tínhamos planejado. Para cada estágio, uma rede neural separada foi usada (e algumas vezes até várias). No início, todos os rostos estavam na imagem e substituídos pelo mesmo rosto de celebridade - para isso, foi usada uma solução semelhante ao DeepFake. Então, com a ajuda da segmentação humana, o fundo foi separado e a transferência de estilo para o desenho animado (Rick e Morty) foi feita. Na última etapa, houve uma segmentação de diferentes partes da roupa e sua mudança - uma mudança aleatória de cores no espaço HSV, já que o júri não teve tempo para transferir o estilo antes da exibição do MVP.

Em cada etapa, surgiram dificuldades técnicas. Por exemplo, todas as implementações do DeepFake em um github foram capazes de transformar apenas uma determinada face X em uma face específica Y. Nesta formulação do problema, são necessárias muitas fotografias de duas pessoas. A maneira mais fácil de coletar esse conjunto de dados é encontrar um vídeo das performances de uma pessoa em que apenas ele é exibido na maioria das vezes e, usando a detecção de rosto, cortar uma foto. A ênfase principal em nossa ideia era precisamente que é possível fazer uma mesma face Y diferente de qualquer pessoa. Tentamos usar muitos tipos de faces do conjunto de dados CelebA em vez de uma pessoa X e, felizmente, ele começou. Abaixo está o esquema DeepFake retirado da implementação que usamos .
O resultado foi envolto em uma demonstração da web do frasco e executado para exibição. Aqui está a descrição do nosso centro de lucro para o júri.
Apresentando um serviço que permite anonimizar o conteúdo da mídia (fotos e vídeos). Na versão básica, o serviço oculta faces. No avançado - altera os rostos dos usuários para os rostos de outras pessoas (DeepFake), muda de roupa e de fundo (segmentação + transferência de estilo). Como uso alternativo, o serviço pode servir para criar vídeos ou fotos divertidos e virais com as celebridades substituídas.
Ainda faltavam alguns dias para o início do hackathon, e conseguimos melhorar a troca de roupas. Se antes disso havia uma mudança de cor no HSV, agora agora para cada tipo de roupa um estilo diferente foi aplicado (por vários artistas). Outra ideia surgiu: seria melhor fazer uma mudança de rosto não em uma celebridade, mas primeiro classificá-la por sexo, e depois transferir os rostos de homens e mulheres de maneira diferente (por exemplo, em Navalny e Sobchak). E, no último momento, eles conseguiram adicionar vários níveis de anonimização à demonstração na web - tornou-se possível escolher quais elementos de anonimização usar.
Fomos para a parte off-line com a atitude de que este é um caso de usuário útil e incomum, e não apenas máscaras faciais virais. Uma das mensagens em nossa equipe bate-papo:
Sim, se você pensar bem, todo mundo precisa. Eles ainda não perceberam: muitas pessoas remexem em seu conteúdo enquanto batem, bebem, violam a lei e pensam que o Estado não se importa com elas.
E após 5 anos, a IA chegará, observe as postagens antigas e, após o fato, o termo será soldado.
No hackathon
A parte offline começou na sexta-feira. Cada equipe recebeu uma mesa separada e o buffet foi interminável carboidratos rápidos cookies. Após a abertura oficial, decidimos não perder tempo e imediatamente descobrimos no júri o que eles querem dos participantes. Tendo conversado informalmente com vários organizadores, sentimos que o anonimato deles não os pegou. Mas gostei da ideia com a segmentação de partes individuais da foto e sua mudança. Também ficou claro que eles querem algo de nós que possa ser implementado no PicsArt. No entanto, à noite, nossa equipe enviou uma descrição do projeto, que falava em anonimização, mas com ênfase na segmentação e edição de partes individuais da foto.
Descrição do projeto para o júri na sexta-feira à noite:
Oferecemos um serviço que permite processar fotos de forma simples e automática para anonimizá-las. Ao segmentar roupas, acessórios, cabelos na cabeça e elementos de fundo, o serviço permite processar cada objeto de forma independente, sem a necessidade de seleção manual. O serviço também permite alterar faces, mantendo expressões faciais e expressões.
De acordo com o formato hackathon, as equipes que se mostraram bem em comissões técnicas poderão se defender. As comissões tiveram comunicação ao vivo com o júri e a equipe técnica do PicsArt, além de uma demonstração demonstrando seu trabalho.
Na primeira comissão do sábado, não conseguimos vender o anonimato ao júri, mas vimos que eles gostaram da ideia de editar objetos individuais na foto. Além disso, o júri aceitou com entusiasmo a ideia de um penteado removível clicando no cabelo (verificou-se que eles agora estão tentando fazer algo semelhante).
Nossa equipe não resistiu a essa pressão (infelizmente) e concordou em mudar a visão do produto. Foi decidido se concentrar em uma troca de roupas de qualidade.
Na demonstração na tela principal, foi planejado mostrar várias opções para a foto original (idealmente, as roupas mudam com um toque na tela):
Casacos:
- deixe como está
- calça jeans
- leopardo
Calças:
- deixe como está
- calça jeans
- leopardo
Sapatos:
- deixe como está
- sapatos engraçados
Na versão básica com cabelo, foi decidido fazer a transformação “careca - não careca”. Para isso, Careca e todo o resto foram selecionados no conjunto de dados de celebridades da CelebA. Nesses dois grupos, o CycleGAN foi definido para estudar, o que pode transformar imagens do domínio A em domínio B e vice-versa (outro exemplo pode ser transformar um cavalo em uma zebra).
Conseguimos conhecer um dos desenvolvedores do PicsArt e aprender um pouco sobre sua cozinha interna. Ele realmente não acreditava no sucesso de nosso experimento com o cabelo, mas criou elos em que direção olhar. Para nossa decepção, o neurônio realmente não aprendeu como adicionar ou reduzir o cabelo. Mas ela aprendeu a mudar o tom da pele (adivinhe o porquê).
A visão do produto mudou após cada comunicação com essas comissões. Os planos incluíam melhorar o céu e mudar os estilos de objetos individuais (inicialmente apenas roupas): edifícios, carros e acessórios em público. O foco passou da anonimização cada vez mais. Para a apresentação final, decidimos aderir à seguinte estrutura de 4 slides:
- Segmentação de roupas. Foto: foto original, roupas segmentadas, 4 opções para o processamento de roupas.
- Segmentação da cena. Uma foto escura com um céu superexposto. O céu é feito artístico, os edifícios são caricaturados.
- Troca de rosto e mudança de cabelo. Então o que começará.
- Todos juntos. Um slide que mostra que isso é feito em três cliques.
Mas aconteceu que a apresentação não era necessária. No sábado à noite, todos disseram que a defesa deveria ter uma performance de 3 minutos sem apresentação. Da cena, você precisará mostrar sua demonstração em tempo real. Os organizadores querem ver tecnologias de trabalho, não belas apresentações, e isso é legal. Comparando com outros hackathons, onde equipes com demos quebradas venceram, gostamos desse conceito. O único problema era que, naquela época, nosso conjunto de modelos era lançado individualmente e por muito tempo. Para mostrar o palco, era necessária otimização.
Durante o desenvolvimento, os mentores da comissão técnica andaram pelo salão e analisaram o progresso. Após outra conversa com um dos mentores, recebemos um feedback de que seria melhor focarmos uma coisa, na opinião dele, em trocar de roupa. O PicsArt quer que o resultado seja realista e apresentável aos usuários. De fato, diferentes mentores e membros do júri tinham pontos de vista diferentes sobre o que seria um projeto ideal para eles.
Várias mensagens da equipe conversam naquele momentoOu eles têm um efeito viral no site hackathon, então são um editor sério
Ble, não um hackathon, mas um sólido: "aqui está uma nova infa, refaça tudo o que temos"
Depois que a mudança de cabelo não foi concluída pelo CycleGAN, decidimos tentar uma abordagem diferente. Primeiro segmente o cabelo e depois aplique tinta nele. A tarefa de pintura é restaurar a parte oculta da imagem do contexto circundante. De acordo com nosso plano, escondemos o cabelo e a rede neural tentará restaurá-lo. Mas como a rede não viu que tipo de cabelo essa pessoa tem, ela restaurará outro penteado. O problema é que mesmo os modelos treinados no rosto das pessoas não foram capazes de restaurar o cabelo normalmente (se você pintar apenas parte do cabelo, funciona).
A principal dificuldade é uma enorme variedade de penteados. Havia uma idéia de treinar a pintura apenas em pessoas carecas, e então o modelo provavelmente aprenderia a mudar qualquer penteado por falta de cabelo. Tiramos a implementação da rede neural deste repositório .
Como a demonstração precisará ser mostrada em tempo real, tive que otimizar a velocidade do pipeline. O maior aumento de velocidade foi causado pela transferência de todas as redes neurais para a memória durante toda a duração do aplicativo. Havia algumas dificuldades: começar a fazer tudo no docker, mas a pontuação ao longo do caminho caiu várias vezes nas versões do tensorflow. Na verdade, é difícil não entrar nessa situação quando você tenta iniciar uma dúzia de repositórios a partir de um github por dia, cada um deles usando uma versão diferente do tensorflow, atualizando para a versão desejada em um lugar - você o divide em outro. O Docker pode ser um bom amigo nessa situação, mas em um hackathon você deseja gastar cada minuto testando novas hipóteses e não criando uma nova imagem. No entanto, sucumbindo a essa tentação, você corre o risco de gastar ainda mais tempo depurando o código e tentando descobrir qual versão da biblioteca em que lugar você precisa.
Dia final
No domingo de manhã, decidimos a visão final do produto (já é hora): trocar de roupa com a possibilidade de melhorar o céu. Eu queria restringir a tarefa o máximo possível, mas trocar de roupa parecia muito pequeno. É assim que o "design" do nosso aplicativo da Web se parece.
Inicialmente, eles queriam adicionar um design adaptável para facilitar a visualização do telefone. Mas o tempo estava acabando e nosso design se resumia a np.vstack (imgs_list).
Antes da apresentação final, eu queria trazer o recurso com roupas para um estado final. Foi adicionada uma mistura alfa de roupas e de fundo - transições nítidas desapareceram. Deixou apenas as texturas mais realistas - jeans e pele de crocodilo. Algumas horas antes do show, eu consegui iniciar a segmentação do céu e transferir o estilo para ele a partir deste repositório . Havia opções em transformar o céu em um apocalíptico, venenoso, caricatural. Mas o céu de inverno se tornou o tópico mais adequado do concurso - sua aplicação deu o efeito de um "melhorador" do céu.
Havia muito pouco tempo quando todos os componentes se conectaram em um único todo e ganharam. Baixamos muitas fotos das redes sociais e planejamos lançar um aplicativo nelas para selecionar os casos mais bem-sucedidos (rabisco). Mas nossa equipe foi a primeira, então tudo foi o mais honesto possível - eles mostraram demonstrações em fotos aleatórias.
Arthur, falando no palco, foi capaz de revelar nossa ideia, e Ilya demonstrou nosso MVP no projetor - as roupas mudaram em todas as fotos e o céu melhorou.
Nem todos os participantes foram capazes de lidar com a tarefa - mostrar apenas a demonstração. A tentação de adicionar alguns belos slides foi ótima. Das soluções que mais gostamos na defesa - transformar vídeos em quadrinhos, além de combinar duas fotos em uma.
Resultados
Como resultado, de acordo com as informações privilegiadas, nossa equipe ficou em 6º lugar a um passo da mani.
Após o fato, chegamos a uma opinião comum (bem, além do fato de que 3 das 5 principais equipes receberam o prêmio imerecidamente) de que era necessário ser persistente e concluir decisivamente a idéia inicial de anonimização. Mesmo agora, estamos convencidos de que é adequado e trará valor a vários usuários. Envolvidos em desenvolver idéias com anonimização durante todo o fim de semana, pelo menos nos divertíamos mais.
Se você nunca participou de hackathons, tente - um excelente teste para você e sua equipe, uma chance de realizar algo que você nunca teve tempo. E, é claro, certifique-se de fazer o que quiser, porque o caffe máximo do processo pode ser obtido apenas queimando no hardcore.
Status atual do projeto
Nossa equipe postou o código para a demonstração final no GitHub . E também há um repositório separado que faz anonimização . No futuro, há planos para desenvolver a versão inicial com anonimato: reescrever tudo no PyTorch, treinar fotos com maior resolução e menos ruído (foto com apenas uma face), além de aumentar o bot em telegrama.
Para aqueles que já querem experimentar a versão nascida no início do hackathon, um bot em telegrama é lançado no modo de demonstração ( @DbrainDeepAnon
-> /start
-> /unlock dbraindeepanon
). Funciona no servidor Dbrain (nosso agradecimento), no qual todo o treinamento de transferência de face ocorreu, portanto, tente até que seja desligado. O serviço usa o invólucro interno Dbrain - wrappa, que permite envolver facilmente o contêiner do docker e iniciar o bot de telegrama. Em breve o wrappa estará disponível em código aberto.
Gostaria de observar que nosso trabalho não foi em vão. Graças a DeepAnon, uma “pessoa anônima”, que estava muito preocupada com a privacidade de seus dados, finalmente conseguiu liderar um instagram sobre sua vida. Ele não tem mais medo de que as câmeras na cidade possam reconhecer seu rosto a partir de fotografias das redes sociais, no entanto, os amigos poderão reconhecê-lo. Os rostos de todas as pessoas em seu Instagram também são anonimizados.
Links para os repositórios que usamos:
https://github.com/shaoanlu/faceswap-GAN
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
https://github.com/sacmehta/ESPNet
https://github.com/JiahuiYu/generative_inpainting
https://github.com/NVIDIA/FastPhotoStyle
PS Além disso, para os fãs, tentei treinar novamente a rede para substituir as pessoas por um dos membros do ODS . Tente adivinhar quem. As redes deram o nome TestesteroNet.