RIDCP: Revitalizing Real Image Dehazing via High-Quality Codebook Priors(CVPR2023)论文记录

article/2025/11/11 11:07:46

通过高质量码本先验重塑真实图像去雾(CVPR2023)

  • RIDCP: Revitalizing Real Image Dehazing via High-Quality Codebook Priors
  • 通过高质量码本先验重塑真实图像去雾(CVPR2023)
  • 摘要
  • 一、数据合成流程
  • 二、VQGAN 预训练:构建高质量先验码本
  • 三、构建 RIDCP 去雾网络
  • 三、可控的高质量先验(HQPs)匹配操作
  • 四、实验结果

RIDCP: Revitalizing Real Image Dehazing via High-Quality Codebook Priors

通过高质量码本先验重塑真实图像去雾(CVPR2023)

原文链接:https://openaccess.thecvf.com/content/CVPR2023/papers/Wu_RIDCP_Revitalizing_Real_Image_Dehazing_via_High-Quality_Codebook_Priors_CVPR_2023_paper.pdf


摘要

  1. 目前合成雾图像与真实雾图像差距较大,作者提出了一种考虑多种退化类型的现象学数据合成流程,以缩小合成数据和真实数据之间的域差距。包括以下 4 个部分:① 弱光环境;② 透射率图;③ 彩色雾;④ JPEG压缩。
  2. 目前图像去雾领域缺乏强大的先验知识,作者提出在 VQGAN1使用大规模高质量数据集,预训练出一个离散码本,封装高质量先验(HQPs);并且引入了一种提取特征能力较强的编码器 E,以及设计了一个具有归一化特征对齐模块(NFA)的解码器 G ,共同构建出基于高质量码本先验的真实图像去雾网络(RIDCP)。
  3. 尽管本文所构建的 RIDCP 取得了较好的结果,但是仍然存在:由于合成数据和真实数据之间的特征差异,导致某些图像的去雾效果不佳的问题。因此设计了一种可控的高质量先验匹配机制(Controllable HQPs Matching,CHM),重新计算特征之间的距离,以便更好的找到对应的特征。
    RIDCP
    上图展示了RIDCP网络结构。在训练阶段,通过数据生成管道合成的数据来训练去雾网络,如图(a)所示。该网络基于预训练的HQPs(高质量先验)码本和VQGAN模型中对应的解码器Gvq。还设计了可控的HQPs匹配(CHM)操作,用于实现真实域适应,通过重新计算特征与HQPs之间的距离。图(b)用两个Voronoi图表示了距离的重新计算,其中彩色区域表示与HQPs更好匹配,灰色区域表示相反情况。三角形代表特征点,五角星点代表HQPs。可以看出,经过距离重新计算后,原本属于灰色区域的点被CHM操作强制分配到彩色区域。

一、数据合成流程

  1. 弱光环境:γ∈[1.5,3.0] 是一个亮度调整因子,N 是高斯噪声分布,这两个组件可以模拟雾天中经常出现的光线条件较差的情况;
  2. 透射率图:作为退化模型中的关键参数,采用深度估计算法来估计深度图 d(x) ,并使用β∈[0.3,1.5] 来控制雾的密度;
  3. 彩色雾:为了获得多样化的雾霾图像,通过三通道向量 ∆A∈[−0.025,0.025] 来调整大气光的颜色偏差,大气光值 A 的范围在
    [0.25,1.0] 之间;
  4. JPEG压缩:观察到去雾算法会放大 JPEG 伪影,通过使用 JPEG 压缩去除这种伪影。
    在这里插入图片描述

二、VQGAN 预训练:构建高质量先验码本

  1. VQGAN 是基于 VQVAE2而来,VQVAE 是基于 VAE 而来;VQVAE 采用离散的隐变量,而不是像 VAE 那样采用连续的隐变量;VQVAE 需要单独训练一个基于自回归的模型如 PixelCNN 来学习先验(prior)。VQVAE结构图如下所示:
    VQVAE
  2. VQGAN 的整体架构是将 VQVAE 的编码生成器从 PixelCNN 换成了 Transformer,并且在训练过程中使用
    PatchGAN 的判别器加入对抗损失。最终使得模型能够用于高质量图像合成,效果远超 VQVAE。VQGAN结构图如下所示:
    VQGAN
  3. RIDCP高质量先验码本构建过程:①高质量清晰图像 x 输入,经过编码器输出码本Codebook,每个图像包含很多隐变量(即特征);②每一个隐变量使用“最邻近搜索”映射为码本 codebook 中的一个向量;最终得到离散表示:HQPs

