1. Introdução ao NeRF e Síntese de Vistas [1]

NeRF (Neural Radiance Fields) é uma técnica que permite sintetizar novas vistas de objetos a partir de um conjunto limitado de imagens, superando as limitações dos métodos tradicionais.

1.1. O Desafio da Síntese de Vistas [1]

  1. A tarefa de gerar uma imagem de um objeto a partir de qualquer direção, usando apenas algumas fotos de entrada, é complexa [2].
    1. Detalhes intrincados, como as especularidades na água ao redor de um navio ou a estrutura de um microfone em uma bateria, só aparecem de ângulos específicos, tornando a tarefa não trivial [5].
    2. Esses detalhes intrincados são importantes não apenas para dados de brinquedo, mas também para cenas do mundo real [8].
  2. O objetivo final é inserir algumas fotos e ser capaz de sintetizar qualquer tipo de vista [11].

1.2. NeRF: Campos de Radiância Neural para Síntese de Vistas [12]

  1. O artigo introduz o NeRF, que significa Neural Radiance Fields, para síntese de vistas [14].
    1. O NeRF foi desenvolvido por Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi e Ren Ng [15].
  2. A técnica de síntese de vistas do NeRF leva em consideração a direção de visualização, o que proporciona uma impressão muito mais realista [19].
    1. Por exemplo, uma cena pode parecer diferente dependendo da direção de visualização, e o NeRF pode capturar essas variações [23].
  3. O sistema NeRF gera automaticamente mapas de profundidade, que são difíceis de obter para cenas complexas [26].
    1. Isso permite aplicações como realidade aumentada, pois o sistema fornece informações sobre a distância de cada objeto [29].
    2. Também é possível obter malhas 3D e preencher voxels, o que é uma tarefa ligeiramente diferente da síntese de vistas [31].
    3. Com imagens de todos os lados, o NeRF pode sintetizar qualquer vista intermediária [34].

1.3. Abordagem Inovadora do NeRF [36]

  1. O NeRF utiliza o deep learning de uma maneira diferente da convencional, otimizando uma função de cena volumétrica contínua subjacente [36].
    1. A tarefa é a síntese de vistas, ou seja, sintetizar novas vistas a partir de um conjunto esparso de vistas de entrada [39].
    2. Por exemplo, dadas cerca de 20 imagens de uma árvore tiradas de diferentes ângulos, o sistema deve ser capaz de gerar qualquer vista da árvore de qualquer lugar [41].
  2. A abordagem do NeRF envolve superajustar uma rede neural a um único ponto de dados, o que é diferente do deep learning clássico [52].
    1. Em vez de usar um grande conjunto de dados com muitas cenas, o NeRF usa uma rede neural para representar uma única cena [54].
    2. A rede neural é treinada para se superajustar completamente a essa cena específica usando as imagens de entrada (por exemplo, 30 imagens) [61].
    3. Os pesos da rede neural armazenam a cena inteira, o que oferece uma representação mais compacta e eficiente do que métodos como o armazenamento em voxels [65].

2. Funcionamento Interno do NeRF [68]

O NeRF utiliza uma rede neural que recebe uma posição 3D e uma direção de visualização 2D como entrada, e produz uma cor e uma densidade volumétrica como saída, permitindo a renderização de imagens através da integração de raios.

2.1. Entradas e Saídas da Rede Neural [68]

  1. A rede neural do NeRF recebe duas entradas principais [69]:
    1. Uma posição no sistema de coordenadas (x, y, z), que é um vetor tridimensional [70].
    2. Uma direção de visualização (d), que pode ser descrita por dois ângulos [72].
  2. As saídas da rede neural são [78]:
    1. Uma cor (C) para aquela localização específica [78].
    2. Uma densidade (σ), que indica se há algo naquela localização [79].
  3. Essa abordagem é uma maneira diferente de usar redes neurais, pois não há imagens de entrada e saída, mas sim posições e direções [80].

2.2. Geração de Imagens e Captura de Efeitos [82]

  1. Para gerar uma imagem, um raio é enviado através da cena para cada pixel [88].
    1. A rede neural é consultada em cada ponto ao longo do raio para determinar a densidade e a cor [89].
    2. A densidade indica a probabilidade de o raio atingir algo, e a cor é o que seria visto se algo fosse atingido [93].
    3. O pixel final é renderizado com a cor do primeiro objeto atingido pelo raio [99].
  2. A rede neural é poderosa o suficiente para produzir resultados diferentes para a mesma localização, dependendo da direção de visualização [102].
    1. Isso permite capturar efeitos de iluminação, reflexos e transparência [104].
    2. Por exemplo, se um raio passa por um objeto transparente, a integração ponderada pela densidade resultará em uma mistura de cores, permitindo a transparência [105].
  3. O modelo NeRF não requer um conjunto de dados além dos dados da cena que está sendo renderizada [110].
    1. No futuro, em vez de armazenar malhas ou grades de voxels para aplicações de realidade aumentada ou jogos, será possível armazenar uma rede neural que pode ser consultada para renderizar a cena de qualquer ângulo [111].

