论文精读(保姆级解析)——DiFaReli: Diffusion Face Relighting

前言

  该论文发表在2023年ICCV上,主要针对人像重打光问题提出了一种新的方法,下面给出论文和项目链接:

在这里插入图片描述

摘要

  提出了一种针对单张图像的重打光方法,作者提到针对非漫反射光照的处理比较困难,早期的工作主要是假设朗勃表面,简化了光照模型,或者引入估计3D人脸形状,反照率,阴影等。这种早期的方法容易估计的不准确,并且需要大量的光照训练数据。于是,作者试图绕开这种精确估计内在参数的方法,提出了一种只需要在2D图像上训练的方法。
关键思想:

  1. 通过利用条件扩散模型DDIM解码解缠光照信息和其他的面部信息,这些信息都是直接通过离线模型进行估计的。
  2. 提出了一种新颖的调节技术,使用渲染的阴影参考来空间调制DDIM,简化了光和几何之间复杂相互作用的建模。

引言

  重打光的应用非常广泛。。。

  重打光面部图像需要建模几何、材质和光照之间的复杂交互,这些物理相互作用在2D图像中并不固有,难以准确估计。早期方法多假设简化模型,难以处理复杂光照。最新方法利用多视图、多光照数据,提出了预测表面法线、反照率及阴影图的重打光pipeline。最近的一些方法旨在通过神经网络预测阴影映射来专门建模投射阴影或通过估算几何形状的物理光线追踪绘制阴影地图。这些方法都是先分解光照信息,然后再与阴影一起渲染输出。缺点是光照参数很难正确估计。如输入的图像要去除阴影,但是参数估计的时候并不是去除,会直接代入后面影响估计。并且眼睛,耳朵这些特征很难处理。
  本文引入了一种替代的方法,不依赖精确地内在分解,并且可以在2D数据集上进行训练,不需要依赖3D数据和多视图数据、真实光照数据,只需要几个离线的估计器即可。主要思路如下:

  1. 编码输入的图像为一个特征向量,然后解缠光照信息和其他信息,然后,对特征向量中的光编码进行修改并解码。

难点在于如何解缠光照信息和其他的信息(如面部信息),使得解码后的阴影直接影响光照而不影响其他的信息?关键思想如下:

  1. 利用条件隐式扩散模型结合一种新的条件技术来完成,通过在2D数据集上训练的生成模型隐式地学习光照交互

  主要思路依赖于DDIMDiffAEDDIM 具有确定性的逆过程,DiffAE可以将图像编码为有意义的语义编码,并将编码的语义与其他的随机信息解缠,通过修改语义编码,从而实现对语义属性的操作。借鉴到重打光任务,把光照信息解缠处理,对光照信息进行操作,实现对图像的重打光。但是,又与自动发现语义属性并将其编码为潜在编码的DiffAE不同,作者提出的方法需要明确且可解释的光编码,以方便用户进行照明操作。于是需要引入光照信息,但是有没有真实的光照信息。

  于是,为了解决没有光照真值情况下的重打光问题,引入了DECA估计器。将光照信息编码为SH系数,并依靠条件DDIM解码并学习此过程中解耦的光照系数。不同于之前的工作,这里的SH光照并不直接渲染输出阴影(SH能力有限,难以表达出复杂的阴影),只是用来条件化一个生成过程,该过程学习复杂的阴影先验以再现真实的2D人脸图像。为了在重光照中保持输入的身份,还将面部形状和人脸识别模型的深度特征等属性作为条件输入给DDIM

  作者引入的另一个关键的组件是为DDIM设计的新颖条件化技术,不同于DiffAE或者其他的扩散模型将SH视为全局,非空间条件向量,作者使用已知的SH方程渲染一个阴影参考,将其输入到另一个称为调制器的网络中,该网络计算DDIM的逐层空间调制权重。这种条件化技术有助于保留阴影参考中的空间信息,并提供易于学习的条件信号,因为阴影参考中的像素强度与输出的RGB像素更直接相关。

  通过提出的新颖框架,投射阴影的可见性也可以通过一个简单的修改来建模:向DDIM添加一个指示投射阴影“程度”的条件标量,在测试的时候通过修改这标量来控制阴影的大小。由于本文的基于扩散的框架没有直接在物理图像形成模型中使用该标志或形状和SH参数,因此可以容忍这些参数的不精确估计,并且不会显著影响打光效果。

  本文的方法能够生成高度可信且照片级的结果,并且能够有效地增强或减弱投射阴影。此外,还能够以高保真度还原原始面部细节,而使用神经网络预测法线贴图的方法很难做到这一点。进行了定性和定量评估,并在标准基准测试集Multi-Pie上实现了当前最佳性能。简而言之,贡献如下:

  1. 基于条件DDIM的最先进的面部照明框架,可产生逼真的阴影,而不需要准确的内在分解或3D和照明地面真相。
  2. 一种新的调节技术,将从估计的光线和形状参数渲染的阴影参考转换为分层空间调制权重。