三、构建 RIDCP 去雾网络

  1. 下图就是仅使用预训练好的 VQGAN 进行图像去雾测试;发现:可以去除薄雾并恢复鲜艳的颜色;但是去雾能力有限,因为在与先验码本进行正确匹配时存在困难;并且由于向量量化阶段的信息损失,会产生一些扭曲的纹理;因此:作者设计了可以帮助先验匹配的编码器 E,以及可以利用从 HQPs 重建特征的解码器 G。VQGAN去雾
  2. 首先按照 SwinIR3的方法设计了编码器 E,因为它拥有强大的特征提取能力;然后设计了一个具有归一化特征对齐(NFA)的解码器 G:利用可变形卷积将 Gvq 中的特征与 G 中的特征对齐。RIDCP结构图如下所示:
    RIDCP

三、可控的高质量先验(HQPs)匹配操作

  1. 尽管本文所构建的 RIDCP 取得了较好的结果,但是仍然存在:由于合成数据和真实数据之间的特征差异,导致某些图像的去雾效果不佳的问题。通过以下方法进行量化研究:作者随机收集了 200 张高质量的清晰图像作为输入,计算码本中每个特征的激活频率 fc ;同样,再将 200 张真实含雾图像输入去雾网络,计算频率 fh ;下图显示了 fh 和 fc 之间差异最大的前 10 个。我们可以看到特征分布显著偏移。证明了特征差异会导致与高质量先验码本的匹配不一致。在这里插入图片描述
  2. 因此,为了使得模型在测试真实含雾图像是,匹配到更好的高质量先验码本,设计了一种可控的高质量先验匹配机制(Controllable HQPs Matching,CHM),重新计算特征之间的距离,以便更好的找到对应的特征。彩色区域表示与高质量先验码本更好匹配,灰色区域表示相反情况;三角形△代表特征点,五角星点☆代表高质量先验码本;可以看出,经过距离重新计算后,原本属于灰色区域的点被CHM 操作强制分配到彩色区域。
    CHM

四、实验结果

  • 下图分别是 RIDCP 去雾网络在 RTTS 数据集上和 Fattal 数据集的效果对比,以及定量分析;其中 US 指标为:作者从RTTS数据集中随机选择了100张图像进行比较,邀请了5名具有图像处理背景的专家和5名普通观察者作为志愿者进行主观评估
    RTTS
    Fattal
    定量分析

  1. Esser P, Rombach R, Ommer B. Taming transformers for high-resolution image synthesis[C] CVPR:2021 ↩︎

  2. Van Den Oord A, Vinyals O. Neural discrete representation learning [J] NIPS:2017 ↩︎

  3. Liang J, Cao J, Sun G, et al. Swinir: Image restoration using swin transformer [C] ICCV:2021 ↩︎


http://chatgpt.dhexx.cn/article/81G4GbiJ.shtml

相关文章

【AI人工智能绘画 CV】Towards Robust Blind Face Restoration with Codebook Lookup Transformer

Towards Robust Blind Face Restoration with Codebook Lookup Transformer (NeurIPS 2022) 使用 Codebook Lookup Transformer 实现稳健的盲脸修复 Blind face restoration is a highly ill-posed problem that often requires auxiliary guidance to 1) improve the mapping…

2021-11-10-Codebook理解

