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

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函数包括三部分:

  1. feature loss L f e a t L_{feat} Lfeat,比较图片的featur space
  2. adversarial loss L a d v L_{adv} Ladv,对真实图片的修复
  3. 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 NetworksMulti-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. 实验

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zedjay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值