利用神经网络滤波图像数据

阅读:598发布:2024-01-26

专利汇可以提供利用神经网络滤波图像数据专利检索,专利查询,专利分析的服务。并且公开了用于执行 时空 滤波的方法、计算机可读介质和系统。该方法包括识别要 渲染 的图像数据,使用包括神经网络的 滤波器 重建图像数据以创建经重建的图像数据,所述神经网络具有一个或更多个跳跃连接和一个或更多个循环层,以及返回经重建的图像数据。,下面是利用神经网络滤波图像数据专利的具体信息内容。

1.一种用于执行时空滤波的方法,包括:
识别要渲染的图像数据;
使用包括神经网络的滤波器来重建所述图像数据以创建经重建的图像数据,所述神经网络具有一个或更多个跳跃连接和一个或更多个循环层;以及
返回所述经重建的图像数据。
2.根据权利要求1所述的方法,其中所述图像数据是作为预定处理的结果而创建的,所述预定处理包括以下中的一个或更多个:
低光摄影;
低光录像;
蒙特卡洛采样方法;
产生RGB和深度信息的摄影;和
深度相机
3.根据权利要求1所述的方法,其中所述图像数据具有低于预定阈值的多个每像素样本(spp)。
4.根据权利要求1所述的方法,其中所述图像数据包括辅助信息。
5.根据权利要求4所述的方法,其中所述辅助信息包括一个或更多个视图空间阴影法线。
6.根据权利要求4所述的方法,其中所述辅助信息包括一个或更多个深度值。
7.根据权利要求4所述的方法,其中所述辅助信息包括一个或更多个粗糙度值。
8.根据权利要求1所述的方法,其中所述神经网络包括多个卷积层。
9.根据权利要求1所述的方法,其中所述神经网络包括多个编码器层和相应的解码器层,并且所述神经网络内的第一跳跃连接使得重建过程能够从第一编码器层直接跳到相应的解码器层,从而跳过所述神经网络内的一个或更多个编码器层和解码器层。
10.根据权利要求1所述的方法,其中所述一个或更多个循环层包括循环卷积神经网络(RCNN)。
11.根据权利要求1所述的方法,其中在所述神经网络内所述一个或更多个循环层将层链接到其本身。
12.根据权利要求1所述的方法,还包括利用包括多个输入/输出对的数据集训练所述神经网络。
13.根据权利要求12所述的方法,其中在所述训练所述神经网络期间利用损失函数。
14.根据权利要求1所述的方法,其中在重建所述图像数据的序列的第一帧期间使用的信息被存储为隐藏循环状态,然后其在利用RCNN的反馈回路在RCNN内重建所述图像数据的帧序列的第二帧期间被访问
15.一种系统,包括:
处理器,被配置为:
识别要渲染的图像数据;
使用包括神经网络的滤波器来重建所述图像数据以创建经重建的图像数据,所述神经网络具有一个或更多个跳跃连接和一个或更多个循环层;以及
返回所述经重建的图像数据。
16.根据权利要求15所述的系统,其中所述图像数据是作为预定处理的结果而创建的,所述预定处理包括以下中的一个或更多个:
低光摄影;
低光录像;
蒙特卡洛采样方法;
产生RGB和深度信息的摄影;和
仅深度相机。
17.根据权利要求15所述的系统,其中所述图像数据具有低于预定阈值的多个每像素样本(spp)。
18.根据权利要求15所述的系统,其中所述图像数据包括辅助信息。
19.根据权利要求16所述的系统,其中所述辅助信息包括一个或更多个视图空间阴影法线。
20.一种用于执行时空滤波的方法,包括:
识别要渲染的图像数据,所述图像数据由蒙特卡洛采样方法产生;
对所述图像数据应用滤波器以创建经重建的图像数据,其中所述滤波器是神经网络;
以及
返回所述经重建的图像数据。

说明书全文

利用神经网络滤波图像数据

[0001] 要求优先权
[0002] 本申请要求2017年1月18日提交的名称为“利用循环自动编码器以及用于重建全局照明图像的时空方差引导滤波重建噪声蒙特卡洛图像序列(RECONSTRUCTION OF NOISY MONTE CARLO IMAGE SEQUENCES USING A RECURRENT AUTOENCODER AND SPATIOTEMPORAL VARIANCE-GUIDED FILTERING FOR RECONSTRUCTION OF GLOBAL ILLUMINATION IMAGES)”的美国临时申请No.62/447,859(代理人案卷号NVIDP1153+/17KI0010US01)的权益,其全部内容通过引用并入本文。

技术领域

[0003] 本发明涉及图像渲染,更具体地涉及在渲染过程期间对采样图像执行重建。

背景技术

[0004] 利用现有技术重建噪声图像数据已被证明是具有挑战性的。例如,用于执行噪声图像数据的重建的现有实现方式是耗时的,依赖于具有相对较高样本数的图像,并且不会产生时间上稳定的结果。现有的解决方案不提供时间高效的重构方法,其能够以小的样本数处理初始图像数据,并且产生时间上稳定的结果。
[0005] 因此,具有解决这些问题和/或与现有技术相关的其他问题的需求。

发明内容

[0006] 公开了用于执行时空滤波的方法、计算机可读介质和系统。该方法包括识别要渲染的图像数据,重建图像数据以创建经重建的图像数据,利用包括神经网络的滤波器,所述神经网络具有一个或更多个跳跃连接和一个或更多个循环层,以及返回经重建的图像数据。附图说明
[0007] 图1示出了根据一个实施例的使用神经网络来滤波图像数据的方法的流程图
[0008] 图2示出了根据一个实施例的并行处理单元;
[0009] 图3A示出了根据一个实施例的图2的并行处理单元的通用处理集群;
[0010] 图3B示出了根据一个实施例的图2的并行处理单元的分区单元;
[0011] 图4示出了根据一个实施例的图3A的流多处理器;
[0012] 图5示出了根据一个实施例的包括图2的并行处理单元的片上系统;
[0013] 图6是根据一个实施例的由图2的并行处理单元实现的图形处理管线的示意图;
[0014] 图7示出了示例性系统,其中可以实现所有实施例的各种架构和/或功能;
[0015] 图8示出了根据一个实施例的用于使用神经网络来重建图像数据的示例性方法的流程图;以及
[0016] 图9示出了根据一个实施例的循环RCNN连接的示例性内部结构。

具体实施方式