3 方法

在这里插入图片描述

给定输入的人脸图像,在目标照明条件下重新打光该图像,该条件由球面谐波系数和表示可见投射阴影“程度”的附加标量描述。

3.1 背景

为了更好地说明本文的方法,先给出DDIMDiffAE的背景介绍:

  • DDIM:一种扩散模型的变体,不同于标准的扩散模型,DDIM使用非马尔科夫链推断过程,该过程依赖一个条件分布, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} \mid x_t, x_0) q(xt1xt,x0),除了 x t x_t xt之外,还依赖于 x 0 x_0 x0为条件。值得注意的是,该过程是可逆的,可以从 x 0 − x T x_0-x_T x0xT,也可以从 x T − x 0 x_T-x_0 xTx0
  • DiffAEDiffAE表示图像编码生成 x T x_T xT中很少含有输入图像 x 0 x_0 x0的语义信息,并建议在DDIM的增加一个单独的图像编码器预测可学习的潜在变量 z z z作为条件。通过联合训练图像编码器和DDIM,编码的 z z z捕捉有意义的语义,而通过反转DDIM的确定性生成过程推断出的 x T x_T xT 捕捉未在 z z z中编码的其他信息,如随机变化。结果生成的潜在编码 ( z , x T ) (z, x_T) (z,xT) 也可以使用相同的条件DDIM近乎完美地解码回输入图像。通过修改语义潜在变量 z z z并解码新的 ( z ′ , x T ) (z^{\prime}, x_T) (z,xT)DiffAE 可以操作真实输入图像的语义属性——这一思路启发了作者的工作。

3.2 方法

  本文方法的思路是将输入图像编码为一个特征向量,该向量将光照信息与输入图像的其他信息分离开来。然后,通过修改特征向量中的光照编码,并使用条件DDIM对结果向量进行解码,生成重光照图像(如下图)。这个过程类似于DiffAE执行属性操作的方式;然而,本文的任务需要良好解耦且可解释的光照编码,以便用户进行光照操作。
  为了解决这个问题,作者使用现成的估计器将输入图像编码为光线、形状和相机编码,以及人脸嵌入、阴影标量和背景图像
在这里插入图片描述

3.3 编码器

  对输入图像进行编码:
f = ( l , s , c a m , ζ , c , b g ) f = (l,s,cam,\zeta,c,bg) f=(l,s,cam,ζ,c,bg)
其中:

  • l l l:二阶球谐光照系数
  • s s s:参数化的面部形状
  • c a m cam cam:正交相机参数
  • ζ \zeta ζ:基于ArcFace的深度特征
  • c c c:可见投射阴影的标志
  • b g bg bg:背景像素

