Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Animação Facial em Tempo Real para Avatares

A expressão facial é um passo crítico na marcha da Roblox para tornar o metaverso parte da vida diária das pessoas por meio de interações de avatar naturais e críveis. No entanto, animar rostos virtuais de personagens 3D em tempo real é um enorme desafio técnico. Apesar dos inúmeros avanços na pesquisa, há exemplos comerciais limitados de aplicativos de animação facial em tempo real. Isso é particularmente desafiador na Roblox, onde oferecemos suporte a uma variedade estonteante de dispositivos de usuário, condições do mundo real e casos de uso extremamente criativos de nossos desenvolvedores.

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Neste post, descreveremos uma estrutura de aprendizado profundo para regredir controles de animação facial de vídeo que abordam esses desafios e nos abrem para várias oportunidades futuras. A estrutura descrita neste post do blog também foi apresentada como um conversa at SIGGRAPH 2021.

Animação Facial

Existem várias opções para controlar e animar um equipamento de face 3D. O que usamos é chamado de Sistema de Codificação de Ação Facial ou FACS, que define um conjunto de controles (com base no posicionamento do músculo facial) para deformar a malha facial 3D. Apesar de ter mais de 40 anos, o FACS ainda é o padrão de fato devido aos controles FACS serem intuitivos e facilmente transferíveis entre plataformas. Um exemplo de uma sonda FACS sendo exercida pode ser visto abaixo.

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Forma

A ideia é que nosso método baseado em aprendizado profundo receba um vídeo como entrada e produza um conjunto de FACS para cada quadro. Para conseguir isso, usamos uma arquitetura de dois estágios: detecção de face e regressão FACS.

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Detecção de rosto

Para obter o melhor desempenho, implementamos uma variante rápida do relativamente conhecido algoritmo de detecção de rosto MTCNN. O algoritmo MTCNN original é bastante preciso e rápido, mas não rápido o suficiente para oferecer suporte à detecção de rosto em tempo real em muitos dos dispositivos usados ​​por nossos usuários. Assim, para resolver isso, ajustamos o algoritmo para nosso caso de uso específico, onde uma vez que um rosto é detectado, nossa implementação MTCNN executa apenas o estágio final da O-Net nos quadros sucessivos, resultando em uma velocidade média de 10x. Também usamos os pontos de referência faciais (localização dos olhos, nariz e cantos da boca) previstos pelo MTCNN para alinhar a caixa delimitadora da face antes do estágio de regressão subsequente. Este alinhamento permite um corte apertado das imagens de entrada, reduzindo o cálculo da rede de regressão FACS.

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Regressão FACS 

Nossa arquitetura de regressão FACS usa uma configuração multitarefa que treina pontos de referência e pesos FACS usando um backbone compartilhado (conhecido como codificador) como extrator de recursos.

Essa configuração nos permite aumentar os pesos FACS aprendidos de sequências de animação sintéticas com imagens reais que capturam as sutilezas da expressão facial. A sub-rede de regressão FACS que é treinada juntamente com os usos do regressor de pontos de referência circunvoluções causais; essas convoluções operam em recursos ao longo do tempo, em oposição a convoluções que operam apenas em recursos espaciais, como pode ser encontrado no codificador. Isso permite que o modelo aprenda aspectos temporais de animações faciais e o torna menos sensível a inconsistências, como jitter.

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Training

Inicialmente treinamos o modelo apenas para regressão de pontos de referência usando imagens reais e sintéticas. Após um certo número de etapas, começamos a adicionar sequências sintéticas para aprender os pesos para a sub-rede de regressão FACS temporal. As sequências de animação sintética foram criadas por nossa equipe interdisciplinar de artistas e engenheiros. Um rig normalizado usado para todas as diferentes identidades (face mesh) foi criado pelo nosso artista que foi exercitado e renderizado automaticamente usando arquivos de animação contendo pesos FACS. Esses arquivos de animação foram gerados usando algoritmos clássicos de visão computacional executados em sequências de vídeo de calistenia facial e complementados com sequências animadas à mão para expressões faciais extremas que estavam faltando nos vídeos calistênicos. 