2.3. O Processo de Treinamento do NeRF [114]

  1. O processo começa com um conjunto de imagens de entrada, e a posição e direção da câmera para cada imagem devem ser determinadas [114].
    1. Métodos clássicos como Structure from Motion (SfM) ou SLAM podem ser usados para determinar as posições da câmera [116].
  2. A cena é representada como uma função contínua de 5D (3D para localização e 2D para direção de visualização) [119].
    1. Essa função é implementada por uma rede neural MLP (Multi-Layer Perceptron) [124].
    2. A rede neural é otimizada para mapear cada coordenada de entrada 5D para sua densidade volumétrica e cor direcional correspondentes [125].
  3. O treinamento da rede neural é feito através de um processo diferenciável [128].
    1. Para cada pixel de uma imagem de entrada, um raio é enviado e amostrado ao longo da cena [128].
    2. A rede neural prevê a cor e a densidade ao longo do raio, e essas previsões são usadas para renderizar uma imagem [129].
    3. Uma função de perda é calculada comparando a imagem renderizada com a imagem de entrada real [131].
    4. Como todo o processo é diferenciável, a rede neural pode ser treinada para minimizar essa perda, superajustando-se às imagens de entrada [133].
    5. Os pesos da rede neural, após o treinamento, representam a cena [140].

2.4. Engenharia e Renderização Volumétrica [142]

  1. Para garantir a consistência multi-vista, a rede é projetada para prever a densidade volumétrica apenas como uma função da localização (x), enquanto a cor RGB é uma função tanto da localização quanto da direção de visualização [142].
    1. A densidade volumétrica não depende da direção de visualização, pois a transparência de um objeto é geralmente a mesma de diferentes direções [143].
    2. A cor RGB, no entanto, depende da direção de visualização para capturar efeitos de material e iluminação [148].
    3. A arquitetura da rede neural separa essas funções: a localização (x) é processada para produzir a densidade e uma representação oculta, que é então concatenada com a direção de visualização para produzir a cor [150].
  2. A renderização no NeRF utiliza uma técnica chamada renderização volumétrica com campos de radiância [154].
    1. Um campo de radiância é uma função que descreve o que se vê de um determinado ponto em uma determinada direção [156].
    2. Para renderizar, um raio é enviado através da cena, e a cor final do pixel é obtida integrando a densidade e a cor ao longo do raio [158].
    3. A fórmula de renderização considera a probabilidade de o raio não atingir nada (transmissão) e a densidade e cor em cada ponto, permitindo lidar com transparência e oclusão [160].

3. Otimizações e Desempenho do NeRF [171]

O NeRF utiliza codificação posicional e amostragem volumétrica hierárquica para melhorar a capacidade da rede neural de representar detalhes finos e otimizar o processo de amostragem, resultando em alta qualidade visual e eficiência de armazenamento, embora o treinamento seja demorado.

3.1. Codificação Posicional [171]

  1. O NeRF emprega uma técnica de codificação posicional para mapear as coordenadas de entrada de baixa dimensão (posição 3D e direção de visualização 2D) para um espaço de maior dimensão [175].
    1. Isso permite que a rede neural capture tanto estruturas finas quanto grosseiras na cena [178].
    2. A codificação posicional constrói uma hierarquia de ondas senoidais (ou senoidais e cossenoidais) de diferentes frequências [183].
    3. Pequenas mudanças na entrada resultam em grandes mudanças nas características de alta frequência, permitindo que a rede se concentre em detalhes [193].
    4. Para estruturas grosseiras, a rede pode olhar para as escalas de baixa frequência, onde é preciso mover-se mais para ver uma mudança [195].
  2. Essa técnica é diferente da codificação posicional usada em Transformers, que serve para fornecer representações discretas para entradas de arquitetura [201].
    1. No NeRF, a codificação posicional mapeia coordenadas de entrada contínuas para um espaço de maior dimensão, permitindo que a rede neural aproxime funções de alta frequência mais facilmente [203].

3.2. Amostragem Volumétrica Hierárquica [205]

  1. Para otimizar o processo de amostragem ao longo dos raios, o NeRF utiliza duas redes neurais: uma rede grosseira e uma rede fina [205].
    1. A rede grosseira amostra em locais mais amplos [208].
    2. Com base nas densidades estimadas pela rede grosseira, a rede fina amostra mais intensamente nas áreas onde a densidade é alta, ou seja, onde há mais probabilidade de haver um objeto [209].
  2. Ambas as redes são otimizadas simultaneamente [210].
    1. A função de perda combina as perdas da rede grosseira e da rede fina [211].
    2. Embora a vista final seja gerada apenas pela rede fina, a rede grosseira é crucial para identificar as regiões importantes da cena [212].

3.3. Resultados e Limitações [213]

  1. O NeRF alcança resultados de alta qualidade, capturando estruturas finas, como as de um microfone, que outros métodos não conseguem [213].
  2. Uma rede neural para uma única cena ocupa apenas alguns megabytes (cerca de 5 MB), o que é significativamente menor do que as representações de grade de voxels (que podem usar mais de 15 GB para a mesma cena) [214].
    1. Isso é ainda mais eficiente em termos de memória do que as próprias imagens de entrada para uma única cena [216].
  3. A principal desvantagem do NeRF é o tempo de treinamento [222].
    1. A otimização para uma única cena geralmente leva de 100.000 a 300.000 iterações para convergir em uma única GPU NVIDIA V100, o que equivale a cerca de um a dois dias [224].
    2. No entanto, o treinamento só precisa ser feito uma vez, e depois novas vistas podem ser renderizadas rapidamente [227].
    3. A ideia é que, em aplicações como videogames, a rede neural treinada pode ser transmitida para os clientes, que então podem renderizar as vistas localmente [228].
  4. Estudos de ablação mostram a importância da codificação posicional e da dependência da vista [229].
    1. Sem codificação posicional, a qualidade da imagem é significativamente reduzida [229].
    2. Sem dependência da vista, a rede não consegue capturar efeitos de iluminação e reflexos, pois produz a mesma cor para todas as direções [231].