《Deep Visual-Semantic Quantization for Efficient Image Retrieval》中提到的codebook是什么意思? Specifically, each image embedding zn is quantized using a set of M codebooks C [C1, . . . , CM ], each codebook Cm contains K codewords Cm [Cm1, .…

《学习openCV》例程解析 ex_9_3(codeBook模型实现背景减除)

56帧时 63帧时 /** 比平均背景法性能更加良好的方法,codeBook模型实现背景减除 核心代码详细解析和实现 by zcube */ /************************************************************************/ /* A few more thoughts on codebook models In general, the codebook met…

“Requesting Java AST from selection“. ‘boolean com.ibm.icu.text.UTF16.isSurrogate(char)‘

记录一次问题。自从安装了spring tool(sts)插件后,在使用eclipse过程中总是弹出An internal error occurred during: "Requesting Java AST from selection". boolean com.ibm.icu.text.UTF16.isSurrogate(char)这种错误&#xff0…

详解Unicode与UTF-8、UTF-16、UTF-32.

计算机起源于美国,上个世纪,他们对英语字符与二进制位之间的关系做了统一规定,并制定了一套字符编码规则,这套编码规则被称为ASCII编码 ASCII 编码一共定义了128个字符的编码规则,用七位二进制表示 ( 0x00 - 0x7F ), …

解决eclipse boolean com.ibm.icu.text.UTF16.isSurrogate(char)

window > preferences > java > Editor > mark occurrences and desable : mark occurrences ...

字符集编码 Unicode UTF8 UTF16 UTF32 和BOM(Byte Order Mark)

BOM(Byte Order Mark) 在分析unicode之前,先把bom(byte order mark)说一下。 bom是unicode字符顺序的标识符号,一般以魔数(magic code)的形式出现在以Unicode字符编码的文件的开始的头部,作为该文件的编码标识。 来举个很简单的例子,在windows下新建一个文本文件,并另…

utf8与utf16转换

1.UTF8与UTF16编码转换 std::string ConvertFromUtf16ToUtf8(const std::wstring& wstr) {std::string convertedString;int requiredSize WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, 0, 0, 0, 0);if(requiredSize > 0){std::vector<char> buffer(requ…

探究乱码问题的本源:GBK,UTF8,UTF16,UTF8BOM,ASN1之间的关联

文章目录 前言一、字符集和字符编码的区别和联系二、字符集编码的发展1.单字节2.双字节3.多字节(UNICODE字符集)&#xff08;1&#xff09;UTF-8&#xff08;2&#xff09;UTF-16&#xff08;3&#xff09;UTF-32&#xff08;4&#xff09;UTF BOM 三、不同编码方式的对比分析四…

oracle字符集utf16,oracle字符集AL16UTF16改为ZHS16GBK

AL16UTF16一个汉字占3个字节 ZHS16GBK一个汉字占2个字节 sql> conn / as sysdba; sql> shutdown immediate; database closed. database dismounted. oracle instance shut down. sql> startup mount; oracle instance started. total system global area 135337420 …

字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)

字符集为每个字符分配了一个唯一的编号&#xff0c;通过这个编号就能找到对应的字符。在编程过程中我们经常会使用字符&#xff0c;而使用字符的前提就是把字符放入内存中&#xff0c;毫无疑问&#xff0c;放入内存中的仅仅是字符的编号&#xff0c;而不是真正的字符实体。 这就…

UTF-8 与 UTF-16编码详解

目录 一、UTF-8编码 1、UTF-8介绍 2、UTF-8是如何编码的&#xff1f; 3、上述Unicode码点值范围中十进制值127、2047、65535、2097151这几个临界值是怎么来的呢&#xff1f; 二、UTF-16编码 1、UTF-16介绍 2、UTF-16编码方式 1&#xff09;设计思路 2&#xff09;具体…

了解一下UTF-16

1)先啰嗦一下 UTF-16是一种编码格式。啥是编码格式&#xff1f;就是怎么存储&#xff0c;也就是存储的方式。 存储啥&#xff1f;存二进制数字。为啥要存二进制数字&#xff1f; 因为Unicode字符集里面把二进制数字和字符一一对应了&#xff0c;存二进制数字就相当于存了二进制…

字符编码--UTF-16

2019独角兽企业重金招聘Python工程师标准>>> 第4节 UTF-16 UTF-16是Unicode字符编码五层次模型的第三层&#xff1a;字符编码表&#xff08;Character Encoding Form&#xff0c;也称为"storage format"&#xff09;的一种实现方式。即把Unicode字符集的抽…

蔡勒公式、三角函数

1.蔡勒公式 2.三角函数

蔡勒(Zeller)公式及其推导:快速将任意日期转换为星期数

0. 本文的初衷及蔡勒公式的用处 前一段时间&#xff0c;我在准备北邮计算机考研复试的时候&#xff0c;做了几道与日期计算相关的题目&#xff0c;在这个过程中我接触到了蔡勒公式。先简单的介绍一下蔡勒公式是干什么用的。 我们有时候会遇到这样的问题&#xff1a;看到一个日期…

1185.一周中的几天 四种解法(java),主要新学一下蔡勒公式

题目 给你一个日期&#xff0c;请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数&#xff1a;day、month 和 year&#xff0c;分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”…

给定日期(年月日)求星期几(蔡勒公式?没那么简单!)

前言 前几日做到一个机试题&#xff0c;给出一个日期&#xff0c;让你输出那天是星期几&#xff0c;这种题无疑两种思路&#xff1a;一是从今天&#xff08;前提是知道今天日期及周几&#xff09;开始推算&#xff0c;计算今天与目标日期差的天数再取模运算&#xff0c;考虑到…

欧拉计划题-19 (蔡勒公式)

欧拉计划题19 前言一 题目描述二 题解分析1.暴力求解&#xff08;低配版解法&#xff09;2.蔡勒公式&#xff08;公式法&#xff09; 三 题解代码 前言 欧拉计划是学习数学、数论选手遨游的海洋&#xff0c;700道题让你我越来越强。 打卡网址链接: link. 一 题目描述 题目链接…

C语言——蔡勒(Zeller)公式:快速将任意日期转换为星期数

蔡勒公式 情景引入公式介绍公式细节代码实现 情景引入 在日常生活中&#xff0c;我们有时候会遇到这样的问题&#xff1a;看到一个日期想知道这一天是星期几。对于这个问题&#xff0c;如果用编程的方式&#xff0c;应该怎么实现呢&#xff1f;你可能已经有思路了&#xff0c;比…