l , s , c a m l,s,cam l,s,cam

  • 通过DECA进行估计,同时DECA还能预测出反照率(没有使用,论文中作者说没用)。为了光照编码 l l l,作者直接使用来自 DECASH 系数,每个 RGB通道包含 9 个系数。DECA3D 人脸形状基于 FLAME 模型参数,作为具有身份形状、姿态和表情的三种线性基的混合形状,它们各自的系数记为 β \beta β θ \theta θ ψ \psi ψ。人脸形状编码 s s s是组合后的 ( β , θ , ψ ) ∈ R ∣ β ∣ + ∣ θ ∣ + ∣ ψ ∣ (\beta, \theta, \psi) \in \mathbb{R}^{|\beta| + |\theta| + |\psi|} (β,θ,ψ)Rβ+θ+ψDECA 假设正交投影,并用各向同性缩放和 2D 平移来建模相机姿态。本文将缩放和平移参数组合成 c a m ∈ R 1 + 2 \mathbf{cam} \in \mathbb{R}^{1+2} camR1+2。注意,本文没有使用预测的反照率图,因为 DECA 的反照率估计可能不可靠,并且我们通过经验发现它是不必要的。

ζ \zeta ζ

  • ArcFace估计人脸深度特征进行身份编码

c c c

  • 投射阴影编码,训练了一个模型来从人脸图像中估计 c c c,并固定了这个预训练的估计器。为此,作者手动标记了大约 1000 张人脸图像,使用二进制标志指示是否可见投射阴影。按照 DiffAE提出的技术,首先使用 DiffAE 的预训练编码器将每张人脸图像映射到一个具有语义意义的潜在编码码 z z z,然后训练一个基于z的逻辑回归分类器去预测标志。 c c c然后被计算为逻辑回归的 logit 值。如DiffAE所示,这种技术有助于减少获得良好准确性所需的训练样本数量, c c c也可以通过其他方式估计,例如使用卷积神经网络(CNN)。

b g bg bg

  • 背景编码,为了在重打光过程中固定背景,使用输入图像的背景对DDIM条件化,背景区域通过人脸分割算法检测。

3.4 DDIM解码器和调制网络

  DDIM用于将输入的特征向量(已经修改过光照信息)解码为输入图像的新编码,即在训练时,DDIM将噪声映射为原始图像;在重光照时,通过反向生成过程将原始图像映射为重光照图像。这种调节涉及到另一个称为调制器网络的网络,它将光、形状和相机编码转换为DDIM解码器的空间调制权重。DDIM的组成结构为基于UNet的一堆残差结构和自注意力机制,本文的区别在于:

  • 1)UNet 前半部分每个残差块的输出将被调制器网络的信号调制;
  • 2)使用自定义的自适应组归一化。我们的调制器网络与 DDIM 的 UNet 前半部分架构相同,但不共享权重。

3.5 条件DDIM解码器

  在条件向量上调节扩散模型可以通过各种方式完成,例如通过自适应群体归一化或基于注意的机制。在本文的问题中,光照信息被明确地编码为SH系数,并且它们与3D形状(特别是表面法线)的交互可以通过SH光照方程精确建模。本文的想法是通过渲染目标光照的面部阴影参考来简化已知交互的建模。该参考的主要目的是以空间对齐的方式传达目标光照和阴影信息,而不是几何形状或确切的阴影强度。以下部分详细介绍了这种“空间”条件化技术以及用于其他编码的标准非空间条件化技术。

3.5.1 空间条件

  这种技术用于光照、形状、相机和背景编码 ( l , s , c a m , b g ) (l, s, cam, bg) l,s,cam,bg。给定面部形状 s s s,首先使用 FLAME 模型的三个线性基将其转换为三角网格,并移除网格中的耳朵、眼球、脖子和头皮,只保留面部区域(见网络框图)。移除这些部分是因为它们通常不准确且难以正确估计(例如,被头发遮挡的耳朵)。本文假设一个恒定的灰色反照率 (0.7, 0.7, 0.7) 并在由 c a m cam cam 描述的相机姿态下渲染此网格,使用标准的 S H SH SH 光照方程计算表面颜色 l l l
  然后,这个阴影参考 R R R,它显示了在目标光照下输入人物的形状和姿态的阴影面部,被与背景图像 b g bg bg连接并传递给Modulator网络。用 m i ∈ R H i × W i × D i m_i ∈ R^{H_i×W_i×D_i} miRHi×Wi×Di表示Modulator网络中每个残差块i的输出,用 o i ∈ R H i × W i × D i o_i ∈ R^{H_i×W_i×D_i} oiRHi×Wi×Di表示相同DDIM的前半部分中对应残差块的输出。在DDIM中,作者将每个残差块的输出 o i o_i oi替换为 o i ′ o_i^\prime oi,并将其作为网络中后续层的输入:
