Durante a apresentação na Google I/O 2019, a Google anunciou o TensorFlow Graphics, uma biblioteca para criação de redes profundas neurais para realizar o aprendizado não supervisionado em visão computacional. A biblioteca contém funções de renderização 3D escritas em TensorFlow, além de ferramentas para aprendizado com dados de entrada não-retangulares baseados em malha.
Modelos de deep learning para visão computacional têm feito grandes progressos em tarefas como reconhecimento de objetos e localização, e essa é uma tecnologia chave para muitos domínios, incluindo veículos autônomos. No entanto, esses modelos dependem da existência de grandes conjuntos de dados de imagens rotuladas; isto é, imagens onde um humano identificou e localizou objetos nas imagens de origem. Para esses conjuntos de dados contendo milhões de imagens, e este é um processo no mínimo trabalhoso e intensivo. Além disso, para algumas tarefas de visão, a mera presença ou ausência de um objeto em uma imagem não é suficiente; muitas vezes, detectar a posição e a orientação, ou mesmo o posicionamento de um objeto ou pessoa.
Uma solução para esse problema é uma técnica de aprendizado não supervisionado chamado "análise por síntese". Essa técnica é semelhante a um autoencoder, o objetivo é que a rede neural aprenda simultaneamente um codificador que converta uma entrada em uma representação intermediária e um decodificador que converte essa representação intermediária em uma saída que, idealmente, é a exatamente a mesma que a entrada. É claro que não será exato até que o modelo seja treinado e a diferença entre entrada e saída, ou perda, seja usada pelo algoritmo de treinamento chamado backpropagation para ajustar os parâmetros da rede. Uma vez que todo o sistema é treinado, o codificador pode ser usado sozinho como um sistema de visão computacional.
Se o codificador aprende uma representação de uma imagem que consiste em um conjunto de objetos e suas localizações e orientações em 3D, existem muitas bibliotecas de gráficos 3D, como o OpenGL, que podem renderizar essa representação novamente em uma imagem de alta qualidade. Encadear o codificador de visão de computador com o decodificador de renderização de gráficos 3D oferece uma oportunidade para aprendizado não supervisionado para visão computacional usando conjuntos de dados não rotulados
Fonte: https://github.com/tensorflow/graphics
O problema é que não é possível simplesmente incluir qualquer biblioteca de gráficos 3D. A chave para o treinamento de uma rede neural é a retropropagação, e isso requer que cada camada na rede suporte a diferenciação automática.
A boa notícia é que a renderização de gráficos 3D é baseada nas mesmas operações de álgebra linear que o TensorFlow foi escrito para otimizar - afinal de contas, esse é o motivo pelo qual o deep learning obtém tanto impulso de unidades de processamento gráfico ou GPUs. A biblioteca TensorFlow Graphics fornece várias funções de renderização implementadas usando o código de álgebra linear do TensorFlow, tornando-as diferenciáveis "gratuitamente". Essas funções incluem:
- Transformações que definem rotação e tradução de objetos em sua posição 3D original;
- Modelos de materiais que definem como a luz interage com objetos para mudar sua aparência;
- Modelos de câmeras que definem projeções de objetos no plano da imagem.
Além das funções de renderização de gráficos para o decodificador, a biblioteca também inclui novas ferramentas para a seção do codificador. Nem todas as tarefas de reconhecimento operam em grades retangulares de imagens; muitos sensores 3D, como os LIDARs, fornecem dados como uma "pontos de nuvem" ou malha de pontos conectados. Isso é um desafio para arquiteturas comuns de rede neural da visão computacional, como redes neurais convolucionais (CNNs), que esperam que os dados de entrada sejam um mapa de uma grade retangular de pontos. O TensorFlow Graphics oferece novas camadas convolucionais para entradas de malha. Para ajudar os desenvolvedores na depuração de seus modelos, há também um novo plugin TensorBoard para visualizar pontos de nuvens e malhas.
Os comentaristas da Hacker News reagiram positivamente:
Agradável!
Eu joguei com o OpenDR (http://files.is.tue.mpg.de/black/papers/OpenDR.pdf) alguns anos atrás, e foi muito animador. Mas, Infelizmente, ele usa uma implementação personalizada de autodiff que dificulta a integração com outras bibliotecas de deep learning. O Pytorch ainda parece estar atrasado nesta área, mas há alguns repositórios interessantes no github (por exemplo, https://github.com/daniilidis-group/neural_renderer).
Dimitri Diakopoulos, pesquisador da Oculus, disse no Twitter:
This codebase is a perfect compliment [sic] to Tzu-Mao Li's recently published PhD thesis on Differentiable Visual Computing. His work brings the reader through the foundations of differentiable rendering theory through recent state-of-the-art. https://arxiv.org/abs/1904.12228
Esta base de código é um complemento perfeito [sic] para a tese de doutorado recentemente publicada por Tzu-Mao Li sobre a Computação Visual Diferenciada. Seu trabalho é levar ao leitor através dos fundamentos da teoria do estado-da-arte uma renderização diferenciável. https://arxiv.org/abs/1904.12228
O TensorFlow Graphics está disponível no GitHub.