PSD: Principled Synthetic-to-Real Dehazing Guided by Physical Priors介绍

PSD: Principled Synthetic-to-Real Dehazing Guided by Physical Priors

Introduction

首先介绍一下雾霾模型:

其中$J(x)$是原图,$I(x)$是观测的雾霾图像,$t(x)$是透射率,$A$是全局大气光。

​ 早期模型是基于物理先验的方法,然而这些方法鲁棒性很差,需要单独调参。随着深度学习的进入,许多方法开始依赖于CNN,效率和效果变得更快更好,但也有存在着一定的问题,比如真实数据集不够,只能利用合成数据集训练,而合成数据集训练出的模型在真实雾霾场景下的效果很一般。所以当下去雾模型的问题是如果将任务从生成雾霾图像数据集迁移到真实雾霾场景。在论文中,作者提出了一种PSD的方法帮助模型从合成数据集泛化到真实场景。

​ PSD包含两部分:监督式的预训练和无监督式微调,后面会具体描述这两个的操作。

​ 作者认为这篇文章的创新点/贡献如下:

  • 作者使用当下表现很好的去雾模型作为backbone并利用和合成数据来预训练backbone,真正的雾霾图像用于微调模型。
  • 结合了多种表现很好的物理先验指导微调,这也是PSD的核心。
  • 去雾效果SOTA

Proposed Method

Framework Overview

主要分为预训练和微调两部分:

  • 预训练

    利用当下的SOTA去雾模型来做backbone,因为这些SOTA模型可以在生成数据上获得极好的效果,并且可以提供雾霾图像的domain knowledge。

    通过把backbone修改成基于物理模型的网络,这样可以同时产生无雾霾图像$J$,投射图$t$,全局大气光$A$。修改如下图:

image-20210721221750651

​ 为了可以联合最优化这三者$J,t,A$,作者给出了一个reconstruction loss,这个loss指导着网络的输出符合雾天退化模型。

​ 注意:在这一部分我们只利用有标签的生成数据做训练,因此这部分预训练得到的模型是在生成数据域上的模型。

  • 微调

    ​ 用无标签的真实数据训练,这一部分是希望做到域自适应,从生成数据域转换道真实数据域上。作者认为无雾的图像总是遵守一些特定规律,也就是符合一些物理先验知识,同时它认为单独的先验物理知识并不总是准确的,作者提出了一种包含多个不同先验知识的prior loss committee来指导训练无标签的真实数据。

    ​ 除此之外,作者利用了LwF(Learning without forget)方法,来避免灾难性遗忘。

网络介绍:Physics-Based Network

​ 大部分去雾的深度学习模型都是直接估计恢复后的图片,但作者提出的是在他们的基础上添加了两个模块:Physics-compatible headAtmospheric light estimation network(A-Net)

image-20210721223832033

  • Physics-compatible head

image-20210721224249230

这部分两个分支,每个分支都有两层卷积层,这里假设backbone是一种可以有效提取投射图和去雾后图像的特征提取器,backbone得到feature map后直接连入Physics-compatible head的卷积层。

  • Atmospheric light estimation network(A-Net)

这一部分就是用的DCPDN种的U-Net来估计全局大气光,作者还为backbone和这个子网络提出了reconstruction loss。

预训练部分: Model Pretraining

我们使用的backbone是有loss function的,但是我们用的模型还多出了两个模块的参数也需要训练,所以用backbone 的loss function显然是不合理的,作者提出了reconstruction loss $L_{Rec}$联合优化整个模型。

通过$\tilde{J},\tilde{t},\tilde{A}$可以还原出输入的有雾图像:

我们因此定义Loss为:

​ 那么我们的loss其实就整合了$\tilde{J},\tilde{t},\tilde{A}$三种参数,使得三者可以共同训练,其中$I$是ground-truth的输入有雾图像。

Prior Loss Committee:

  • Dark Channel Prior(DCP) Loss

$t$代表DCP估计的通透率,$\tilde{t}$代表作者提出的网络估计的通透率,$L$是$Laplacian-like$矩阵。这个公式第一项$t^{T}Lt$帮助图像成功抠图,第二项符合暗通道解决方法,$\lambda$是超参数。

  • Bright Channel Prior(BCP) Loss

DCP Loss极大地改善了在真实雾霾图像上的表现,但也带来了一个问题:DCP会使得图像比期望图像更暗一些。因此我们提出了BCP Loss来使生成的图像更明亮,增强对比度:

  • CLAHE Reconstruction Loss

我们已经提出了两个Loss,但是上面两个Loss一个会使得图像变暗,一个让图像变亮,如何才能平衡好两者使得对比度正常?作者提出了CLAHE Reconstruction Loss,首先从真实雾霾图像放入网络中得到$\tilde{t},\tilde{A}$.然后带入利用CLAHE去雾的结果$J_{CLAHE}$和$\tilde{t},\tilde{A}$还原有雾图像,然后对比还原出有雾图像和真实有雾图像的loss,loss越小说明CLAHE还原出的原图和真实无雾结果越接近,此时的对比度,亮度也最真实。

最后我们组合成Prior Loss Committee:

三个$\lambda$为trade-off权重。

Synthetic-to-Real Generalization

  • LwF(Learning without forgetting) loss

下面就是如何泛化模型,首先了为避免灾难性遗忘,利用LwF(Learning without forgetting) loss $\mathcal{L}_{l w f}$,帮助我们记住在生成数据集上去雾任务。在利用真实数据更新模型$M$的过程中,同时也要用冻结的原模型$M_0$同时处理真实数据:

其中$Fs,F{os}$是在生成数据上,$M,M0$的feature map,$F_r,F{or}$是在真实数据集上$M,M_0$的feature map。

  • sky loss

此外,物理先验通常不能正确处理图像中的天空,从而导致伪影和颜色偏移。为了解决这个问题,我们通过暗通道先验粗略估计输入图像的天空区域,并在微调时尽可能保留天空区域的原始像素值,损失函数如下:

$J,J0$分别是在$M,M_0$模型下恢复得到的去雾图片,$M{sky}$是天空部分的二分掩膜,这样每处天空在两个模型下的区别就体现出来了,我们希望这种区别小一些,这样就可以让天空处保持原模型的样子。

这里放在一起优化可以更好地改进,我的想法是:既然已经拿到了二分掩膜找到了天空的位置,可以对他们进行分开处理,先让非天空的景物进行恢复,然后再用原模型还原出天空,根据二分掩膜的边界进行拼接。

Experiments

值得一提,这篇文章算是我读过的paper中十分solid的,主观,客观,间接利用下游方法反过来反应PSD的效果,还有Ablation study证明idea的有效性。

image-20210722182315341

主观评价:

image-20210722182706128

无参考图像质量评估(客观量化):

image-20210722182637266

Ablation Study

image-20210722182419097

文章做了ablation study说明文章的idea确实是solid的。

任务驱动评价

去雾最终是为了下游任务更好的使用,作者提出可以对图片先进行去雾处理,然后放在yolo3中比较mAP的涨点,结果显示PSD效果最好,可以真正利用在下游任务中,提高下游任务精度。

image-20210722183241158