[0017] 图1示出了根据一个实施例的用于使用神经网络来滤波图像数据的方法100的流程图。如操作102所示,识别要渲染的图像数据。在一个实施例中,图像数据可以包括单个图像。在另一个实施例中,图像数据可以包括(例如,视频数据等的)多个图像中的一个。在又一个实施例中,图像数据可以作为预定处理的结果而被创建。例如,预定处理可以包括低光照摄影、低光照录影、蒙特卡洛(Monte Carlo)采样方法、摄影和/或视频创建中的一个或更多个,其使用仅深度相机(例如,产生噪声图像/视频的飞行时间相机)等生成RGB和深度信息、图像创建。在又一个实施例中,图像数据可以由一个或更多个自动成像设备(例如白天照相机、夜视照相机等)创建。
[0018] 另外,在一个实施例中,图像数据可以具有低于预定阈值的多个每像素样本(samples per pixel,spp)。例如,图像数据可能具有大于预定阈值的噪声平。在另一个实施例中,图像数据可以包括颜色数据(例如,RGB数据等)。在又一个实施例中,图像数据可以包括辅助信息。例如,辅助信息可以包括一个或更多个视图空间阴影法线(例如,2D矢量等)。在另一个示例中,辅助信息可以包括一个或更多个深度值。在又一个示例中,辅助信息可以包括一个或更多个粗糙度值。在又一个实施例中,渲染图像数据可以包括利用图像数据来生成可查看图像。
[0019] 此外,如操作104所示,利用包括神经网络的滤波器来重建图像数据以创建经重建的图像数据,所述神经网络具有一个或更多个跳跃连接(skip connection)和一个或更多个循环层(recurrent layer)。在一个实施例中,重建图像数据可以包括对图像数据进行去噪(例如,减少图像数据内的噪声等)以创建经重建的图像数据。在另一个实施例中,重建图像数据可以包括完成和/或校正图像数据以创建经重建的图像数据。例如,神经网络可以使用预定数量的自然图像来训练,并且可以将图像数据作为输入并完成和/或校正图像数据以创建经重建的图像数据,以像训练图像的部分那样在本地查看。
[0020] 在又一个实施例中,神经网络可以包括多个卷积层(例如,阶段等)。在又一个实施例中,神经网络可以包括自动编码器。例如,神经网络可以包括学习重建其输入的自动编码器。在另一个实施例中,辅助信息可以不变地通过自动编码器。
[0021] 此外,在一个实施例中,在重建期间,一个或更多个跳跃连接可以使能神经网络的一个或更多个层空缺。例如,神经网络可以包括多个编码器层和相应的解码器层。在另一个示例中,神经网络内的跳跃连接可以使得重建过程从编码器层直接跳转到相应的解码器层,从而跳过神经网络内的一个或更多个编码器层和解码器层。
[0022] 而且,在一个实施例中,一个或更多个循环层可以包括循环卷积神经网络(RCNN)。例如,可经由将先前状态的输出(例如,图像数据的较早的帧等)连接到当前状态的一个或更多个循环层来实现一个或更多个反馈回路。在另一示例中,这可以使得能够在输入图像数据之间(例如,图像数据的帧之间)保留信息(例如,辅助信息等)。
[0023] 例如,在重建图像数据的帧序列的第一帧期间使用的信息(例如,辅助信息、颜色信息、状态信息等)可以被存储为隐藏的循环状态。随后可以在利用RCNN的反馈回路在RCNN内重建图像数据的帧序列的第二帧期间访问该状态。
[0024] 另外,在一个实施例中,一个或更多个循环层可以在神经网络内将层链接到其本身。例如,这可以在神经网络内实现短期记忆(例如,通过允许神经网络保留图像帧之间的状态信息等)。在另一个示例中,这可以增加经重建的图像数据的时间稳定性/一致性(例如,通过减少诸如闪烁等时间性问题)。
[0025] 此外,在一个实施例中,可以利用包括多个输入/输出对的数据集来训练神经网络。例如,训练可以包括学习从噪声输入图像数据映射到无噪声输出图像数据。在另一个示例中,每个输入/输出对可以包括输入图像数据(例如,期望被转换的低质量图像数据(例如,具有低于预定阈值的多个每像素样本的噪声图像数据等)),以及预先渲染的输出数据(使用昂贵的渲染过程获得的高质量参考图像(例如,利用高于预定阈值的多个每像素样本等))。在又一示例中,训练可以包括对神经网络内的每一层加权,以便找到将输入/输出对的输入一致地映射到输入/输出对的输出的函数。
[0026] 此外,在一个实施例中,可以在训练神经网络期间使用损失函数。在一个实施例中,损失函数可以定义在训练期间如何计算实际神经网络输出和训练输出之间的误差。
[0027] 结果,经重建的图像数据可能具有比输入图像数据更少的噪声。
[0028] 此外,如操作106所示,返回经重建的图像数据。在一个实施例中,可以输出经重建的图像数据(例如,显示为可查看图像等)。在另一个实施例中,可以将经重建的图像数据传递给一个或更多个附加滤波器(例如,在渲染过程中等)。
[0029] 以这种方式,在渲染期间可以使用具有跳跃连接和循环层的自动编码器来重建图像数据。另外,蒙特卡洛采样数据可以使用神经网络重建。
[0030] 现在将按照用户的期望,阐述关于可以或不可以实现前述框架所采用的各种可选架构和特征的更多说明性信息。应该强调的是,下面的信息是为了说明的目的而提出的,不应被解释为以任何方式进行限制。任何以下特征可以可选地并入或不包括所描述的其他特征。
[0031] 并行处理架构
[0032] 图2示出了根据一个实施例的并行处理单元(PPU)200。在一个实施例中,PPU 200是在一个或更多个集成电路设备上实现的多线程处理器。PPU 200是设计为并行处理大量线程的延迟隐藏架构。线程(即,执行的线程)是被配置为要由PPU 200执行的指令集的实例。在一个实施例中,PPU 200是图形处理单元(GPU),其被配置为实现图形渲染管线,用于处理三维(3D)图形数据以生成用于在显示设备(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 200可以用于执行通用计算。虽然为了说明的目的在此提供了一个示例性的并行处理器,但是应该强调,这样的处理器仅仅是为了说明的目的而阐述的,并且可以采用任何处理器来补充和/或替代该处理器。
[0033] 如图2所示,PPU 200包括输入/输出(I/O)单元205、主机接口单元210、前端单元215、调度器单元220、工作分配单元225、集线器230、交叉开关(Xbar)270、一个或更多个通用处理集群(GPC)250以及一个或更多个分区单元280。PPU 200可以经由系统总线202连接到主机处理器或其他外围设备。PPU 200还可以连接到包括多个存储器设备204的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。
[0034] I/O单元205被配置为通过系统总线202从主机处理器(未示出)发送和接收通信(即,命令、数据等)。I/O单元205可以经由系统总线202或通过一个或更多个中间设备(诸如内存桥)与主机处理器直接通信。在一个实施例中,I/O单元205实现用于通过PCIe总线进行通信的高速外围组件互连(PCIe)接口。在替代实施例中,I/O单元205可以实现用于与外部设备进行通信的其他类型的公知接口。
[0035] I/O单元205耦合到主机接口单元210,其对经由系统总线202接收到的数据包进行解码。在一个实施例中,数据包表示被配置为使得PPU 200执行各种操作的命令。主机接口单元210按照命令指定的将解码命令发送到PPU 200的各种其他单元。例如,一些命令可以被发送到前端单元215。其他命令可以被发送到集线器230或PPU 200的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,主机接口单元210被配置为在PPU 200的两个或多个各种逻辑单元之间路由通信。
[0036] 在一个实施例中,由主机处理器执行的程序将缓冲区中的命令流进行编码,所述缓冲区向PPU 200提供工作负载用于处理。工作负载可以包括要由那些指令处理的许多指令和数据。缓冲区是主机处理器和PPU 200两者可访问(即,读/写)的存储器中的区域。例如,主机接口单元210可以被配置为经由由I/O单元205通过系统总线202发送的存储器请求来访问系统存储器中连接到系统总线202的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 200发送指向命令流开始的指针。主机接口单元210向前端单元215提供指向一个或更多个命令流的指针。前端单元215管理一个或更多个流,从流读取命令并将命令转发到PPU 200的各个单元。
[0037] 前端单元215耦合到调度器单元220,调度器单元220将各个GPC 250配置为处理由一个或更多个流定义的任务。调度器单元220被配置为追踪与由调度器单元220管理的各种任务相关联的状态信息。状态可以指示任务被分配给哪个GPC 250、任务是活动的还是非活动的、与任务相关联的优先级等级等等。调度器单元220管理在一个或更多个GPC 250上的多个任务的执行。
[0038] 调度器单元220耦合到工作分配单元225,该工作分配单元225被配置为分派任务以在GPC 250上执行。工作分配单元225可以追踪从调度器单元220接收到的多个调度任务。在一个实施例中,工作分配单元225管理用于每个GPC 250的挂起(pending)任务池和活动任务池。挂起任务池可以包括多个时隙(例如,32个时隙),其包含被分配为由特定GPC 250处理的任务。活动任务池可以包括用于由GPC 250正在主动处理的任务的多个时隙(例如,4个时隙)。当GPC 250完成任务的执行时,该任务从GPC 250的活动任务池中逐出,并且来自挂起任务池的其他任务中的一个被选择并且被调度为在GPC 250上执行。如果GPC 250上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 250中逐出并返回到挂起任务池,而选择挂起任务池中的另一任务并且调度为在GPC 250上执行。
[0039] 工作分配单元225经由XBar 270与一个或更多个GPC 250通信。XBar 270是将PPU 200的许多单元耦合到PPU 200的其他单元的互连网络。例如,XBar 270可被配置为将工作分配单元225耦合到特定GPC 250。尽管未明确示出,但PPU 200的一个或更多个其他单元耦合到主机单元210。其他单元还可经由集线器230连接到XBar 270。
[0040] 任务由调度器单元220管理并由工作分配单元225分派到GPC 250。GPC 250被配置为处理任务并产生结果。结果可以由GPC 250内的其他任务消耗,经由XBar 270路由到不同的GPC 250,或者存储在存储器204中。结果可以经由分区单元280写入存储器204,分区单元280实现存储器接口,用于从存储器204读取数据和向存储器204写入数据。在一个实施例中,PPU 200包括U个分区单元280,其等于耦合到PPU 200的单独且不同的存储器设备204的数量。分区单元280将在下面结合图3B更详细地描述。
[0041] 在一个实施例中,主机处理器执行驱动程序内核,其实现应用程序编程接口(API),使得在主机处理器上执行的一个或更多个应用程序能够调度操作以在PPU 200上执行。应用程序可以生成指令(即,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 200执行。驱动程序内核将任务输出到正在由PPU 200处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,在此称为束(warp)。线程可以指包括执行任务的指令的多个线程组。同一线程组中的线程可以通过共享存储器交换数据。在一个实施例中,一个线程组包括32个相关线程。
[0042] 图3A示出了根据一个实施例的图2的PPU 200的GPC 250。如图3A所示,每个GPC 250包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 250包括管线管理器
310、预光栅操作单元(PROP)315、光栅引擎325、工作分配交叉开关(WDX)380、存储器管理单元(MMU)390以及一个或更多个纹理处理集群(TPC)320。应当理解,图3A的GPC 250可以包括代替图3A中所示的单元或除了图3A中所示的单元之外的其他硬件单元。
[0043] 在一个实施例中,GPC 250的操作由管线管理器310控制。管线管理器310管理用于处理分配给GPC 250的任务的一个或更多个TPC 320的配置。在一个实施例中,管线管理器310可以将一个或更多个TPC 320中的至少一个配置为实现图形渲染管线的至少一部分。例如,TPC 320可以被配置为在可编程流多处理器(SM)340上执行顶点着色程序。管线管理器
310还可以被配置为将从工作分配单元225接收到的数据包路由到GPC 250中适当的逻辑单元。例如,一些数据包可以被路由到PROP 315和/或光栅引擎325中的固定功能硬件单元,而其他数据包可以被路由到TPC 320,以由基元(primitive)引擎335或SM 340处理。
[0044] PROP单元315被配置为将由光栅引擎325和TPC 320生成的数据路由到分区单元280中的光栅操作(ROP)单元,下面将更详细地描述。PROP单元315还可以被配置为执行用于颜色混合的优化、组织像素数据、执行地址转换等。
[0045] 光栅引擎325包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎325包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片合并(tile coalescing)引擎。设置引擎接收变换的顶点并生成与由顶点定义的几何基元相关联的平面方程。平面方程被传输到粗光栅引擎以生成基元的覆盖信息(例如,用于瓦片的x、y覆盖掩膜)。粗光栅引擎的输出可以被传输到剔除引擎,在此处与z-测试失败的基元相关联的片段(fragment)被剔除,并且被传输到裁剪引擎,在此处位于视锥体之外的片段被裁剪掉。可以将那些经过裁剪和剔除而存留下来的片段传递给精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎380的输出包括要例如由在TPC 320内实现的片段着色器处理的片段。
[0046] 包括在GPC 250中的每个TPC 320包括M管道控制器(MPC)330、及元引擎335、一个或更多个SM 340以及一个或更多个纹理单元345。MPC 330控制TPC 320的操作,将从管线管理器310接收的数据包路由到TPC 320中的适当单元。例如,与顶点相关联的数据包可被路由到基元引擎335,基元引擎335被配置为从存储器204获取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 340。
[0047] 在一个实施例中,纹理单元345被配置成从存储器204加载纹理贴图(例如,纹理像素的2D阵列),并对纹理贴图进行采样以产生采样纹理值,用于在由SM 340执行的着色程序中使用。纹理单元345实现纹理操作,例如使用mip贴图(即,不同细节层次的纹理贴图)的滤波操作。纹理单元345还被用作SM 340到MMU 390的加载/存储路径。在一个实施例中,每个TPC 320包括两个(2)纹理单元345。
[0048] SM 340包括被配置为处理由多个线程表示的任务的可编程流处理器。每个SM 340是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 340实现SIMD(单指令、多数据)架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 340实现SIMT(单指令、多线程)架构,其中线程组中的每个线程被配置为基于相同的指令集来处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许分化。换句话说,当针对该线程组的指令被分派用于执行时,该线程组中的一些线程可以是活动的,从而执行该指令,而该线程组中的其他线程可以是不活动的,从而执行无操作(NOP)而不是执行指令。下面结合图4更详细地描述SM 340。
[0049] MMU 390提供GPC 250和分区单元280之间的接口。MMU 390可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 390提供用于改善存储器204中虚拟地址到物理地址的转换的一个或更多个转换后备缓冲区(TLB)。
[0050] 图3B示出了根据一个实施例的图2的PPU 200的分区单元280。如图3B所示,分区单元280包括光栅操作(ROP)单元350、二级(L2)高速缓存360、存储器接口370和L2交叉开关(XBar)365。存储器接口370耦合到存储器204。存储器接口370可以实现用于高速数据传输的16、32、64、128位数据总线等。在一个实施例中,PPU 200包括U个存储器接口370,每个分区单元280有一个存储器接口370,其中每个分区单元280连接到相应的存储器设备204。例如,PPU 200可以连接到多达U个存储器设备204,诸如图形双数据速率、版本5、同步动态随机存取存储器(GDDR5SDRAM)。在一个实施例中,存储器接口370实现DRAM接口并且U等于8。
[0051] 在一个实施例中,PPU 200实现多级存储器分层结构。存储器204位于片外耦合到PPU 200的SDRAM中。可以从存储器204获取数据并存储在位于片上并且在各个GPC 250之间共享的L2高速缓存360中。如图所示,每个分区单元280包括与相应的存储器设备204相关联的L2高速缓存360的一部分。然后可以在GPC 250内的各个单元中实现较低级别的高速缓存。例如,每个SM 340可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 340的专用存储器。可以从L2高速缓存360获取数据并存储在每个L1高速缓存中,以在SM 340的功能单元中进行处理。L2高速缓存360耦合到存储器接口370和XBar 270。
[0052] ROP单元350包括ROP管理器355、颜色ROP(CROP)单元352和Z ROP(ZROP)单元354。CROP单元352执行与像素颜色相关的光栅操作,诸如颜色压缩、像素混合等等。ZROP单元354结合光栅引擎325实现深度测试。ZROP单元354从光栅引擎325的剔除引擎接收与像素片段相关联的样本位置的深度。ZROP单元354测试相对与片段相关联的样本位置在深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ZROP单元354更新深度缓存区并将深度测试的结果发送到光栅引擎325。ROP管理器355控制ROP单元350的操作。应当理解,分区单元280的数量可以不同于GPC 250的数量,并且因此,每个ROP单元350可以耦合到每个GPC 250。因此,ROP管理器355追踪从不同的GPC 250接收到的数据包并确定ROP单元
350产生的结果被路由到哪个GPC 250。CROP单元352和ZROP单元354经由L2 XBar 365耦合到L2高速缓存360。
[0053] 图4示出了根据一个实施例的图3A的流多处理器340。如图4所示,SM340包括指令高速缓存405、一个或更多个调度器单元410、寄存器文件420、一个或更多个处理核心450、一个或更多个特殊功能单元(SFU)452,一个或更多个加载/存储单元(LSU)454、互连网络480、共享存储器470和L1高速缓存490。
[0054] 如上所述,工作分配单元225分派要在PPU 200的GPC 250上执行的任务。任务被分配给GPC 250内的特定TPC 320,并且如果任务与着色程序相关联,则该任务可以被分配给SM 340。调度器单元410从工作分配单元225接收任务并且管理用于分配给SM 340的一个或更多个线程组(即,warp)的指令调度。调度器单元410在并行线程组中调度线程用于执行,其中每个组称为warp。在一个实施例中,每个warp包括32个线程。调度器单元410可管理多个不同的warp,调度warp用于执行,然后在每个时钟周期期间将指令从多个不同的warp分派到各个功能单元(即,核心350、SFU 352和LSU 354)。
[0055] 在一个实施例中,每个调度器单元410包括一个或更多个指令分派单元415。每个分派单元415被配置为向一个或更多个功能单元发送指令。在图4所示的实施例中,调度器单元410包括两个分派单元415,它们使得能够在每个时钟周期期间分派来自相同warp的两个不同的指令。在替代实施例中,每个调度器单元410可以包括单个分派单元415或附加分派单元415。
[0056] 每个SM 340包括为SM 340的功能单元提供寄存器集的寄存器文件420。在一个实施例中,寄存器文件420在每个功能单元之间被划分,使得每个功能单元被分配给寄存器文件420的专用部分。在另一个实施例中,寄存器文件420在由SM 340执行的不同warp之间被划分。寄存器文件420为连接到功能单元的数据路径的操作数提供临时存储。
[0057] 每个SM 340包括L个处理核心450。在一个实施例中,SM 340包括大量(例如128个等)不同的处理核心450。每个核心450可以包括完全管线化的单精度处理单元,其包括浮点算术逻辑单元和整数算术逻辑单元。核心450还可以包括双精度处理单元,其包括浮点算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮点算术的IEEE 754-2008标准。每个SM 340还包括执行特殊功能(例如属性评估、倒数平方根等)的M个SFU 452以及在共享存储器470或L1高速缓存490与寄存器文件420之间实现加载和存储操作的N个LSU 454。在一个实施例中,SM 340包括128个核心450、32个SFU 452和32个LSU 454。
[0058] 每个SM 340包括将每个功能单元连接到寄存器文件420并将LSU 454连接到寄存器文件420、共享存储器470和L1高速缓存490的互连网络480。在一个实施例中,互连网络480是交叉开关,其可被配置为将任何功能单元连接到寄存器文件420中的任何寄存器,并将LSU 454连接到共享存储器470和L1高速缓存490中的寄存器文件和存储器位置。
[0059] 共享存储器470是片上存储器的阵列,其允许SM 340与基元引擎335之间以及SM 340中的线程之间的数据存储和通信。在一个实施例中,共享存储器470包括64KB的存储容量。L1高速缓存490位于从SM 340到分区单元280的路径中。L1高速缓存490可以用于高速缓存读取和写入。在一个实施例中,L1高速缓存490包括24KB的存储容量。
[0060] 上面描述的PPU 200可以被配置为执行比常规CPU更快的高度并行计算。并行计算在图形处理、数据压缩生物统计学、流处理算法等方面具有优势。
[0061] 当被配置为用于通用并行计算时,可以使用更简单的配置。在这个模型中,如图2所示,固定功能图形处理单元被省略,创建了一个简单得多的编程模型。在此配置中,工作分配单元225将线程块直接分派并分配给TPC 320。块中的线程执行相同的程序,在计算中使用唯一的线程ID来确保每个线程产生唯一的结果,使用SM 340执行程序并执行计算,共享存储器470在线程之间通信,并且LSU 454通过分区L1高速缓存490和分区单元280读取和写入全局存储器。
[0062] 当被配置为用于通用并行计算时,SM 340还可以写入调度器单元220可以用来在TPC 320上启动新工作的命令。
[0063] 在一个实施例中,PPU 200包括图形处理单元(GPU)。PPU 200被配置为接收指定着色程序用于处理图形数据的命令。图形数据可以被定义为一组基元,诸如点、线、三形、四边形、三角形条等。典型地,基元包括指定基元的多个顶点(例如,在模型空间坐标系中)以及与基元的每个顶点相关联的属性的数据。PPU 200可以被配置为处理图形基元以生成帧缓冲(即,用于显示器的每个像素的像素数据)。
[0064] 应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如系统存储器或存储器204)。模型数据定义可在显示器上可见的每个对象。然后,应用程序会对驱动程序内核进行API调用,请求渲染和显示模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流,以执行处理模型数据的操作。这些命令可以引用要在PPU 200的SM 340上实现的不同着色程序,包括顶点着色器外壳着色器、域着色器、几何着色器和像素着色器中的一个或更多个。例如,SM 340中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 340可以被配置为同时执行不同的着色程序。举例来说,SM 340的第一子集可以被配置为执行顶点着色程序,而SM 340的第二子集被配置为执行像素着色程序。SM 340的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存360和/或存储器204。在经处理的顶点数据被光栅化(即,从三维数据变换成屏幕空间中的二维数据)以产生片段数据之后,SM 340的第二子集执行像素着色器以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并写入存储器204的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线化方式处理来自同一场景的不同数据,直到场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以显示在显示设备上。
[0065] PPU 200可以被包括在台式计算机、膝上型计算机、平板电脑、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、手持式电子装置等中。在一个实施例中,PPU 200包含在单个半导体衬底上。在另一个实施例中,PPU 200与一个或更多个其他逻辑单元(诸如精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等)一起被包括在片上系统(SoC)中。
[0066] 在一个实施例中,PPU 200可以被包括在图形卡上,其包括一个或更多个存储器设备204(诸如GDDR5SDRAM)。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口,台式计算机的主板包括例如北桥芯片集和南桥芯片集。在又一个实施例中,PPU 200可以是包含在主板的芯片集(即,北桥)中的集成图形处理单元(iGPU)。
[0067] 图5示出根据一个实施例的包括图2的PPU 200的片上系统(SoC)500。如图5所示,SoC 500包括CPU 550和如上所述的PPU 200。SoC 500还可以包括系统总线202以使能SoC 500的各种组件之间的通信。由CPU 550和PPU 200生成的存储器请求可以通过系统MMU 590路由,系统MMU 590由SoC 500的多个组件共享。SoC 500还可包含耦合到一个或更多个存储器设备204的存储器接口595。存储器接口595可实现,例如,DRAM接口。
[0068] 虽然没有明确示出,但是SoC 500可以包括除了图5所示的组件之外的其他组件。例如,SoC 500可以包括多个PPU 200(例如四个PPU 200)、视频编码器/解码器、无线宽带收发器以及其他组件。在一个实施例中,SoC 500可以以堆叠封装(PoP)配置与存储器204一起被包括。
[0069] 图6是根据一个实施例的由图2的PPU 200实现的图形处理管线600的示意图。图形处理管线600是被实现为从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线
600的一个阶段发送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可以表示由 API定义的图形处理管线。作为选项,图形处理管线
600可以在前面的附图和/或任何后续附图的功能和架构的上下文中实现。
[0070] 如图6所示,图形处理管线600包括管线架构,其包含若干阶段。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、基元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(VSCC)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其将处理单元配置为实现图形处理管线600的阶段以及几何基元(例如点、线、三角形、四边形、三角形条或扇形等),以由这些阶段进行处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
[0071] 数据组装阶段610接收输入数据601,其指定用于高阶表面、基元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,例如通过从主机处理器接收命令,其包括指向存储器中的缓冲区的指针,并从缓冲区读取顶点数据。然后顶点数据被传送到顶点着色阶段620进行处理。
[0072] 顶点着色阶段620通过每次针对每个顶点执行一组操作(即,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标矢量(即,)。顶点着色阶段620可以操纵各个顶点属性,例如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对顶点坐标或与顶点相关联的其他顶点属性执行操作。这种操作通常包括照明操作(即,修改顶点的颜色属性)和变换操作(即,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,该坐标通过将该坐标乘以矩阵来变换,该矩阵将坐标从对象坐标空间变换到世界空间或归一化设备坐标(NCD)空间。顶点着色阶段620生成经变换的顶点数据,其被传送到基元组装阶段630。
[0073] 基元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点组成几何基元以供几何着色阶段640处理。例如,基元组装阶段630可以被配置为将每三个连续顶点组成几何基元(即,三角形),用于传送到几何着色阶段640。在一些实施例中,可以针对连续几何基元(例如,三角形带中的两个连续三角形可以共享两个顶点)重新使用特定顶点。基元组装阶段630将几何基元(即,相关联的顶点的集合)传送到几何着色阶段640。
[0074] 几何着色阶段640通过对几何基元执行一组操作(即,几何着色器或程序)来处理几何基元。曲面细分(tessellation)操作可以从每个几何基元生成一个或更多个几何基元。换言之,几何着色阶段640可以将每个几何基元细分为两个或更多个几何基元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何基元传送到视口SCC阶段650。
[0075] 在一个实施例中,图形处理管线600可以在流多处理器以及顶点着色阶段620、基元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可按顺序执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段650可以利用数据。在一个实施例中,由图形处理管线600中的一个或更多个阶段处理的基元数据可被写入到高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段650和光栅化阶段660被实现为固定功能电路。
[0076] 视口SCC阶段650执行几何基元的视口缩放、剔除和裁剪。正在被渲染的每个表面都与抽象的相机位置相关联。相机位置表示观看者观看该场景的位置,并定义包围该场景的物体的视锥体(viewing frustum)。视锥体可以包括视平面、后平面和四个裁剪平面。完全位于视锥体外部的任何几何基元都可被剔除(即丢弃),因为该几何基元将不会对最终渲染场景作出贡献。部分位于视锥体内部且部分位于视锥体外部的任何几何基元可以被裁剪(即,被转换为被包围在视锥体内的新的几何基元)。此外,可以基于视锥体的深度来对每个几何基元进行缩放。然后将所有可能可见的几何基元传送到光栅化阶段660。
[0077] 光栅化阶段660将3D几何基元转换成2D片段(例如,能够被用于显示等)。光栅化阶段660可以被配置成利用几何基元的顶点来设置一组平面方程,从其可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩膜,其指示像素的一个或更多个样本位置是否拦截几何基元。在一个实施例中,还可以执行z测试以确定几何基元是否被已经光栅化的其他几何基元所遮挡。光栅化阶段660生成片段数据(即,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。
[0078] 片段着色阶段670通过对每个片段执行一组操作(即,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(即,颜色值),例如通过执行照明操作或使用片段的内插纹理坐标采样纹理贴图。片段着色阶段670生成传送到光栅操作阶段680的像素数据。
[0079] 光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试以及将像素数据与对应于与像素相关联的其他片段的其他像素数据相混合。当光栅操作阶段680已经完成对像素数据(即,输出数据602)的处理时,可以将像素数据写入渲染目标(诸如帧缓冲区、颜色缓冲区等)。
[0080] 应该理解,除了上述的一个或更多个阶段之外或代替上述的一个或更多个阶段,一个或更多个附加阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述一个或更多个阶段可以从图形处理管线中排除(例如几何着色阶段640)。其他类型的图形处理管线被认为是在本公开的范围内。此外,图形处理管线600的任何阶段可由图形处理器(例如,PPU 200)内的一个或更多个专用硬件单元实现。图形处理管线600的其他阶段可以由可编程硬件单元(诸如PPU 200的SM 340)实现。
[0081] 图形处理管线600可经由主机处理器(例如,CPU 550)执行的应用程序来实现。在一个实施例中,设备驱动程序可实现应用程序编程接口(API),其定义可由应用程序使用以生成图形数据用于显示的各种功能。设备驱动程序是软件程序,其包括控制PPU 200的操作的多个指令。API为程序员提供抽象概念,其允许程序员利用专用图形硬件(诸如PPU 200)来生成图形数据,而不要求程序员利用针对PPU 200的特定指令集。应用程序可以包括API调用,其被路由到用于PPU 200的设备驱动程序。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU 550上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU 550和PPU 200之间的输入/输出接口启动PPU 200上的操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 200的硬件来实现图形处理管线600。
[0082] 可以在PPU 200内执行各种程序以实现图形处理管线600的各个阶段。例如,设备驱动程序可以在PPU 200上启动内核以在一个SM 340(或多个SM 340)上执行顶点着色阶段620。设备驱动程序(或由PPU 200执行的初始内核)还可在PPU 200上启动其他内核以执行图形处理管线600的其他阶段,例如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的一些阶段可以在固定单元硬件(诸如在PPU 200内实现的光栅化器或数据组装器)上实现。应当理解,来自一个内核的结果可以在由SM 340上的后续内核处理之前,由一个或更多个介于中间的固定功能硬件单元处理。
[0083] 图7示出了示例性系统700,其中可以实现各种先前的实施例的各种架构和/或功能。如图所示,提供了系统700,包括连接到通信总线702的至少一个中央处理器701。通信总线702可以使用任何合适的协议来实现,诸如PCI(外围组件互连)、PCI-Express、AGP(加速图形端口)、HyperTransport(超传输)或任何其他总线或一个或更多个点对点通信协议。系统700还包括主存储器704。控制逻辑(软件)和数据被存储在可以采用随机存取存储器(RAM)的形式的主存储器704中。
[0084] 系统700还包括输入设备712、图形处理器706和显示器708,即常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备712(例如键盘鼠标触摸板、麦克等)接收用户输入。在一个实施例中,图形处理器706可以包括多个着色器模块、光栅化模块等。前述模块中的每一个甚至可以位于单个半导体平台上以形成图形处理单元(GPU)。
[0085] 在本说明书中,单个半导体平台可以指代唯一的单一基于半导体的集成电路或芯片。应该指出的是,术语单个半导体平台还可以指具有增加的连接性的多芯片模块,其模拟芯片上的操作,并相对于使用常规的中央处理单元(CPU)和总线实现方式进行实质性的改进。当然,根据用户的需要,各种模块也可以分开放置或以半导体平台的各种组合方式放置。
[0086] 系统700还可以包括辅助存储710。辅助存储710包括例如硬盘驱动器和/或可移除存储驱动器,其代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
[0087] 计算机程序或计算机控制逻辑算法可以被存储在主存储器704和/或辅助存储710中。这样的计算机程序在被执行时使得系统700能够执行各种功能。存储器704、存储710和/或任何其他存储是计算机可读介质的可能示例。
[0088] 在一个实施例中,各种先前附图的架构和/或功能可以在中央处理器701、图形处理器706、具有中央处理器701和图形处理器706二者至少部分能的集成电路(未示出)、芯片集(即,设计成作为执行相关功能的单元工作和出售的一组集成电路)和/或关于其的任何其他集成电路的上下文中实现。
[0089] 然而,各种先前附图的架构和/或功能可以在通用计算机系统电路板系统、专用于娱乐目的的游戏控制台系统、专用系统和/或任何其他所需的系统的上下文中实现。例如,系统700可以采取台式计算机、膝上型计算机、服务器、工作站、游戏控制台、嵌入式系统和/或任何其他类型的逻辑的形式。然而,系统700可以采取各种其他设备的形式,包括但不限于个人数字助理(PDA)设备、移动电话设备、电视机等
[0090] 此外,尽管未示出,系统700可以耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、线缆网络等)用于通信目的。
[0091] 图8示出了根据一个实施例的使用神经网络重建图像数据的方法800的流程图。如操作802所示,识别要渲染的图像数据,该图像数据由蒙特卡洛采样方法产生。另外,如操作804所示,将滤波器应用于图像数据以创建经重建的图像数据,其中滤波器是神经网络。例如,可以利用神经网络(例如,代替交叉双边滤波器等)明确地执行图像数据的滤波和重建。
例如,神经网络可以包括自动编码器。在另一个示例中,神经网络可以实现一个或更多个跳跃连接。在又一个示例中,神经网络可以实现一个或更多个循环层。此外,如操作806所示,经重建的图像数据被返回。
[0092] 使用循环自动编码器交互式重建噪声蒙特卡洛图像序列
[0093] 介绍
[0094] 光线和路径追踪近来已经作为为视觉效果选择的渲染算法出现了。这鼓励了滤波和重建技术的发展,以减少蒙特卡洛渲染中固有的噪声,但是关注电影质量的结果可能允许在滤波之前每个像素数百到数千个样本。
[0095] 同时,游戏近来也已经从更多的经验模型转向基于物理的着色,但是来自该转变在现实中的潜在增加主要取决于比光栅化允许更加灵活的采样光传输路径的可能性。不幸的是,即使是最快的光线追踪器,也只能在1080p和30Hz下追踪每个像素的少量光线。虽然这个数字每几年就会翻一番,但趋势(至少部分)与朝向更高分辨率的显示和更高的刷新率的移动是相反的。因此,在可预见的未来,游戏和其他实时应用程序的实际采样预算似乎可能保持在每像素一个(短)路径的数量级上。可以提出一种新的通用重建技术,其可以显着改善该技术领域的状况。
[0096] 从每个像素的单个路径重建全局照明可能带来挑战。间接照明的蒙特卡洛集成可能导致低采样率下的噪声图像,因此大部分能量集中在路径或像素的小子集中。因此,这个问题可以被表达为从这些稀疏样本重建最终图像(而不是去噪),因为在过低的采样速率下,可能开始几乎只有噪声。当试图在动画中获得时间稳定的结果时,这个问题可能会复杂化。
[0097] 在一个实施例中,可以对深卷积网络进行重大修改,以便解决重建具有极端蒙特卡洛噪声的渲染图像序列的特定挑战。更具体地说,在深度自动编码器结构中添加循环连接可能导致增加的时间稳定性,并且执行端到端训练可能允许网络自动学习如何在没有用户交互或参数设置的情况下最佳地利用辅助像素通道(例如深度和法线)。
[0098] 这些进步可以允许在采样预算极低的情况下交互式地产生具有全局照明的似真(plausible)图像序列。
[0099] 路径追踪
[0100] 在一个实施例中,可以使用生成1-样本单向路径追踪估计来创建对神经网络的输入。
[0101] 交互式路径追踪器
[0102] 在一个实施例中,可以使用优化的路径追踪器来产生有噪声的输入图像。传统路径追踪器可以通过每个像素击中(shoot)光线,根据相交对象的反射率的轮廓随机散射,并持续递归直到撞击光源。接下来的事件估计可以被用来通过确定性地将每个路径顶点连接到光来改善收敛性。
[0103] 为了加速可见表面确定,GPU可以被用来从相机中光栅化(而不是光线追踪)第一命中点并且将其相关联的阴影属性存储在G缓冲区中。更具体地,可以存储命中网格ID、网格基元ID、三角相交质心坐标、材料ID、世界空间位置和阴影法线、漫反射和镜面反照率以及运动矢量。在这个光栅化通过(rasterization pass)之后,可以使用GPU光线追踪器来追踪路径。在路径追踪期间,景深和运动模糊可能不被考虑,因为这些影响可能通常被实现为补充后处理,并且它们可能在G-缓冲区中引入噪声。
[0104] 在另一个实施例中,当对光源和散射方向进行采样时,可以使用低差异序列(例如Halton或Sobol),并且可以在散射之后将路径空间正则化(regularization)应用于光泽和镜面反射材料。这种正则化可以显著减少光泽反射中稀疏的高强度异常值的数量,代价是小的偏差。
[0105] 对于实际交互,间接反弹的次数可以被限制为一次。尽管采用更多的光线弹跳来渲染图像是可能的,它们对图像的贡献通常迅速衰减,但是其对渲染时间和图像变化的负面影响更为显著。如此,路径追踪器可以在每个像素处仅生成一个直接照明路径(照相机表面的光)和一个间接路径(照相机表面-表面的光)。每个像素的总输入生成成本可以包括光栅化、三条射线、两个材料评估和一个材料采样。在一个实施例中,图像可以被称为单样本图像,以强调一个路径被追踪,即使沿着其路线具有两个后续事件估计。
[0106] 重建的辅助输入
[0107] 在一个实施例中,G缓冲区可以包含关于场景的几何形状、材料和光源的信息。通过输出可能由多个缓冲区组成的深层图像,其子集可用于重建。除了有噪声的高动态范围的RGB图像之外,还可以将下列G-缓冲区特征集从光栅化通过输出到重建算法:视图空间阴影法线(二维矢量)、深度和材料的粗糙度。在另一个实施例中,重建算法的输入可以由每个像素3+4=7个标量值组成。
[0108] 可以将颜色值作为16位半精度浮点(FP16)值存储在线性空间中以保持高动态范围(HDR)。深度值可以线性化以获得更高的精度,并可以存储为FP16。剩余的3个通道可以被存储为每个8bpp。可以使用相机的投影矩阵来计算视图空间阴影法线,并且可以存储其x和y分量。
[0109] 通过利用直接可见材料的反照率来解调有噪声的RGB图像,可以简化输入。通过存储该无纹理的照明,可以从有噪声的图像中去除大部分纹理复杂度,这可以显著促进训练并减少所需的网络容量。在无纹理的照明被重建之后,可以通过反照率来重新调制,以便在最终渲染中包括纹理细节。
[0110] 在另一个实施例中,由于直接可见表面在每个像素处仅被采样一次,因此所有上述输入可能倾向于图像空间混叠。反混叠这些输入可能需要更高的采样率,这可能妨碍交互式渲染。将屏幕空间时间反混叠技术(TAA)应用于经重建的输出图像,反而可以以可忽略的额外成本解决剩余的混叠。
[0111] 采用循环自动编码器的图像序列重建
[0112] 在一个实施例中,图像重建算法可以包括数据驱动的方法,其基于大量的训练对学习从有噪声输入图像序列到无噪声输出图像序列的映射,每个训练对由示例性输入序列和期望的输出序列(即训练目标)组成。
[0113] 重建方法可以基于使用具有分层跳跃连接的卷积网络进行图像复原。该架构可以被修改以包括子采样和上采样阶段以及循环连接。可以准备训练数据,并且在训练期间可以优化精确的损失函数。
[0114] 采用跳跃连接的自动编码器
[0115] 在一个实施例中,网络架构可以包括不同的编码器和解码器阶段,其分别在降低和增加空间分辨率的情况下操作。这可以在光流估计中提供良好的结果,并且还可以强调与去噪自动编码器的联系。由于以最高空间分辨率运行的层可能是最耗时的,所以与其他架构相比,该设计的执行速度可能会更快,质量下降(对于高斯噪声)可以忽略不计。所有较深层的感受域在输入图像中可以是几倍大,这可以允许考虑较大像素邻域,并因此改善对非常稀疏输入的处理。由于网络学习了从输入到输出的映射,除了颜色数据之外,还可以提供任意数量的辅助输入。训练期间的优化可以考虑所有这些输入,并且可以自动找到使用它们消除颜色数据歧义的最佳方式。
[0116] 用于视频去噪的循环自动编码器
[0117] 循环神经网络(RNN)可以用于处理任意长的输入序列。RNN可以包括反馈回路,其将先前隐藏状态的输出连接到当前隐藏状态,从而在输入之间保留重要信息。由于两个原因,这可能使其适合于应用程序。首先,为了去除连续图像流的噪声,可能需要获得时间上稳定的结果。其次,由于输入图像采样非常稀疏,循环连接可允许收集关于随着时间的照明的更多信息。
[0118] 为了保持多尺度的时间特征,可以在每个编码阶段中包括完全卷积循环块。在一个实施例中,包括循环连接的整个架构可以是完全卷积的。这可以允许采用小固定尺寸的裁剪框(例如,128×128像素)训练网络以及随后应用到任意大小的图像。
[0119] 在一个实施例中,与解码器相反,循环块可以被放置在编码器部分中。原因是编码器中的信号可能更稀疏。例如,就在最大池化(max pooling)之前,可以在每个编码阶段放置循环块。
[0120] 每个循环块可以由具有3×3像素空间支持的三个卷积层组成。一层可以处理来自编码器的先前层的输入特征。然后它可以将结果与来自先前隐藏状态的特征联系起来,并且可以将其通过剩余的两个卷积层。结果可能成为新的隐藏状态和循环块的输出两个。这可以提供足够的时间性感受域,并且与这样的循环块的多尺度级联一起,可以允许在时间上有效地追踪和保留特征。循环块中的卷积层可以按照与其所附加的编码阶段相同的图像分辨率和每像素特征数来操作。
[0121] 在一个实施例中,输出和隐藏状态可以使用循环方程来表示:
[0122] hi=Oi=C3x3(C3x3(C3x3(Ii)⌒hi-1))
[0123] 其中C3×3是具有3×3像素空间支持的卷积核,Oi是输出,Ii是当前输入,hi是输入i的隐藏状态,并且⌒是级联运算符。
[0124] 图9示出了根据一个实施例的循环RCNN连接的示例性内部结构900。如图所示,第一多个卷积902A-C接收第一输入904,并且第二多个卷积902D-F接收第二输入910。反馈回路906将来自第一多个卷积902A-C的隐藏循环状态908,作为输入提供给第二多个卷积902E-F。通过这种方式,可以在循环RCNN的输入之间保留信息。
[0125] 训练
[0126] 下面描述用于循环自动编码器的训练数据的一个示例性准备以及关于一个示例性训练过程的细节。
[0127] 数据集
[0128] 在一个示例中,平滑相机飞越(fly-through)动画可以包括,可用于训练的例如每个场景1000帧。对于每一帧,以每个像素1个样本可以产生10个不同的有噪声图像,以及辅助特征和用于训练的目标图像。通过具有多个有噪声图像,可以要求这些蒙特卡洛噪声的这些实例中的每一个导致相同的重建图像。与创建额外的目标图像相比,这能够以可以忽略的成本增加训练对的数量。请注意,由于主光线被光栅化,有噪声图像可能会共享辅助特征。
[0129] 在另一示例中,可以在渲染期间生成1024x1024图像,而可以使用较小的128×128裁剪框来执行训练,其针对每个7帧的训练序列随机选择。每个训练序列的开始可以在飞越序列内以及飞越序列本身随机选择。向前和向后回放可以随机交替,以便在各种相机移动上训练网络。通过将有噪声图像更改为不同的种子,而保持帧和目标图像固定,相机也可以在训练序列中随机“停顿(stalled)”。
[0130] 另外,将训练序列随机旋转90=180=270度可以用来训练更多的运动方向。范围[0,2]中的随机调制可以分别应用于每个颜色通道。这可能迫使网络更好地学习线性输入-目标颜色关系,以及通道的独立性。
[0131] 网络
[0132] 我们训练500个周期,学习率为0.001,衰变率1=0.9和2=0.99。在前10个训练周期,使用几何级数,学习率可能上升10倍,然后按照 时间表减少,其中t是训练时间。可以使用4个序列的小批量大小,并且每个周期可以随机化训练数据的顺序。所有的参数都可以被初始化,并且可以在除了最后一个之外的所有层中使用α=0.1的泄漏ReLU激活,其可以使用线性激活。最大池化可以用于子采样和最近邻居滤波以用于升采样(upsampling)。
[0133] 总的来说,网络中可以有36个卷积层:前馈路径中有18个卷积层,并且6个RCNN块中的每个块内有3个卷积层。可以使用7个连续帧的序列在训练期间提供足够的时间情景。循环块可以通过随时间反向传播来训练,其中RNN的前馈子部分被复制以展开循环回路。
[0134] 在编码器的第一阶段中,输出特征计数可以被设置为每像素32个,并且然后在每个子采样操作之后该数量可以被乘以4/3。这可能导致在每次子采样之后固定速率压缩4/(4/3)=3倍。因此,每个阶段丢失的信息都可能通过跳跃连接重新引入。然后解码器部分可以在每次升采样之后将数据量放大3倍。
[0135] 损失函数
[0136] 损失函数可以定义在训练期间如何计算网络输出和训练目标之间的误差。在图像恢复中使用的一个示例性损失函数是L2,其为预测图像P和目标图像T之间的均方误差。然而,使用L1损失而不是L2可以减少重建图像中的斑点伪影。
[0137] 另一个示例性第一损失项可以包括空间L1损失,在时间训练序列中表示为单个图像的
[0138]
[0139] 其中Pi和Ti是预测图像和相应的目标图像的第i个像素。在计算损失之前,通过将所有颜色通道提升到功率,图像也可以变平整。1/2.2的值可能接近感知校正,然而,0.2的更节省(aggressive)的值可以允许更有效地惩罚图像的黑暗区域中的误差。
[0140] L1空间损失可以提供耐受异常值的良好的整体图像度量。为了进一步惩罚精细细节(如边缘)的差异,还可以使用梯度域L1损失:
[0141]
[0142] 其中可以利用沿着x和y的单个像素偏移量的有限差分来相应地计算导数。
[0143] 这些损失可以独立地使每个图像的误差最小化。然而,它们可能不会惩罚时间不一致性(例如,帧之间的闪烁),并且可能不鼓励优化器训练循环连接以跨帧传递更多数据。因此,可引入时间L1损失
[0144]
[0145] 其中第i个图像像素的时间导数 可以使用时间训练序列中当前图像与先前图像的第i个像素之间的时间上的有限差分来计算。这三项损失的加权组合可以用作最终的训练损失:
[0146]
[0147] 其中ws/g/t是控制每个损失的贡献的可调权重。加权损失可以相应地用于采用权重ws/g/t=0.8/0.1/0.1的训练。
[0148] 在一个实施例中,序列中稍后的帧可以被分配较高权重,以激励RNN块的时间训练。例如,可以使用高斯曲线来调制ws/g/t:对于7个图像的序列,可以使用(0.011,0.044,0.135,0.325,0.607,0.882,1)。
[0149] 为了验证组合损失导致仅空间损失 的改善,可以在100个训练周期之后在验证序列上测量结构相似性度量(SSIM)。SSIM可能会显示出改善(例如,从0.7815的 到0.7647的组合损失)。
[0150] 虽然以上已经描述了各种实施例,但是应该理解的是,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应该被任何上述示例性实施例限制,而是应该仅根据下面的权利要求及其等同物来限定。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