o i ′ = o i ⊙ t a n h ( m i ) o_i^\prime = o_i \odot tanh(m_i) oi=oitanh(mi)
这种调节技术允许阴影图像 R R R和背景保持其空间结构,并促进生成的局部调节,因为它们在空间上与输入对齐(例如,它们的面部部分和背景在相同的位置)。

3.5.2 非空间调节技术

  非空间条件化。该技术被用于 ( s , c a m , ξ , c ) (s, cam, ξ, c) s,cam,ξ,c。在这种技术中,除了通过阴影参考间接使用外,直接使用 s , c a m s,cam s,cam也是有帮助的。作者使用基于自适应组归一化(AdaGN)(借鉴某个扩散模型中的方法),用于这些编码以及标准扩散模型训练中的时间嵌入γ(t),其中γ是一个正弦编码函数。给定输入特征图 h j ∈ R H j × W j × D j h_j ∈ R^{H_j×W_j×D_j} hjRHj×Wj×Dj,计算:
A d a G N j ( h j , s , c a m , c , t ) = k j ( t j s G N ( h j ) + t j b ) AdaGN_j(h_j,s,cam,c,t) = k_j(t_j^{s}GN(h_j)+t_j^{b}) AdaGNj(hj,s,cam,c,t)=kj(tjsGN(hj)+tjb)
其中: k j = M L P j 3 ( C o n c a t ( s , c a m , ζ , c ) ) ∈ R D j k_j=MLP_j^{3}(Concat(s,cam,\zeta,c))\in R^{D_j} kj=MLPj3(Concat(s,cam,ζ,c))RDj是一个基于SiLU激活函数的三层,MLP的输出, ( t i s , t j s ) (t_i^{s},t_j^{s}) tistjs是一个基于SiLU的单层输出,GN是一个标准的组归一化。作者使用自己的AdaGN来代替原始架构中的所有AdaGN,这些AdaGN出现在整个UNet中。

3.6 训练

  联合训练DDIM解码器(参数化为噪声预测网络 ϵ θ ϵ_θ ϵθ)和调制器网络 M ϕ ( l , s , c a m , b g ) M_ϕ(l, s, cam, bg) Mϕ(l,s,cam,bg),使用标准的扩散训练方法。这里作者将框图中的MLP视为DDIM的一部分。采用简化的、重新加权的变分下界版本,使用 ε \varepsilon ε参数化:
L s i m p l e = E t , x 0 , ε ∥   ε θ ( x t , t , M p h i , s , c a m , ζ , c ) − ε ∥ 2 2 L_{simple} = E_{t,x_0,\varepsilon}\|\ \varepsilon_{\theta}(x_t,t,M_{phi},s,cam,\zeta,c)- \varepsilon \|_2^2 Lsimple=Et,x0,ε εθ(xt,t,Mphi,s,cam,ζ,c)ε22

其中, ϵ θ \epsilon_{\theta} ϵθ 被训练用于预测给定图像 x 0 x_0 x0时加入的噪声 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I),在 ( α t ) x 0 + ( 1 − α t ) ε \sqrt(\alpha_t)x_0+\sqrt(1-\alpha_t)\varepsilon ( αt)x0+( 1αt)ε。我们定义 α t \alpha_t αt ∏ s = 1 t − β s \prod_{s=1}^{t} - \beta_s s=1tβs,其中 β t \beta_t βt是一个高斯扩散处理( q ( x t ∣ x t 1 ) = N ( ( 1 − β t ) x t − 1 , β t I ) q(x_t|x_{t_1})=\N(\sqrt(1-\beta_t)x_{t-1},\beta_tI) qxtxt1=N(( 1βt)xt1βtI))时间 t t t时的噪声级别。本文中作者使用了总步数1000步(更标准的扩散模型步数一致)。作者在训练的时候并没有将 x T x_T xT反转回 x 0 x_0 x0