Perdas

Para treinar nossa rede de aprendizado profundo, combinamos linearmente vários termos de perda diferentes para regredir marcos e pesos FACS: 

  • Perdas Posicionais. Para pontos de referência, o RMSE das posições regredidas (Lok ), e para pesos FACS, o MSE (LFaculdade ). 
  • Perdas Temporais. Para pesos FACS, reduzimos o jitter usando perdas temporais sobre sequências de animação sintéticas. Uma perda de velocidade (Lv ) inspirado por [Cudeiro et ai. 2019] é o MSE entre as velocidades alvo e prevista. Incentiva a suavidade geral de expressões dinâmicas. Além disso, um termo de regularização na aceleração (Lacc ) é adicionado para reduzir o jitter dos pesos FACS (seu peso mantido baixo para preservar a capacidade de resposta). 
  • Perda de consistência. Utilizamos imagens reais sem anotações em uma perda de consistência não supervisionada (Lc ), igual a [Honari et ai. 2018]. Isso incentiva as previsões de pontos de referência a serem equivalentes em diferentes transformações de imagem, melhorando a consistência da localização de pontos de referência entre os quadros sem exigir rótulos de pontos de referência para um subconjunto das imagens de treinamento.

Performance

Para melhorar o desempenho do codificador sem reduzir a precisão ou aumentar o jitter, usamos convoluções não preenchidas seletivamente para diminuir o tamanho do mapa de recursos. Isso nos deu mais controle sobre os tamanhos do mapa de recursos do que as convoluções em passos largos. Para manter o resíduo, fatiamos o mapa de recursos antes de adicioná-lo à saída de uma convolução não preenchida. Além disso, definimos a profundidade dos mapas de recursos para um múltiplo de 8, para uso eficiente da memória com conjuntos de instruções vetoriais, como AVX e Neon FP16, resultando em um aumento de desempenho de 1.5x.

Nosso modelo final tem 1.1 milhão de parâmetros e requer 28.1 milhões de acumulações múltiplas para ser executado. Para referência, baunilha Rede Móvel V2 (na qual nossa arquitetura é baseada) requer 300 milhões de acumulações múltiplas para executar. Nós usamos o NCNN estrutura para inferência de modelo no dispositivo e o tempo de execução de encadeamento único (incluindo detecção de rosto) para um quadro de vídeo estão listados na tabela abaixo. Observe que um tempo de execução de 16ms suportaria o processamento de 60 quadros por segundo (FPS). 

Animação facial em tempo real para avatares PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Qual é o próximo

Nosso pipeline de dados sintéticos nos permitiu melhorar iterativamente a expressividade e a robustez do modelo treinado. Adicionamos sequências sintéticas para melhorar a capacidade de resposta a expressões perdidas e também treinamento equilibrado em várias identidades faciais. Alcançamos animação de alta qualidade com computação mínima devido à formulação temporal de nossa arquitetura e perdas, um backbone cuidadosamente otimizado e a verdade sem erros dos dados sintéticos. A filtragem temporal realizada na sub-rede de pesos FACS permite reduzir o número e o tamanho das camadas no backbone sem aumentar o jitter. A perda de consistência não supervisionada nos permite treinar com um grande conjunto de dados reais, melhorando a generalização e robustez do nosso modelo. Continuamos trabalhando para refinar e aprimorar ainda mais nossos modelos, para obter resultados ainda mais expressivos, sem jitter e robustos. 

Se você estiver interessado em trabalhar em desafios semelhantes na vanguarda do rastreamento facial em tempo real e aprendizado de máquina, confira alguns de nossos posições abertas com nossa equipe.

O posto Animação Facial em Tempo Real para Avatares apareceu pela primeira vez em Blog do Roblox.

Carimbo de hora:

Mais de Roblox