可微分渲染
随着我开始更多地关注机器学习,可微分渲染是引起我注意的一个主题,并且以一定的频率出现。 我的第一个想法是,“太棒了,这是一个可以以某种方式利用机器学习生成像素的新系统吗?” 深挖主题后,随之而来的是失望,但失望最终被对实际应用的现实兴奋所取代。 那么,什么是可微分渲染?
1、可微分渲染简介
逆向图形试图获取传感器数据并推断 3D 几何、照明、材料和运动,以便图形渲染器可以逼真地再现观察到的场景。 然而,渲染器旨在解决图像合成的正向过程。 为了朝另一个方向发展,我们提出了一种近似可微分渲染器 (DR),它明确地模拟了模型参数变化与图像观察之间的关系。
-OpenDR:近似可微分渲染器(论文、技术讲座)
OpenDR 可以将颜色和顶点作为输入来生成图像中的像素,并从这些像素中保留导数,以便它可以准确确定哪些输入对最终像素颜色有贡献。 通过这种方式,它可以将图像“反渲染”为颜色和顶点。
OpenDR 是“近似”的,因为光栅化存在不连续性,例如由于遮挡。 这只是可微分渲染引擎(光栅化器)的一种形式,但存在其他形式的 DR,包括光线行进、基于点的技术,甚至是单个着色表面。 单一阴影表面情况(想象一个全屏四边形)可能最容易理解,因为它只需要通过光照和 BRDF 传播即可返回输入。 那么这有什么用呢?
2、可微分渲染的用途
可微分渲染的一个用例是在训练机器学习模型时计算损失。 例如,在 SVBRDF 重建论文中,网络生成四个输出纹理贴图(漫反射反照率、镜面反照率、粗糙度、法线),但单独计算这四个空间的损失是不够的。 问题是目标法线(例如)和推断法线之间的比较没有捕捉到当纹理实际渲染为光照表面时可见的感知损失。 可微渲染器用于计算渲染图像空间中的损失; 然后将损失传播回四个纹理输入,并从那里应用反向传播来训练网络。
DR 在使用可微分渲染的实时高度图融合中有类似的应用。 目标是从单个单目相机稳健地重建高度图。 使用三角形网格和 DR,效率和鲁棒性都得到了提高。
我们方法的一个重要元素是实现高效操作的一个重要元素是在标准 OpenGL 计算机图形管道中实现的可微分渲染器。 给定当前表面模型和相机姿势,它可以渲染每个像素的预测图像和深度,以及这些量相对于模型参数的导数,几乎不需要额外的计算成本。
初始深度估计被转换为高度图,然后渲染为具有顶点位移的三角形网格以生成新的深度图,然后可用于计算损失。 整个过程是可微的,这意味着损失可以通过深度图、三角形网格、高度图、原始深度估计和网络进行训练。
3、结论和补充阅读
这是对可微分渲染的快速概述,如果你像我一样发现自己想知道 DR 的定义和用途,我希望它对您有所帮助。 以下是与可微分渲染相关的其他论文的简短列表。 我没有对这些论文的质量提出任何要求,这些只是我在写这篇文章时发现的相关作品。
BimAnt翻译整理,转载请标明出处