Facebook的神经网络超采样黑科技详解

青亭网( ID:qingtinwang )--链接科技前沿,服务商业创新

本文来自: 图形学那些事

上周来自Facebook Reality Labs的研究团队发表了一套新的图像重建技术,达到了前所未有的16倍超采样,瞬间引起了大量围观和遐想。

自从NVidia发布RTX系列光追显卡后,AMD进入到一个相当尴尬的局面。不仅底层性能不能超越2080Ti,而且缺少大众所期待的光追功能,而开发者为了利用光追,更是不能使用A卡来开发,进一步加深AMD的劣势。最近NVidia发布的DLSS 2.0则把游戏显卡的深度学习应用真正提升到了一个高水平上,帧数和画质成倍提升,让4K都变得亲民起来,但该功能锁定在NV 2000系列显卡上,不得不说老黄够狠。虽然AMD也发布了FCAS来应对DLSS,但显然简单的锐化操作并无法和人工智能相提并论。导致A卡不香了。

微信图片_20200706120708

DLSS 2.0,画质不输原始图像,甚至对比度更加,而且帧数可以翻倍

在解析Facebook的paper以前,先还是先说下我们的竞争对手:

  • 1. 来自UE4的帧间插值超采样 TAAU (TSS)
  • 2. 老黄的卖点,NVidia的闭源框架DLSS

经过实测,TAAU的可用范围在1.5~2x, DLSS是2~4x。这两位的性能都非常不错,特别是DLSS2.0。它们都是经过实战的成熟技术,对于光追和4K帮助尤其巨大。

微信图片_20200706120712

TAAU实质是TAA的升级版,通过将TAA的帧间投射改成upscaling投射完成

对于DLSS,NVidia并未给出任何详细信息,这里不做讨论,只是大体上和Facebook的方法很像,但只能处理到2x2的超采样,是facebook神操作的1/4,硬件上要求使用张量核心(Tensor Core)。训练时需要用到超算(NV SC Cluster)。

微信图片_20200706120715

DLSS

而Facebook的方案,并且不局限于N卡,是研究团队针对VR变态的硬件要求推出的,旨在进一步降低高端游戏体验的硬件门槛。训练可使用单张图灵(NVidia Turning)框架的计算卡完成。其实现上很大程度上借鉴了两位对手的方法,但是效果要好上很多,以至于放大16倍的情况下也几乎很难和原图辨别出区别。以下是范例:

微信图片_20200706120717

微信图片_20200706120720

Facebook 提出的实时图形神经网络超采样(Neurual Supersampling for Realtime Rendering),要达到这种几年前还近乎科幻的效果,当然少不了机器学习的帮助

虽然这里图像被压缩得厉害,但放大观察依然能很容易看出输出画质分辨率巨大的提升。真是让人激动的黑科技!

那么下面我们就来看看facebook团队的整个操作。这项技术叫做 Neural Supersampling For Realtime Rendering。为了方便,下面简称为FNSS。

微信图片_20200706120722

它的整个运行时方案如图

FNSS 的运行时神经网络架构

这个图看起比较复杂,但其实并不难懂,我们一步一步拆开来:

首先,像素格式RGB转换到YCrCb颜色空间,AI图像领域常规操作,不做多解释。

不同于之前很多基于单帧图像或者单一视频的重建重建方案,要达到以假乱真的程度,必须要尽可能的利用游戏引擎渲染中的种种副产品,其中最重要的是深度图和运动向量图。这些冗余信息为重建提供了关键输入。

在特征提取(Feature Extracting)阶段,FNSS 使用了通常的卷积网络(CNN),针对颜色-深度RGBD信息输出12通道基础数据。

接下来FNSS做了最重要的一步,提前将特征图投射到高分辨率图像中,这也是参照TAAU的地方,目的是保留后面步骤帧间投射的亚像素信息,否则投射过程中会因为分辨率不足而丢失大量数据。FNSS里将这一步称之为“零点升采样“ (Zero Upsampling)。

微信图片_20200706120724

