Learning to Enhance Low-Light Image via Zero-Reference Deep Curve Estimation

news2025/7/9 3:28:34

学习目标:

  1. Learning to Enhance Low-Light Image
    via Zero-Reference Deep Curve Estimation(零参考深度曲线估计)

个人体会:

本文的特色就是使用了PA和CA,对不同通道和不同像素做不同处理,虽然本文的实现过程懂了,但是实现去雾的原理不懂,不明白为什么经过一些的卷积操作,残差链接就实现了图像去雾


知识点:

Retinex理论
Gray-World color constancy hypothesis
深度可分离卷积


内容解读:

1. 摘要:

本文提出零参考深度曲线估计(Zero-DCE),用于弱光图像增强。本文方法训练一个轻量级的深度网络DCE-Net,以弱光图像为输入,以高阶曲线为输出,然后利用这些曲线对输入图像进行像素级调整,以获得增强的图像。该曲线估计是专门设计的,考虑像素值范围、单调性和可微性。Zero-DCE在其对参考图像的宽松假设方面是有吸引力的,贡献在是第一个不依赖于成对和非成对训练数据的弱光增强网络,这是通过一组精心制定的非参考损耗函数实现的,该函数隐含地测量增强质量并驱动网络学习。尽管其简单,研究表明它很好地适用于不同的照明条件。我们的方法是有效的,因为图像增强可以通过直观和简单的非线性曲线映射。
我们的基于深度学习方法的独特优势,即在训练过程中不需要任何配对或甚至不配对的数据。这就使得可以通过一组专门设计的非参考损耗函数包括空间一致性损失、曝光控制损失、颜色恒定性损失和照明平滑度损失,所有这些考虑到光增强的多因素里。
主要贡献如下:

  • 不依赖于成对和非成对训练数据的弱光增强网络,从而避免了过拟合的风险。适应于各种照明条件
  • 设计了一个特定于图像的曲线,它能够通过迭代应用自身来逼近像素级和高阶曲线。这样的图像特定曲线可以在很宽的动态范围内有效地进行映射。
  • 通过间接评估增强质量的特定于任务的非参考损失函数展示了在没有参考图像的情况下训练深度图像增强模型的潜力

以弱光图像为输入,以高阶曲线为输出,然后利用这些曲线对输入图像进行像素级调整,以获得增强的图像。曲线估算经过精心制定,因此它保持增强图像的范围并保持相邻像素的对比度。重要的是,它是可微分的,并且因此我们可以通过深度卷积神经网络去调整参数。拟建网络为轻重量的,设计曲线可迭代应用于近似高阶曲线以获得更鲁棒和准确的动态范围调整。

2.相关工作

请添加图片描述

3.方法

Zero-DCE的框架
请添加图片描述
设计了一种深度曲线估计网络(DCE-Net)来估计一组给定输入图像的最佳拟合光增强曲线(LE-曲线)。然后,该框架通过迭代应用曲线来映射输入的RGB通道的所有像素,以获得最终增强的图像。

3.1 光增强曲线

受照片编辑软件中使用的曲线调整的启发,我们设计了一种可以将弱光图像自动映射到正常光照的曲线,其中自适应曲线参数完全取决于输入图像。设计这种曲线需要满足三个标准

(为什么有这1,2两条标准)

  1. 增强图像的每个像素值应落在[0,1]的范围内,以避免溢出截断引起的信息丢失;
  2. 这条曲线应该是单调的,以保持相邻像素的差异(对比度);
  3. 在梯度反向传播的过程中,这条曲线的形式应该尽可能简单和可微。