3.7 重打光

  首先根据图像编码公式 f f f将输入图像编码为特征向量 f f f,然后然后从输入图像从 x 0 x_0 x0开始,通过在条件 f f f上的DDIM的确定性生成过程反向生成 x T = 1000 x_T=1000 xT=1000:
x t + 1 = α t + 1 g θ ( x t , t , f ) + 1 − α t + 1 ϵ θ ( x t , t , f ) x_{t+1} = \sqrt{\alpha_{t+1}} g_\theta (x_t , t, f) + \sqrt{1-\alpha_{t+1}} \epsilon_\theta (x_t, t, f) xt+1=αt+1 gθ(xt,t,f)+1αt+1 ϵθ(xt,t,f)
其中, g θ g_\theta gθ表示预测的 x 0 x_0 x0,它是从 ε θ \varepsilon_\theta εθ重新参数化而来的,并计算如下:

g θ ( x t , t , f ) = 1 α t ( x t − 1 − α t ( ε θ ( x t , t , f ) ) ) g_\theta(x_t,t,f) = \frac{1}{\sqrt{\alpha_t}}(x_t-\sqrt{1-\alpha_t}(\varepsilon_\theta(x_t,t,f))) gθ(xt,t,f)=αt 1(xt1αt (εθ(xt,t,f)))

  在获得 x T x_T xT后,将SH光照编码 l l l和投射阴影标志 c c c修改为目标 l ′ l^{\prime} l c ′ c^{\prime} c,这些可以手动设置或通过使用 DECA 的投射阴影估算器从参考光照图像中推断出来。然后,使用方程 x t + 1 x_{t+1} xt+1的反向过程从 x T x_T xT开始解码修改后的以生成最终输出。从获取 x T x_T xT的反向过程是再现输入图像高频细节的关键。如 DiffAE所示,DDIM 将在噪声图中编码任何未被条件特征向量 f f f捕获的信息。这些信息包括高频细节,如头发纹理或皮肤纹理。
  为了应对图像的背景过亮或者过暗的问题,作者对DDIM进行了改进,通过计算 DDIM 生成逆向过程 ( x 0 → x T ) (x0→xT) x0xT中每个 x t x_t xt和从逆向噪声 x T x_T xT自我解码得到的 x t x_t xt之间的均值像素差异来缓解这个问题。

4 实验

  • 训练数据集:Multi-PIE
  • 评估指标:DSSIMLPIPSMSE

4.1 定量比较

在这里插入图片描述

以上就是对本篇论文的解读,如有任何问题欢迎留言,批评指正!

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 07:40:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 07:40:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 07:40:04       58 阅读
  4. Python语言-面向对象

    2024-07-14 07:40:04       69 阅读

热门阅读

  1. ubuntu 物理内存爆炸而不使用虚拟内存的问题

    2024-07-14 07:40:04       20 阅读
  2. Unity宏和编辑器

    2024-07-14 07:40:04       21 阅读
  3. (C++栈与队列02) 栈的应用 单调队列

    2024-07-14 07:40:04       27 阅读
  4. 基于物联网的智慧校园建设与发展

    2024-07-14 07:40:04       32 阅读
  5. DNS是什么

    2024-07-14 07:40:04       21 阅读
  6. Bug及优化

    2024-07-14 07:40:04       19 阅读
  7. systemverilog的关联数组

    2024-07-14 07:40:04       27 阅读
  8. 最新得物data参数加密分析与响应数据解密

    2024-07-14 07:40:04       19 阅读
  9. JVM OutOfMemoryError异常模拟

    2024-07-14 07:40:04       16 阅读
  10. 2024.7.13刷题记录-牛客小白月赛98(未完)

    2024-07-14 07:40:04       22 阅读