Single Image Reflection Separation with Perceptual Losses(基于感知损失的单张图片反射分离)

    xiaoxiao2022-07-05  151

    文章目录

    1. 摘要2. 介绍3. 相关工作3.1 Multiple-image methods3.2 Single-image methods3.3 基准数据集 4. 概述5. 训练5.1 Feature loss5.2 Adversarial loss5.3 Exclusion loss5.4 Implement 6. 数据集6.1 合成的数据集6.2 真实的数据集 7. 实验

    1. 摘要

    文章提出了一种端到端的全卷积网络进行单张图片的反射分离,其中卷积网络的loss函数不仅考虑了低层的信息,还涵盖了高层的图片信息。具体来说,loss函数包括两个感知的loss(perceptual losses):

    一个来自perception network的feature loss一个adversarial loss

    不仅如此,还提出了一个exclusion loss,这个loss可以起到像素级别的反射分离。 其他的贡献:制作了一个数据集,一类为现实中带反光的图片,另一类为同一场景下不带反光的图片。 我们的模型在PSNR,SSIM以及perceptual user study的指标中,都超过了state-of-the-art.

    2. 介绍

    P1:反光在日常生活中很常见。因此从一张image中分离出reflection层和transmission层,也称为the reflection separation problem,是一个比较热门的领域。

    P2:假如一张带反射的图片作为输入,即 I = R m × n × 3 I = R^{m \times n \times 3} I=Rm×n×3 然后T代表transmission layer, R代表reflection layer,这样的话就有 I = T + R I = T + R I=T+R 也就是一张照片等于transmission layer 加上 reflection layer。 我们的目的是想在给定 I I I,将 T T T求出来,也就是给出反光照片,去除反光得到不带反光的照片。但是这个一个不可解问题,如果没有给出额外的限制条件或先决条件的话。

    P3:因为分离反光问题是病态问题(ill-posed)的,因此之前人们解决它都需要额外的输入图片和精心设置的先决条件。 比如使用很多张照片和用户指导,但是显示中没有那么多照片,用户指导也不可靠。近来研究者提出使用单张图片进行反射消除,但依靠精心设计的先决条件,比如ghose cues和相对平滑的反射,这样泛化效果并不好。前段时间,CEILNet用了DNN训练了一个模型进行反光消除,但是只学到了像颜色、边缘这样的低层信息,学不到高层的信息。Low-level信息对于反光消除是远远不够的,因为颜色是随机的。

    P4:提出了独特的loss,内容和综述差不多。perceptual losses有两个,这两个分别是对图片信息的不同level进行处理的:feature loss主要是来自visual perceptual network,adversarial loss主要是去修正输出的transmission layer的。 而exclusion loss主要是为了在梯度上对独立的层进行分离。

    3. 相关工作

    3.1 Multiple-image methods

    说的就是输入多张图片,然后再输出消除反光的照片。

    3.2 Single-image methods

    一般来说用单张图片作为输入都要有预先定义的先验条件。比较常用的有两种:

    用图片的梯度稀疏性(gradient sparsity)来找到最小的边缘和角点,然后进行层的分离。gradient sparsity一般都有用户的协助。这类方法是基于low-level 的图片信息,所以面对high-level时就无能为力了。另一个的假设(先验条件)是反射层总是失焦并且比较平滑(out of focus and appears smooth)。虽然反射层相对平滑是合理的,但是如果反射层对比度比较高的话,这就不可行了。

    最近提出的Cascaded Edge and Image Learning Network(CEILNet)[级联边缘和图像学习网络],把消除反光当成边缘简化任务,并且学习一个中间边缘图引导层分离。CEILNet单纯学习low-level的loss,因为loss仅仅对比颜色空间和梯度域的不同。我们和CEILNet主要的不同是后者在训练时没有充分利用perceptual的信息。

    ps:CEILNet的github地址,有数据集:https://github.com/fqnchina/CEILNet

    3.3 基准数据集

    这个数据集有目前已经开源了:https://sir2data.github.io/。 感觉不错呀这个数据集。

    4. 概述

    P1:给一张带反光的照片: I ∈ [ 0 , 1 ] m × n × 3 I \in [0,1]^{m \times n \times 3} I[0,1]m×n×3 (图像在0到1,说明要做归一化处理) 然后我们的方法将 I I I分解为transmission layer f T ( I ; θ ) f_T(I;\theta) fT(I;θ) 和 reflection layer f R ( I ; θ ) f_R(I; \theta) fR(I;θ),其中 θ \theta θ是网络的权重。 网络 f f f的训练数据为 D = { ( I , T , R ) } D=\{(I,T,R)\} D={(I,T,R)},其中 I I I是输入图片, T T T是输入图片 I I I的transmission layer, R R R是输入图片 I I I的reflection layer。 loss函数包括三部分:

    feature loss: L f e a t L_{feat} Lfeat,比较图片的featur spaceadversarial loss: L a d v L_{adv} Ladv,对真实图片的修复exclusion loss: L e x c l L_{excl} Lexcl,在梯度域中将transmission layer和reflection layer进行分离。

    总的loss如下: L ( θ ) = w 1 L f e a t ( θ ) + w 2 L a d v ( θ ) + w 3 L e x c l ( θ ) L(\theta) = w_1L_{feat}(\theta) + w_2L_{adv}(\theta) + w_3L_{excl}(\theta) L(θ)=w1Lfeat(θ)+w2Ladv(θ)+w3Lexcl(θ) 其中 w 1 = 0.1 , w 2 = 0.01 , w 3 = 1 w_1=0.1, w_2=0.01, w_3=1 w1=0.1,w2=0.01,w3=1

    P2:先从VGG-19中提取conv1_2, conv2_2, conv3_2, conv4_2, conv5_2的特征,然后和输入图片拼接起来作为模型 f f f的输入。文章里说这些高层的feature一共有1472个dimensions,具体得看代码才知道。好奇的是为什么总是取_2层特征,_3或者其他效果不好吗?

    P3:讲模型 f f f的构造,和Fast Image Processing with Fully-Convolutional Networks和Multi-Scale Context Aggregation by Dilated Convolutions的网络结构类似。 输入的图片大小为513x513,然后 f f f的第一层是1x1的卷积,目的是将输入的维度 (1472+3) 降到64。接下来的8层都是3x3的dilated convolutions,dilation的比率从1到128,所有的中间层的channel都是64。在最后一层,用线性变换在RGB颜色空间上合成2张图片。

    P4:和其他方法的对比。方法对比的数据集为CEILNet的数据集,但这个数据集的带反光的图片是合成的;还有就是作者制作的现实世界的数据集。

    5. 训练

    5.1 Feature loss

    semantic reasoning(语义推理)有利于消除反光,而feature loss结合了low和high level的信息,很适合这个任务。文中还说了别的任务也应用了这个loss: Photographic Image Synthesis with Cascaded Refinement Networks Image style transfer using convolutional neural networks Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network Perceptual Losses for Real-Time Style Transfer and Super-Resolution

    计算feature loss的方法是: 将模型预测出来的transmission layer f T ( I ; θ ) f_T(I;\theta) fT(I;θ) 和ground truth T T T分别喂进VGG-19网络 ϕ \phi ϕ中,然后计算他们的 L 1 L^1 L1 距离。具体公式如下: L f e a t ( θ ) = ∑ ( I , T ) ∈ D ∑ l λ l ∣ ∣ ϕ l ( T ) − ϕ l ( f T ( I ; θ ) ) ∣ ∣ 1 L_{feat}(\theta) = \sum_{(I,T) \in D} \sum_{l} \lambda_l ||\phi_l(T) -\phi_l(f_T(I;\theta)) ||_1 Lfeat(θ)=(I,T)Dlλlϕl(T)ϕl(fT(I;θ))1 其中 ϕ l \phi_l ϕl代表VGG-19中的第 l l l层。 λ l {\lambda_l} λl则是平衡因子,是个超参数。VGG-19的层像之前说的,用conv1_2, conv2_2, conv3_2, conv4_2, conv5_2。

    5.2 Adversarial loss

    一言以蔽之,这个loss用处就是当reflection层和transmission层分离之后,transmission层图片会变得颜色奇怪啥的,反正就是不真实,所以用这个来进行微调。文章采用conditional GAN来进行合成,generator为 f T ( I ; θ ) f_T(I;\theta) fT(I;θ)。鉴别器(discriminator)记为 D D D,有4层64个channels(小型的gan),鉴别器的作用就是尽可能分辨出真实的transmission图片和经过模型输出的 f T ( I ; θ ) f_T(I;\theta) fT(I;θ)。 鉴别器 D D D的loss为: ∑ ( I , T ) ∈ D l o g D ( I , f T ( I ; θ ) ) − l o g D ( I , T ) \sum_{(I,T) \in D} logD(I,f_T(I;\theta)) - logD(I,T) (I,T)DlogD(I,fT(I;θ))logD(I,T) D ( I , x ) D(I,x) D(I,x)的输出是 x x x有多接近transmission图片的概率,越大就越接近。因为 D ( I , T ) D(I,T) D(I,T)概率等于1,所以后面一项等于0。 最终adversarial loss如下: L a d v ( θ ) = ∑ I ∈ D − l o g D ( I , f T ( I ; θ ) ) L_{adv}(\theta) = \sum_{I \in D} -logD(I, f_T(I;\theta)) Ladv(θ)=IDlogD(I,fT(I;θ))

    具体的有关gan的loss可以看这篇:Generative Adversarial Nets

    5.3 Exclusion loss

    这个loss是为了在梯度域上更好地将reflection层和transmission分离开来。经过实验分析,我们观察到在transmission层和reflection层上的边缘很大可能不会重叠。也就是说,在 I I I上出现的边缘信息,有可能是transmission 层的,也有可能是reflection层的,但不是两者结合的。因此就可以在梯度域上减少transmission和reflection之间的相关性。 exlusion loss的公式如下: L e x c l ( θ ) = ∑ I ∈ D ∑ n = 1 N ∣ ∣ ψ ( f T n ( I ; θ ) , f R n ( I ; θ ) ∣ ∣ F L_{excl}(\theta) = \sum_{I \in D} \sum_{n=1}^N || \psi(f_T^n(I;\theta), f_R^n(I;\theta)||_F Lexcl(θ)=IDn=1Nψ(fTn(I;θ),fRn(I;θ)F ψ ( T , R ) = t a n h ( λ T ∣ ∇ T ∣ ) ⊙ t a n h ( λ R ∣ ∇ R ∣ ) \psi(T,R) = tanh(\lambda_T|\nabla T|) \odot tanh(\lambda_R|\nabla R| ) ψ(T,R)=tanh(λTT)tanh(λRR) 其中 λ T \lambda_T λT λ R \lambda_R λR是归一化系数,这两个参数很重要。(还给出了是多少,懒得打公式了…)

    5.4 Implement

    说是实现,又加了个loss。因为输入有ground truth的reflection层,所以可以更进一步限制模型生成reflection层的效果。文章在颜色空间上用L1 loss进行限制: L R ( θ ) = ∑ ( I , R ) ∈ D ∣ ∣ f R ( I ; θ ) − R ∣ ∣ 1 L_R(\theta) = \sum_{(I,R) \in D} ||f_R(I;\theta) - R||_1 LR(θ)=(I,R)DfR(I;θ)R1

    当训练的时候,我们是将合成的数据和真实的数据训练的,通过优化减少 ( L + L R ) (L+L_R) (L+LR)的值;但是,要注意的是,当训练真实数据的时候,不用 L R L_R LR,因为真实数据中R难以准确获取。当图片过曝时, I = T + R I = T + R I=T+R就不成立了。 对于训练数据,我们用了5000张合成图片,并且从90张真实数据中,在256和480像素之间随机取像素值,得到500张照片;还有就是通过随机resize图片,但是保持长宽比(aspect ratio).

    batch size 为1,训练250个epochs用Adam算法优化,Learning rate固定为 1 0 − 4 10^{-4} 104

    6. 数据集

    6.1 合成的数据集

    从Flickr从随机取5000张图片pairs,一张室外的一张室内的,这两张随机一张作为transmission,另一张作为reflection。通过高斯平滑核,核的大小从3到17随机选择,然后对reflection layer进行平滑。 然后对两张图片进行合成,合成方法我还没看懂,他借鉴了这篇论文的方法: A Generic Deep Architecture for Single Image Reflection Removal and Image Smoothing

    6.2 真实的数据集

    这篇论文发表前,还没有公开的数据集。所以他们制作了110份真实数据集的pairs:带反光的图片和对应不放光(即ground truth transmission layer)的图片。具体制作细节略。 这110份数据,90份经过data augmentation得到500张去训练,余下的20份作为验证集。

    7. 实验

    最新回复(0)