为了实现这三个目标,我们设计了一条二次曲线,可以表示为:
请添加图片描述
其中x表示像素坐标,LE(I(x);α)是给定输入I(x)的增强版本,可训练曲线参数α∈[-1,1]调整LE曲线的大小并控制暴露水平。输入的每个像素都被归一化为[0,1] 的范围,并且所有操作都是逐像素的(每个颜色通道具有单独的曲线)。我们将LE曲线分别应用于三个RGB通道,而不是仅应用于亮度通道。三通道调节可以更好地保留固有颜色,降低过饱和风险。我们在消融研究中报道了更多细节。具有不同调整参数α的LE曲线如图2(b)所示。显然,LE曲线符合上述三个目标。因此,增强图像的每个像素值在[0,1]的范围内。此外,LE曲线使我们能够增加或减小输入图像的动态范围。这种能力不仅有利于增强弱光区域,还有助于消除过度曝光伪影。我们选择一种特殊的单参数形式作为二次型,因为:

  • 1)单参数形式可以减少计算量,提高算法的速度;
  • 2)专门设计的二次型满足设计的三个目标,并且已经取得了令人满意的增强性能。

(1)式的基础上,我们发现通过使用迭代的思路来进行高序曲线(High Order Curve)增强与逐像素曲线(Pixel-wise Curve)增强可以使得性能进一步增强。因此最终光照增强曲线公式如下:请添加图片描述
其中n是控制曲率的迭代次数。在本文中,我们将n值设置为8,它可以很好地处理大多数情况。当方程(2)n等于1时,方程(2)可以退化为方程(1)。图2©提供了一个例子,显示了具有不同α和n的高次曲线。这种高次曲线提供了比图2(b)中的曲线更强大的调节能力(即更大的曲率)。
但是,我们不希望每个像素都用同样的提亮函数。比如如果图像中某个地方亮着灯,那么这个地方的像素值就不用改变。因此,每个像素应该有独立的α
。最终的提亮函数为:请添加图片描述
其中A是与给定图像具有相同大小的参数映射。这里,假设局部区域中的像素具有相同的强度(也是相同的调整曲线),因此输出结果中的相邻像素仍然保持单调关系。这样,像素级高阶曲线也符合上述三个目标。结果,增强图像的每个像素值仍然在[0,1]的范围内。
下图显示了某输入图片在不同像素处的α的绝对值:
请添加图片描述
可以看出,在较亮的地方,图像没有变化,α几乎为0;而在较暗的地方,α的数值也较大。

3.2 DCE-Net

为了学习输入图像与其最佳拟合曲线参数图之间的映射关系,我们提出了一种深度曲线估计网络(DCE-Net)。在图4中,我们给出了DCE-NET的详细网络结构和参数设置。
请添加图片描述
DCE-Net的输入是暗光图像,而输出是对应高阶曲线的一组像素级曲线参数图。我们不使用需要固定输入大小的全连通层,而是采用具有对称跳跃级联的七层卷积层的普通CNN。在前6个卷积层中,每个卷积层由32个大小为3×3、步长为1的卷积核组成,其后是RELU激活函数。最后一个卷积层由24个大小为3×3、步长为1的卷积核组成,其后是Tanh激活函数,该函数为8次迭代产生24个曲线参数图,其中每次迭代为3个通道(即,RGB通道)生成3个曲线参数图。我们去掉了打破相邻像素关系的下采样和批归一化层。值得注意的是,对于1200×900×3的输入图像,DCE-Net只有79K可训练参数和85G Flops,这已经小于现有的微光图像增强深度模型,如:RetinexNet:555k/587G,EnlighttenGan:8M/273G和MBLLEN:450k/301G。
请添加图片描述

3.3 无参考损失函数

为了在DCE网络中实现零参考学习,我们提出了一套可微分非参考损失,使我们能够评估
增强图像的质量。以下四种类型的损失是用于培训我们的DCE网:

3.3.1 空间一致性损失

