[TOG2019]Deferred Neural Rendering:Image Synthesis using Neural Textures

标题:Deferred neural rendering: Image synthesis using neural textures

链接:Deferred neural rendering: image synthesis using neural textures: ACM Transactions on Graphics: Vol 38, No 4

介绍

本文处理的问题是新视角合成,即给定一个物体的一组照片,要求生成全新视角的图片。大概思路是先通过给定的这组照片重建出一个3D模型,然后旋转通过旋转3D模型就可以得到新视角的图片了。而本文最大的亮点在于他假设重建的3D模型是并不完美的(这非常符合实际,因为事实上现如今的技术无法做到完美的3D重建),因此作者让网络将像素特征(区别于RGB)储存到了纹理图中,称之为神经纹理(neural texture)。这么做的目的是希望这个神经纹理可以在渲染阶段辅助渲染器补全由于不完美的3D模型造成的artifact。因此渲染器也就不能用图形学中的渲染器,而需要自行设计一个神经渲染器了,作者称之为延迟神经渲染器(deferred neural renderer)。这里“延迟”的意思就是将纹理颜色的生成延迟到了渲染步骤,渲染器需要通过神经纹理重新学习出最终的颜色。

相关工作

关于新视角合成,前人已经有了很多的尝试,但均存在一些问题:

1. 通过RGBD扫描结果重建出场景3D模型,然后通过转动3D模型生成新视角。这一方案的好处是可以直接使用图形学中的渲染器对模型进行高质量渲染,但由于重建出的3D模型本身就并不完美,因此必然也无法合成出高质量的新视角场景。

2.重建出粗糙的3D模型,并通过高质量的2D纹理来补全细节,本文的模型就属于这一类。这一方案中3D模型并不直接参与渲染,而是用于辅助纹理的选择。这一方案的优势是避免了大量常见的artifact,但缺点是会出现一些特殊的artifact,如鬼影和遮挡边界上的一些问题。本文模型的优势在于学习出的神经纹理比起前人的方法更为灵活。

3.通过记录光场来渲染出新视角的场景,这和本文的思路非常相似。所谓记录光场就是在拍摄的时候每个像素不再是只记录一组RGB值,而是会分别记录从各个方向上达到这个像素的RGB值,这样就可以在后期渲染过程中通过选定每个方向上对应的RGB值来得到不同视角的结果了。这一方案的最大问题在于储存量,因为每多记录一个方向的RGB就要多一倍的存储量。因此有人提出使用神经网络来学习并合成多个视角的RGB值从而并减少存储量的要求。

但除此以外还有一个问题,就是他要求有精细的3D模型,否则就会出现严重的artifact。而本文与之类似的地方在于文中提出的神经纹理本质上也是记录更多像素的属性,从而保证表达能力。但本文的神经纹理却并不是用来合成多个视角的RGB值,而是直接输入渲染器,因此渲染器可以通过每个像素的周围区域综合考虑如何渲染, 从而达到更好的效果。

4.使用神经网络直接进行视角合成(文章中单独描述了图片合成和视角合成,但我把这两个合在一起说了)。这一想法最为简单粗暴,就是利用conditional GAN,给定条件,要求直接输出对应条件的图形。例如输入一张图片和我想要的视角,就要求模型直接生成对应视角的同一张图片。这一类模型往往在单张图片上的表现还算不错,但是往往并不能保证视角之间的一致性,这主要是因为网络本质上是2维的,而他要学习的信息却是3维的。同时也有工作通过特征解耦试图解耦出图像中的位姿,光照等信息,但大都只适用于静态场景,而难以用于动态场景。

模型结构

[TOG2019]Deferred Neural Rendering:Image Synthesis using Neural Textures_第1张图片

本文提出的模型中最重要的就是神经纹理和延迟神经渲染器。

神经纹理

其中神经纹理本质上就是基于每个texel的一个16维的特征向量,是通过学习学到的。其中1-3维作者通过loss约束使之成为RGB特征,其他维度就由模型自由发挥。神经纹理部分作者主要解决了两个问题,一个是纹理的采样率,另一个是纹理的插值。

这两个问题在图形学中也是存在的,比如采样率问题,就是说当我们离某个场景特别远的时候,纹理就会变得特别小,这时候可能最终成像的一个像素中包含了好几个texel,进而会导致摩尔纹之类的效果,反之也同理。因此作者学习mipmap的方法,预先计算出多个不同分辨率的纹理贴图,让网络自行选择如何取用。

而纹理插值是因为我们的纹理图毕竟不可能无限分辨率,而对于那些在两个texel之间的点如何选取纹理,这里作者就直接通过双线性插值来对他的神经纹理进行插值了,和普通的纹理并没有区别。

延迟渲染器

这里的延迟渲染器是基于光栅化的渲染器,使用的网络是U-Net。在训练前,需要先计算出网格和纹理之间的对应关系,即UVmap。训练时输入粗糙网格和对应的神经纹理,从而生成对应视角的图像。另外,为了改变视角,作者通过将球谐光照中前三个频率乘上第4-13维的特征来输入视角信息。

损失函数

本文作者只使用了一个损失函数,就是基于像素的l1损失。

你可能感兴趣的:(神经渲染,论文阅读,计算机视觉)