FNSS的零点升采样。简单来说就是在像素中间插入空值。这里为了作图方便,只画了2x2的升采样情况。结合上文不难发现,这一步其实是照搬TAAU的思路。
接下来就是传统的帧间投射了。这里就要用到运动向量。但是引擎中直接输出的运动向量本身有很多问题。主要问题有三:

  • A. 滞后一帧
  • B. 没有时间维度上的遮挡信息
  • C. 只有物理运动信息,而缺乏颜色变化向量

由此FNSS不能直接利用运动向量图,而是需要增加一步筛选步骤来确保后续AI运算的准确性,在筛选过程中,FNSS根据”第六感“来对投射可信度进行打分,感觉不错的得高分,感觉不太靠谱的像素得低分,这个第六感来自前置的学习阶段。Facebook将这一步称为”权重重排“(Reweighting)。为了最好的质量,FNSS总共用了5帧前置数据,每层的投射数据可以缓存,当然也可以减少前置帧来换取性能。遗憾的是这里更进一步的详细算法,Facebook没有在paper中提到。

滞后一帧带来的问题是,运动向量是反向的。

这是由于生成运动向量算法需要通过当前帧和前一帧进行比较而不是预测下一帧的运动向量。

微信图片_20200706120731

一般游戏引擎中的“伪”运动向量的生成方式

因此便会造成遮挡时信息的进一步丢失,和TAA一样,如果不做处理,FNSS会产生严重重影。

由于引擎渲染时出于性能考虑,运动向量通常放在像素着色器中完成,所以目前没有好的方法在引擎中直接避免。

遗憾的是这一步导致FNSS额外消耗了不少性能。

完成以上步骤以后,FNSS利用了现成的U-Net网络进行重建,这部分包含10层卷积网。其实看到这里时我也很好奇,10层16倍分辨率的Unet对于游戏来说应该会相当慢了,FNSS是怎么解决的?

对于训练阶段,Facebook预先录下了真人使用VR的头部运动数据,然后放到了若干个Unity场景中进行渲染,然后和16倍分辨率的目标图(每像素1152倍采样)进行比较训练。使用的衰减函数比较简单:

Loss = 1 - 相似度 + CNN残差平均值

由于运行时全程都用的卷积网络,所以无论A卡N卡都能完美运算。

接下来到了解答刚才疑问的时候了,Facebook列出了关键性能指标:

微信图片_20200706120736

 

微信图片_20200706120738

不出所料,这个数据很难看,这还是在NVidia Titan V上的结果。光是10层Unet重建(Reconstruction)这一项,大多数游戏都受不了。因此Facebook也是专门提供了Fast版 (上图中Ours-Fast),Fast版将中间每层Unet的输出数据砍掉了50%,但结果也只是换来6ms的提升,而且还是针对2K的画面。至于4K,估计FNSS需要花上惊人的80ms。因此Facebook这里也没列出4K的性能数字,只是和其它基于AI的重建技术做了比较。有赶鸭子上架之感。

结语

ezgif-4-23045e718e88

FNSS的效果非常惊艳,无论从放大倍数还是精确性上都高出DLSS一大截 (FNSS还原精度90~99%,DLSS 77~93%),但通用性不如TAAU和DLSS2.0。另外,遗憾的碍于运行时性能,该方法目前还无法用于实时的4K输出。因此目前该方法还只能停留在实验室,大家如果需要从分辨率着手提高帧数,最稳定实惠的方式依然是TAAU,DLSS 2.0或者VRS。至于AMD的FCAS技术,普适性要更差一些,但也有部分场景的适配性很好,根据arstechnica,似乎死亡搁浅里面FCAS的视觉感觉已经超越DLSS,所以这也是可以尝试的选项。

更多精彩内容,关注青亭网微信号(ID:qingtinwang),或者来微博@青亭网与我们互动!转载请注明版权和原文链接!
青亭网

微信扫码关注青亭网

青亭网

青亭 | 前沿科技交流群01

责任编辑:hi188
分享到QQ 分享到微信
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册