空间一致性损失Lspa通过保留输入图像与其增强版本之间的相邻区域的差异来鼓励增强图像的空间一致性:请添加图片描述
其中K是局部区域的数目,Ω(I)是以区域i为中心的四个相邻区域(上、下、左、右)。我们将Y和I值分别表示为增强版和输入图像中局部区域的平均亮度值。我们经验地将局部区域的大小设置为4×4。考虑到其他区域大小,这种损失是稳定的。我们在图5中说明了计算空间一致性损失的过程。
请添加图片描述

3.3.2曝光控制损失

为了抑制曝光不足和过度曝光的区域,我们设计了曝光控制Lexp来控制曝光水平。曝光控制损失测量局部区域的平均强度值到良好曝光水平E之间的距离。我们遵循现有的实践来设置RGB颜色空间中的灰度级。在我们的实验中,我们经验性地将E设为0.6。损失Lexp可以表示为:
请添加图片描述

E设置成0.6表示充分暴露在光照下RGB颜色空间中的灰色级别,Y表示增强图像中局部区域的平均强度值,每个区域的大小为16X16

3.3.3 彩色恒常损失函数

是因为没有任何的监督信息的条件下,在RGB 3通道进行曲线映射的过程中会出现颜色偏差等问题。我们采用了一种先验的方式,利用灰度世界假设来限制RGB 3通道的关系。该假设条件是在增强的结果中,RGB 3通道的均值是无限的互相接近的。
请添加图片描述
其中Jp表示增强图像中p通道的平均强度值,一对通道表示为(p,q)。

3.3.4 亮度平滑损失函数

当将高阶曲线扩展为逐像素的高阶曲线的时候,往往会破坏原始的曲线是单调的假设。为了避免这样问题的出现,我们将所估计的参数图进行平滑处理,使得相邻像素点的曲线参数值是相接近的,尽可能的保证曲线的单调性。
请添加图片描述
N:迭代次数 x,y表示水平和垂直梯度操作,A表示曲线参数图。

3.3.5 总损失

在这里插入图片描述
其中权重Wcol和WtvA用于平衡不同损失的作用。本文 Wcol= 0.5 ,WtvA = 20

4.ZERO-DCE++

在充分实验和观察的基础上,我们对Zero-DCE从三个方面进行优化,最终获得了参数更少,计算量更低,推理速度更快的Zero-DCE++。

采用轻量级的网络结构
在保持基本网络结构的基础上,我们采用深度可分离卷积替代传统的卷积层从而大幅降低网络的参数量和计算量。
简化亮度增强曲线
在经过大量试验后,我们发现在每次迭代过程中变化微小(如图所示),可以采取一个统一的曲线参数近似代替,因此我们将亮度增强曲线简化为:
在这里插入图片描述
A表示相同的增强曲线参数。这样不仅可以减少参数数量,还可以进一步提升模型的推理速度。
请添加图片描述对输入图像进行下采样用于估计曲线参数
图像的像素之间存在大量的冗余信息,且网络估计的曲线参数图具有平滑的特性。基于以上原因,我们对输入图像进行下采样用于估计曲线参数,再将曲线参数上采样至原始尺寸后用于图像的迭代增强。

根据主观和客观测评结果,均衡算法性能和计算效率,在算法实施中我们选择12倍下采样。图5展示了一个场景在不同下采样倍率下的增强结果。
在这里插入图片描述

5.实验

5.1实验

基于CNN的模型通常使用自捕获的配对数据进行网络训练,而基于GAN的模型则精心选择未配对的数据。为了充分发挥宽动态范围调节的能力,我们将弱光和过曝光的图像都加入到我们的训练集中。为此,我们使用SICE数据集第1部分中的360个多次曝光序列来训练我们的模型。该数据集还用作EnlighttenGAN中训练数据的一部分。我们将第一部分子集中不同曝光级别的3022张图像随机分成两部分(2422张用于训练,其余用于验证)。我们将训练和测试图像的大小调整为512×512×3。
我们在NVIDIA 2080Ti图形处理器上实现了我们的框架。应用的批次大小为8。采用标准零均值和0.02标准差高斯函数对各层的滤波权重进行初始化。偏置被初始化为常量。我们使用带有默认参数和固定学习速率的ADAM优化器1e−4进行网络优化。权重WcolA和Wtva分别设置为0.5和20,以平衡损失规模。ZERO-DCE和ZERO-DCE++在训练期间采用相同的训练数据集和配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缝纫机牙架的数控工艺工装设计与编程

