基于学习的压缩和可编辑光场表示
该论文完成了光场数据的压缩表示,使用自编码器的方法将光场数据压缩为一个深度图和一个中央视觉图,并且支持编辑之后的中央视觉图和原深度图进行光场重建。
1. 简介
所谓光场,即记录光线位置和方向的数据结构,这种数据表示方式经历了很大的变化历程,相关的介绍中 这个介绍最为清晰和全面。 具体到本文,本文使用的光场获取方式为相机矩阵的方式,也是当前学术界较常用的方式,分析时本文采用横截面的表示方式。IO和分析的表示类似于
本文对于这种数据结构进行了自编码器的学习,综合考虑解码后与原图的结构差异,编码的中间层中央视觉图部分的RGB相似度,编辑后的中央视觉图的重建程度,完成了一种支持编辑的光场重建。这项工作的压缩部分解决了光场数据结构较大的问题,可编辑重建部分解决了二维图像处理到三维图像处理的迁移问题,总体来说意义重大。目前本文发布于 arxiv,也许在不久之后会登上SIGGRAPH。
2. 相关工作
-
光场重建相关
以往的光场重建工作主要集中于:①从稀疏样本合成密集光场。②通过光场估计视差。③对光场合成的深度学习方法——该方法可以估计扭曲的视差,并更细致地描绘颜色。④通过单张照片合成光场。⑤多平面图像表示光场。
~~~~ 这些工作尽管能够解决部分问题,但仍有局限,如前几个工作会出现某些伪影、重影。最后一类工作引出一个新的问题——如何通过编辑这种多平面图象进行光场编辑。
~~~~ 我认为本文的工作在某种程度上重复了④的工作内容,类似于AE和GAN之间的联系。在完成④的基础上,本文解决了⑤引出的可编辑性问题——通过分离特征和视图的方法。 -
光场编辑相关
~~~~ 以往的这些工作集中于:①目标重定位。②目标变形。③目标补充。④将稀疏编辑传播至全光场。⑤将中心视图分解为不同深度的图层,通过图层进行光场编辑。
~~~~ 上述工作中④,⑤两个工作相比而言较为接近本文工作,因此没有给出①②③的原文链接,尤其是④,④最关键的难度在于进行光场编辑的一致性传播,与本文想法接近。有较强的借鉴意义。
3. 本文的工作
~~~~
总体来说,本文能够对一个给定的4D光场,将其表示为一个元通道在没有限制元通道的视觉形态的情况下,为什么它长得这么像一个灰度图?
和一个RGB图(视觉通道),这实现了4D光场数据的压缩,另一方面,针对视觉通道的编辑可以通过和元通道的结合重建光场,并一致性地传播到新的光场之中。
本文设计的网络结构:
- 问题描述
~~~~ 输入的4D光场视图即为 M ∗ N M*N M∗N张RGB图像,我们描述为 L = { I i } i = 1 M ∗ N L = \{I_i\}_{i=1}^{M*N} L={Ii}i=1M∗N,对于这个光场 L L L, L ( L( L(u,v ) ) )也就表示了某一个像素,其中u表示图片,v表示像素,也就是说 I i I_i Ii即为 L ( L( L(u i ) _i) i)。
~~~~ 在整个自编码器的设计过程之中,我们记编码器为 E E E,解码器为 D D D。
~~~~ 一方面,对于输入的光场 L L L,我们通过编码器生成一个元通道 Z Z Z,即 Z = E ( L ) Z = E(L) Z=E(L),有 s i z e o f ( Z ) = s i z e o f ( I i ) sizeof(Z) = sizeof(I_i) sizeof(Z)=sizeof(Ii)。另一方面,对于传入的光场数据,我们获取中央视图 I c I_c IcIc具体是如何得到的呢?是L(x,0)么?
。对 I c I_c Ic进行编辑之后我们获得 I ~ c \widetilde{I}_c I c,接着我们把两者结合,通过解码网络获得编辑后光场 L ~ \widetilde L L ,即 L ~ = D ( Z , I ~ c ) \widetilde L = D(Z, \widetilde I _c) L =D(Z,I c)。 - 表示方式的选取
~~~~ 本节实际上主要阐述了为什么要选取元通道和视觉通道。
~~~~ 中心视图 I c I_c Ic 捕获了光场的参考视觉内容,因此自编码器只需要学习表示元通道即可。元通道作为视觉通道互补的部分,意味着包括深度、视差、纹理、遮挡等等信息被隐式地编码到元通道之中。事实上本文做了消融实验,使用深度图代替了元通道,取得了较差的结果。
中央视觉图、元通道、深度图:
~~~~ 关于元通道的个数和是否必须存在的问题,本文解释道,当图片数目(角度分辨率)和图片大小(空间分辨率)增加的时候,单个元通道可能无法编码全部信息,这时候我们可以增加元通道的数目。至于和视觉图分离的原因,主要是考虑到光场的重建过程中对于编辑的视觉通道,我们需要原光场的结构,如果将元通道编码到视觉通道之中形成 I z I^z Iz,那么编辑的过程就会破坏结构,光场不再能够重建。
~~~~ 事实上,如果我们不考虑光场的重建问题,我们是可以将视觉通道和元通道合二为一的,此时我们只考虑数据压缩和光场生成的任务,该方法仍旧是一个很好的想法。这也将作为我的毕业设计的主要思想。 - 编辑敏感的光场重建(解码器网络实现)
~~~~ 本文将解码器的解释信息的方式分为两类:视图间视差图,以及其他信息(遮挡图和非朗博效应)
本文设计的解码器网络:
~~~~ 在图中我们可以看到,解码器由三个不同的网络共同构成。 S e p N e t , D i s p N e t , F u s i o n N e t SepNet, DispNet, FusionNet SepNet,DispNet,FusionNet 三个网络各自有着对应的任务。同时也有着一些方法,如 w a r p i n g warping warping,以及涉及到 O c c l u s i o n _ m a p , D i s p a r i t y _ m a p , F e a t u r e _ m a p Occlusion\_map, Disparity\_map,Feature\_map Occlusion_map,Disparity_map,Feature_map遮挡图是通过特征图得到的么?是的话为什么可以直接得到,是物理方法么?
等的获取,接下来我们将一一介绍。
S e p N e t ~~~~ SepNet SepNet:该网络的作用是特征分离,具体地说,这个模块将元通道 Z Z Z 分解为一系列特征映射 { F i } i = 1 M ∗ N \{F_i\}_{i=1}^{M*N} {Fi}i=1M∗N,其中每个 F i F_i Fi 包含视图 i i i 的特征信息,和视觉通道独立,可以和视觉通道结合重建视图 i i i。
D i s p N e t ~~~~ DispNet DispNet:该网络的作用是视差恢复。具体来说,从特征图 F i F_i Fi 中提取出 I i I_i Ii 视差图 D ( D( D(u i ) _i) i)。接着我们如果给出某一个光场视图 L ( L( L(u j ) _j) j),我们可以得到合成视图(即warped方法) L ˉ ( u i ) \bar{L}(u_i) Lˉ(ui):
L ˉ ( u i , x ) = L ( u j , x + ( u j − u i ) ∗ D ( u i , x ) ) \bar{L}(u_i,x)=L(u_j, x+(u_j-u_i)*D(u_i,x)) Lˉ(ui,x)=L(uj,x+(uj−ui)∗D(ui,x))
~~~~ 因此,我们可以明确认识到,对于任何一个视差图 D ( u i ) D(u_i) D(ui),我们将其与 I c I_c Ic进行合成得到 L ˉ ( u i ) \bar L(u_i) Lˉ(ui)。此时我们得到的图理论上和 L ^ ( u i ) \widehat L(u_i) L (ui)一致(其中 L ^ = L \widehat L=L L =L,作为重建光场的目标),但实际上由于遮挡和非朗博效应总会出现不同。为了解决这个问题,我们需要另一个网络修复他,但是网络的执行时间可以由 D ( u i ) D(u_i) D(ui) 的遮挡情况自适应地确定,为了度量遮挡程度,我们记 O ( u i , x ) = ∣ ∣ D ( u i , x ) − D ( u c , x + ( u c − u i ) ∗ D ( u i , x ) ) ∣ ∣ 1 O(u_i, x) = ||D(u_i,x)-D(u_c,x+(u_c-u_i)*D(u_i,x))||_1 O(ui,x)=∣∣D(ui,x)−D(uc,x+(uc−ui)∗D(ui,x))∣∣1,其中 D ( u c ) D(u_c) D(uc) 表示 I c I_c Ic 的视差图。并且有 O ( u i , x ) O(u_i,x) O(ui,x)越大,接下来的网络需要的时间就越长。
F u s i o n N e t ~~~~ FusionNet FusionNet:该网络的目的是重建遮挡细节和非朗博效应,这个网络通过大规模的训练达到将视觉图和遮挡图变回光场图像的目的。大规模的训练遇到的关键问题是数据问题,为了解决这个问题,本文提出了一个算子 G G G,算子 G G G 通过平均采样的方式更改光场,对于原本的IO组 { I ~ c , L ^ } \{\widetilde I_c,\widehat L\} {I c,L },我们更改为 { G ( I c ) , G ( L ) } \{G( I_c),G(L)\} {G(Ic),G(L)},从而得到大规模数据。
- 损失函数
~~~~ 网络通过最小化损失函数联合训练编码和解码子网络,本文的损失函数分为三个部分,扭曲一致性损失(也就是 w a r p e d warped warped模块) ζ W \zeta_W ζW,视差正则损失 ζ D \zeta_D ζD ,重建损失 ζ R \zeta_R ζR。故而总损失为:
ζ = ω 1 ζ W + ω 2 ζ D + ω 3 ζ R \zeta = \omega_1\zeta_W + \omega_2\zeta_D + \omega_3\zeta_R ζ=ω1ζW+ω2ζD+ω3ζR
~~~~ 在这里,我们设定 ω 1 = 0.5 , ω 2 = 0.01 , ω 3 = 1.0 \omega_1 = 0.5,\omega_2 = 0.01, \omega_3 = 1.0 ω1=0.5,ω2=0.01,ω3=1.0。接下来我们将逐一介绍三个损失。
ζ W ~~~~\zeta_W ζW:扭曲一致性损失。该损失用来度量 w a r p e d warped warped之后的光场 L ˉ \bar L Lˉ 和中央视觉通道 I c I_c Ic之间的差别,使得视差能够更好地被还原。公式写作:
ζ W = E L i ∈ S { ∣ ∣ L ˉ i − L i ∣ ∣ 1 } \zeta_W = \Epsilon_{L_i \in S}\{||\bar L_i - L_i||_1\} ζW=ELi∈S{∣∣Lˉi−Li∣∣1} ~~~~~~~~warp是一个物理方法,这个方法由于不考虑遮挡理论上本身就和预期结果不同,如果使用这种损失有没有可能会让视差的生成网络过拟合呢?(也就是视差的生成网络不去生成视差,而是某种能和中央通道直接合成光场的图片【这并不是值得开心的,因为之后还要和遮挡图进行进一步的融合】)
~~~~ 其中, S S S 即为光场构成的数据集,这个损失即为所有光场的中央视觉通道与对应的 L ˉ i \bar L_i Lˉi的一阶范数。该损失限制了从 D i s p N e t DispNet DispNet中生成的视差图,使其更加接近于真实视差。
~~~~ 但是仅仅由这个损失进行限制仍然是不够的,由于这个损失并不能度量到没有纹理的区域的扭曲视图是否相近,这种失误将会造成遮挡部分无法进行一致性地传播,将会加大 F u s i o n N e t FusionNet FusionNet 的训练量。为了解决这个问题,我们引入正则损失 ζ D \zeta_D ζD,加强相邻视图的视差一致性。
ζ D = E L i ∈ S { ∣ ∣ D ( u i , x ) − D ( u i − 1 , x + D ( u i , x ) ) ∣ ∣ 1 } \zeta_D = \Epsilon_{L_i \in S}\{||D(u_i,x)-D(u_i-1,x+D(u_i,x))||_1\} ζD=ELi∈S{∣∣D(ui,x)−D(ui−1,x+D(ui,x))∣∣1} ~~~~ 这个损失函数实际上限制了在预测后的光场中,相邻视图需要尽可能地一致,保证相邻视图之间的视差一致性。每个视图在某种程度上都会受到其他视图的影响和制约。
~~~~ 在最后,我们通过重建的光场和原本的光场相一致的限制构造重建损耗 ζ R \zeta_R ζR:
ζ R = E L i ∈ S { α ∣ ∣ L ~ i − L ^ i ∣ ∣ 1 + β ∣ ∣ S S I M ( L ~ i , L ^ i ) ∣ ∣ 1 } \zeta_R = \Epsilon_{L_i\in S}\{\alpha||\widetilde L_i-\widehat L_i||_1+\beta||SSIM(\widetilde L_i, \widehat L_i)||_1\} ζR=ELi∈S{α∣∣L i−L i∣∣1+β∣∣SSIM(L i,L i)∣∣1} ~~~~ 实验中, S S I M ( L 1 , L 2 ) SSIM(L_1,L_2) SSIM(L1,L2)表示两个光场的所有视角的平均 S S I M SSIM SSIM值,计算见此。并且预设 α = 1.0 , β = 0.02 \alpha=1.0,\beta=0.02 α=1.0,β=0.02。选取 S S I M SSIM SSIM度量将在模糊区域获得更精确的细节。
4. 实现的细节
- 数据集
~~~~ 本文的数据集来自两个公开数据集,斯坦福和MIT的相机光场数据,总共收集了406个光场,每个光场有14*14个角度和376*541个像素。在训练的过程中,随机选取326个作为训练集,剩余80个作为测试集,对每个光场裁取7*7个角度以及每个角度128*128个像素组成的照片。对训练集进行了数据增强,即水平翻转或者旋转。通过数据增强,最终得到14447个光场样本进行训练。 - 训练
~~~~ 训练时编码子网和解码子网是联合训练的,但是这种训练方式较慢,本文提出将这个训练分为两个部分。首先是进行除了 F u s i o n N e t FusionNet FusionNet 之外的网络进行训练,这个阶段迭代10000次,这个训练的目的是加速以及预热 D i s p N e t DispNet DispNet 。在第二阶段,包括 F u s i o n N e t FusionNet FusionNet 在内 的所有网络进行 50000 次训练。训练中使用Adam优化器,第一阶段学习率为0.0002,第二阶段学习率下降为第一阶段学习率的1%。
~~~~ 另外,本文采用pytorch实现了方法,这个实验在两台NVDIA GeForce GTX 1080 Ti 上运行了48个小时。完成的模型对于7*7的光场输入编码元通道约需要0.04秒,重建光场约需要2秒。
~~~~ 源代码和数据尚未开源,等待本文正式发布将会开源代码和数据。
5. 实验的结果
~~~~
我们可以看到,无论是颜色编辑、颜色转换、阴影去除、风格转换、对比增强等针对2D图片的编辑方法,在本模型的支持下均完成了对于重建光场的一致性传播。