【paper reading】InverseRenderNet: Learning single image inverse rendering
这篇论文和之前paper reading中的SfSNet那篇有相似之处,可以对比观看。
1.简介
和SfSNet一样,InverseRenderNet也是输入一张真实世界中拍摄的RGB图像,在朗伯假设下,从图像中分解出形状,反照率,然后计算出光照。但与之前的那篇SfSNet不同,SfSNet是用合成数据以及有伪监督标签的真实数据进行训练,而InverseRenderNet全部使用真实拍摄的图像作为训练数据,并且利用MVS作为监督,这是这篇工作的一个创新点。
而本文的另一个创新点就是构建了一个光照的统计模型。之前在SfSNet中提起过,光照是用二阶球面谐波函数的系数表示成一个
3
×
9
=
27
3\times9=27
3×9=27个参数的向量,为了更加统一,论文里将向量的模设置为1,但是这27个参数不是所有的排列组合都有意义,即作者认为现实户外的光照也应该符合一定的统计规律。因此他在户外进行采样,拍摄了79个场景下金属球的HDR图像,简化成之前说的二阶球面谐波函数表示。但是在拍摄的时候这79次拍摄的角度肯定不能覆盖数据集中所有图像的拍摄角度。因此,作者将这79套数据进行了人为扩充。对每个场景都计算出了一套光照的二阶球谐函数系数,然后绕着垂直轴把这些系数以10度为间隔旋转一整圈,就能生成36套新的数据,同样相机镜头俯仰以及左右倾斜从-30度到30度,也以10度为间隔,这样之前的79套数据就扩展成了
79
×
36
×
49
=
139356
79\times36\times49=139356
79×36×49=139356
套光照模型数据。然后作者就以这些数据建立了一个自然光照的高斯模型:
v
e
c
(
L
)
=
P
d
i
a
g
(
σ
1
,
.
.
.
,
σ
D
)
α
+
v
e
c
(
L
‾
)
\mathrm {vec}(\mathbf L)=\mathbf P\mathrm{diag}(\sigma_1,...,\sigma_D)\bm{\alpha}+\mathrm {vec}(\overline \mathbf L)
vec(L)=Pdiag(σ1,...,σD)α+vec(L)
这个 L ‾ \overline \mathbf L L就是均值, P \mathbf P P是主成分,对角矩阵 d i a g ( σ 1 , . . . , σ D ) \mathrm{diag}(\sigma_1,...,\sigma_D) diag(σ1,...,σD)是方差,每个预测出的光照参数都有自己的 α \bm{\alpha} α值, α \bm{\alpha} α模越小就越接近均值,即越符合统计模型的描述。
2.InverseRenderNet
首先可以看到这些输入的数据是MegaDepth dataset,是从互联网上下载的不带GT的真实数据,但是与之前做人脸的SfSNet不同,SfSNet使用的训练图像每一张之间都没有关联,而在InverseRenderNet里选取的都是同一物体的照片,人工裁剪成固定大小的图像块,当然这些图像块必须要有重叠的部分。在数据集中,已经对这些图像进行MVS,得到每个视角下的深度以及每张图片对应的相机位姿,这些信息在后面就作为监督信息。
首先,来看神经网络的结构,这些不同视角下拍摄的重叠图像经过全卷积的编码器,分成两个解码器,分别来预测反照率和法向,当然,编码解码器有跳跃连接。然后通过反照率和法向求解光照,因为是朗伯假设,像素值I就是反照率图A点乘光照L与法向量N,即
I
=
A
⊙
L
B
(
N
)
\mathbf {I=\mathbf A\odot LB(N)}
I=A⊙LB(N)。B是二阶球面谐波函数,每个像素值都能建立一个方程,对于27维的光照来说,这是一个超定方程,直接通过最小二乘法就能解出来。
网络的Loss比较复杂,总共有6个部分,下面会一个一个解释。
l
=
w
1
l
a
p
p
e
a
r
a
n
c
e
+
w
2
l
N
M
+
w
3
l
a
l
b
e
d
o
+
w
4
l
c
r
o
s
s
−
r
e
n
d
+
w
5
l
a
l
b
e
d
o
−
s
m
o
o
t
h
+
w
6
l
a
l
b
e
d
o
−
p
s
e
u
d
o
S
u
p
l = w_1l_{appearance}+w_2l_{NM}+w_3l_{albedo}+w_4l_{cross-rend}+w_5l_{albedo-smooth}+w_6l_{albedo-pseudoSup}
l=w1lappearance+w2lNM+w3lalbedo+w4lcross−rend+w5lalbedo−smooth+w6lalbedo−pseudoSup
2.1 Appearance Loss
l
a
p
p
e
a
r
a
n
c
e
l_{appearance}
lappearance即appearance loss,很容易理解,就是之前讲的重构误差:使用预测出的反照率,法向以及光照重新生成一张图象,appearance loss就是重构图像
i
p
r
e
d
\mathbf i_{\mathrm {pred}}
ipred与输入图像
i
o
b
s
\mathbf i_{\mathrm {obs}}
iobs的差异,而且为了更符合人眼的感官是在LAB空间下计算的,即
l
a
p
p
e
a
r
a
n
c
e
=
∥
L
A
B
(
i
p
r
e
d
)
−
L
A
B
(
i
o
b
s
)
∥
l_{appearance}=\lVert \mathbf {LAB}(\mathbf i_{\mathrm {pred}})-\mathbf {LAB}(\mathbf i_{\mathrm {obs}})\rVert
lappearance=∥LAB(ipred)−LAB(iobs)∥
2.2 Normal Map Loss
Normal Map loss 就是预测的法向
n
e
s
t
\mathbf n_{\mathrm {est}}
nest与多视重建的法向
n
g
u
i
d
e
\mathbf n_{\mathrm {guide}}
nguide之间的损失。
l
N
M
=
a
r
c
c
o
s
(
n
g
u
i
d
e
⋅
n
e
s
t
)
l_{NM}=arccos(\mathbf n_{\mathrm {guide}}\cdot\mathbf n_{\mathrm {est}})
lNM=arccos(nguide⋅nest)
2.3 Albedo Loss
albedo loss是反照率一致性损失,因为输入的图像中有重叠部分,并且重叠部分像素之间的对应关系在MVS中能够找到,因此这些重叠部分的反照率在不同图像中应该保持一致,有差异就要施加惩罚。
l
a
l
b
e
d
o
=
∥
L
A
B
(
A
i
)
−
s
L
A
B
(
A
j
)
∥
f
r
o
2
l_{albedo}=\lVert\mathbf {LAB}(\mathbf {A}_i)-s\mathbf {LAB}(\mathbf {A}_j)\rVert^2_{\mathrm {fro}}
lalbedo=∥LAB(Ai)−sLAB(Aj)∥fro2这个损失只针对重叠像素,同样是在LAB空间中进行的。这里注意有一个尺度参数s。这是因为在朗伯模型的方程中有尺度的模糊性,之前提到的光照向量强制模为1就是为了强制光照尺度一致,这里的反照率在不同的图像中可能会有不同的尺度,因此s是变化的,使得反照率一致性损失最小,就是图4中的Scaling步骤中的参数。(这里的下标
f
r
o
_{\mathrm {fro}}
fro不知道是什么意思)
2.4 Cross-rendering Loss
交叉渲染损失 l c r o s s − r e n d l_{cross-rend} lcross−rend,就是利用之前说的不同图像的对应关系,从一幅图的反照率中生成不同视角下另一幅图的反照率,然后利用生成的这副反照率图以及预测的法向和光照渲染出一张图象。交叉渲染损失就是这张图象与对应原始图像的差异。同样,只针对重叠的区域,并且类似Appearance Loss在LAB空间中进行。
2.5 Albedo-smooth Loss
反照率平滑损失 l a l b e d o − s m o o t h l_{albedo-smooth} lalbedo−smooth很好理解。作者认为物体上反照率是平滑的,因此对相邻像素的反照率之间的差异有惩罚,具体实施但是这个惩罚会以色度为基础有一个权重。比如输入图像中,有一个像素是浅蓝色的,如果它右边的像素是深蓝色的,虽然RGB值有很大变化,但色度没有什么改变,因此有理由相信这种差异是由于阴影造成的,本身的颜色其实是一样的,因此在预测的反照率上这两个像素的反照率应该接近,否则会施加一个大权重的惩罚。假设它下面相邻的像素是红色的,和它的色度相差很大,那么这两个相邻像素之间反照率的平滑损失权重应该小一些。
2.6 Albedo Pseudo Supervision Loss
伪监督损失涉及到训练的过程。神经网络的训练有一个pre-training的过程。在预训练中,解码器生成的法向图是不起作用的,这里用MVS生成的法向图代替,这意味着表面法线预测的解码器仅从直接监督损失中学习,即它正在学习复制MVS法线。在这个初始阶段之后,我们切换到完全自我监督。因为作者认为pre-training之后的网络已经能够输出有意义的原始结果,为了防止最终结果相差过远,最终训练出的反照率结果应该与预训练的反照率相近,否则施加一个伪监督损失 l a l b e d o − p s e u d o S u p l_{albedo-pseudoSup} lalbedo−pseudoSup。
3. 实验结果
首先是在Intrinsic Images in the Wild (IIW)数据集上的结果。这个数据集的GT是通过基于CRF的图像分解方法生成的,而GT只包含反照率和shading,没有把shading进一步分解成光照和法向。
因为这个数据集大部分都是室内图像,所以它的光照模型和论文中的肯定不太相符,而且数据集中的图像都是一张张独立的,因此也没有办法进行fine-tune。
尽管存在这些限制,可以看到最后的结果也是不错的。这里的WHDR百分比是加权后的预测与GT不符合情况的百分比,越低越好。
这些是在IIW上的结果对比。第四列和最后一列是论文方法分解出的反照率和shading。反照率的进步不太明显,但是在shading中可以看到,论文方法正确的捕捉到了灯光的颜色,不像其他方法一样,简单的认为是白色光。
后面的实验是在Megadepth dataset上进行的,就是作者训练用的数据集。这里将MVS生成的形状作为法向的GT,然后使用另一种多视图像分解方法产生的反照率作为反照率的GT。相较于其他方法而言,反照率以及法向的预测都是最好的。
这里还有一些图像分解的结果对比,天空的话在之前就已经使用一些图像分割方法去除了。分解出的结果也是几种方法中最好的。