目 录 绪 论 1 2.差动牙架的工艺设计 3 2.1 机械加工工艺规程概述 3 2.2.1 零件的技术条件 4 2.2.2 加工表面及其要求 5 2.2.3零件的材料 6 2.3毛坯的选择 6 2.3.1毛坯的种类 6 2.4 基准的选择 8 2.5 机械加工工艺路线的拟订 10 3 差动牙架的工装设计 17 3.1 夹具概述 17 3.2 …

牛客CM11 - 链表分割【环形链表雏形】

看来真的不能乱割呀~一、题目描述二、思路分析三、代码详解【保姆级教学】四、环形链表的疑难解惑五、整体代码展示六、总结与提炼一、题目描述 描述 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前&am…

数据库-范式

目录 完全函数依赖部分函数依赖传递函数依赖码主属性非主属性第一范式(1NF)第二范式(2NF)第三范式(3NF)例题完全函数依赖 每一个属性都有用,缺一个都不能决定。 部分函数依赖 部分属性用不到,也可以决定 传递函数依赖

抽象类和(上)

大家好,又见面了,今天和大家浅谈一下抽象类 抽象类存在的意义就是被继承 抽象类 🐷1.抽象类的定义 🐱‍🚀2.抽象类的语法 💚3.抽象类的概念 🚀4.抽象类的作用 1.抽象类的概念 什么是 好…

[附源码]java毕业设计基于个性化的汽车购买推荐系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何在Ubuntu 22.04上安装Linux 内核 6.0?

内核是任何基于 Linux 的操作系统的核心部分,它充当计算机系统软件和硬件之间的桥梁,还提供用户和应用程序与计算机交互所需的接口。内核提供了许多功能,包括进程调度、资源分配、设备管理、中断处理、内存管理和进程。 在撰写本文时&#x…

轻松学会jQuery选择器的用法

文章目录⛳️ 选择器✨ 属性选择器✨ 包含选择器✨ 位置选择器✨ 过滤选择器✨ 反向选择器⛳️ 快速投票⛳️ 选择器 本篇重点讲解jQuery中丰富的选择器,以及他们的基本用法。CSS的选择器均可以用jQuery的$进行选择,部分浏览器对CSS3的选择器支持不全&am…

大道至简,凯里亚德酒店成为酒店投资圈万众瞩目的“新”星

作为近年酒店市场的热门领域,中端酒店行业的发展一直颇受关注。随之而来的就是中端酒店品牌的不断增加,以及中端商旅、度假型酒店规模的不断扩大,经行业资深人士分析,未来中端酒店将成为酒店市场的主力产品。鉴于市场的发展趋势&a…

Netty中的缓存Bytebuf

首先我们来明确一下Buffer(缓存) JavaNIO中的Buffer、Netty中的Buffer、Netty中的Bytebuf这是3个不同的类,但实现的内容和完成的功能几乎一致,最原始的是JavaNIO中的Buffer实现,最先进的是Netty中Bytebuf的实现&#x…

10 分钟, 带你彻底掌握 SQL 多表查询

1.前言 多表查询,也称为多表连接查询;作为关系型数据库最主要的查询方式,在日常工作中被广泛使用 常见的多表查询操作包含:子查询、内连接、左外连接、右外连接、完全连接、交叉连接 本篇文章将利用一个实例逐一介绍这些操作 …

【华为OD机试真题 python】 太阳能板最大面积【2022 Q4 | 100分】

■ 题目描述 给航天器一侧加装长方形或正方形的太阳能板(图中的红色斜线区域),需要先安装两个支柱(图中的黑色竖条),再在支柱的中间部分固定太阳能板。 但航天器不同位置的支柱长度不同,太阳能…

做一名既有宽度也有深度的测试!

一名好的测试人员,在工作中,不仅要做到有宽度更要有深度! 何为宽度?测试用例的覆盖面更广更全。 测试人员设计测试用例的时候可以分为这几种类型: 一:将prd的需求描述copy到测试用例。 二:细…

Java线程安全与对象头结构信息

文章目录一 线程安全问题1.1 什么是线程安全问题?1.2 自增运算真的线程安全吗?1.3 Synchronized锁表现三种形势?1.3.1 synchronized同步方法1.3.2 synchronized同步代码块1.3.3 synchronized静态方法1.3.4 总结二 Java对象结构与内置锁2.1 Ja…

浏览器自动化利器Selenium IDE使用指南

文章目录前言一、安装及界面1.1 安装1.2 界面二、常用命令2.1 通用2.2 表单2.3 流程控制三、常用操作3.1 命令操作3.2 js脚本3.3 录制3.4 导出四、实际操作例子4.1 红黑树插入可视化4.2 github下载参考前言 Selenium 是一个浏览器自动化框架,专门为 W3C WebDriver …

创龙AD+全志T3 TL7606I模块测试

上一篇:创龙AD全志T3 ad_display 开发案例(2) 前 言 本文主要介绍基于全志科技T3(ARM Cortex-A7)处理器的8/16通道AD采集开发案例,使用核芯互联CL1606/CL1616AD芯片,亦适用于ADI AD7606/AD7616。CL1606/CL1616与AD7606/AD7616软硬件兼容。 …

力扣(LeetCode)775. 全局倒置与局部倒置(C++)

模拟 理解题&#xff0c;全局倒置就是不相邻的逆序对&#xff0c;局部倒置就是相邻的逆序对。提示中给出&#xff0c;0<nums[i]<n0 < nums[i] < n0<nums[i]<n &#xff0c;其中 nnums.lengthn nums.lengthnnums.length , numsnumsnums 中的所有整数 互不相…

什么是 rektguy NFT系列?

rektguy 系列是一组闪烁着霓虹灯颜色的饮酒骷髅 该项目背后的团队没有提出路线图或分支项目 艺术家 OSF 已经在 NFT 生态系统中拥有一个成熟的粉丝群体 rektguy NFT系列由 8,814 个 NFT 组成&#xff0c;展示了穿着连帽衫、用瓶子喝水的骷髅。这些人物由深黑色背景上闪烁的霓…

[论文阅读] 颜色迁移-EM概率分割的局部颜色迁移

[论文阅读] 颜色迁移-EM概率分割的局部颜色迁移 文章: Local Color Transfer via Probabilistic Segmentation by Expectation-Maximization,[paper][code(未公开)] 本文目的为: 图像局部颜色迁移. 1-符号说明 在进行本文算法原理说明之前, 先对一些英文缩写进行简单说明: …

一次nacos 导致的 CPU 飙高问题

序 今天下午突然 出现 测试环境 cpu飙高&#xff0c;干到了 60%&#xff0c;其他项目 响应时间明显变长。。。有点吓人&#xff0c;不想背锅 项目背景 出问题的项目是 需要连接各个不同nacos 和不同的 namespace 进行对应操作的 一个项目&#xff0c;对nacos的操作都是httpC…

JavaScript break 、 continue和return 语句介绍

目录 一、Break 1、介绍 2、代码&#xff1a; 3、示例&#xff1a; 二、Continue 1、介绍 2、代码 3、示例 三、break 、continue总结&#xff1a; 代码 示例 四、Return 1、简介 2、语法&#xff1a; 3、代码 4、示例 五、return、break、continue总结 1、re…