- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
分三个模型 easy.pt medium.pt difficult.pt,每个模型43k,
Toward Fast, Flexible, and Robust Low-Light Image Enhancement
论文:https://arxiv.org/abs/2204.10137
代码:https://github.com/vis-opt-group/SCI
本文提出了一种全新的低光照图像增强方案:自校准光照学习(SCI)。通过构建引入自校准模块的权重共享光照学习过程,摒弃了网络结构的繁杂设计过程,实现了仅使用简单操作进行增强的目的。大量实验结果表明,SCI在视觉质量、计算效率、下游视觉任务应用方面均取得了突破(见图1)。该研究已被CVPR 2022收录为Oral。
图1 本文提出方法与其他方法的结果对比
研究背景
低光照图像增强作为图像处理中的经典任务,在学术界与工业界均受到了广泛关注。2018-2020年连续举办三届的UG2+Prize Challenge比赛将低光照人脸检测作为主竞赛单元,极大程度推动了学术界对于低光照图像增强技术的研究。某手机厂商于2019年发布会上将暗光拍摄能力作为主打亮点,掀起了工业界利用深度学习技术解决低光照图像增强的又一波浪潮。
现有的低光照图像增强技术聚焦于构建数据驱动的深度网络,通常其网络模型复杂,导致计算效率低、推理速度慢,并且由于对于训练数据分布的依赖性导致其在未知场景下的性能缺乏保障。总的来说,现有技术普遍缺乏实用性。为解决以上问题,本文致力于从学习策略入手,构建一种快速、灵活与稳健的低光照图像增强方案。
本文方法
(1)权重共享的光照学习
根据Retinex理论,低光照观测图像等于清晰图像与光照的点乘,即
。在基于该模型设计的方法中,光照的估计通常被视为主要的优化目标,得到精确的光照后,清晰图像能够上述关系直接得到。受现有工作的逐阶段光照优化过程启发,本文构建渐进式的光照优化过程,其基本单元如下所示:
其中
与分别表示第t阶段的残差与光照。表示光照估计网络。需要注意的是这里与阶段数无关,即在每一阶段光照估计网络均保持结构与参数共享状态。进一步理解该模块能够发现,在渐进式优化与参数共享机制下,每个阶段均希望得到与目标接近的输出。换句话说,是否存在一种可能,能够令每个阶段的输出尽可能接近且与目标一致,这样一来,多阶段级联测试变为单阶段测试,将大幅减少推理代价。为实现该目标,如下引入了一种自校准模块。
图2 本文算法流程图
(2)自校准模块
该模块的目的在于从分析每个阶段之间的关系入手,确保在训练过程中的不同阶段的输出均能够收敛到相同的状态。自校准模块的公式表达如下所示:
其中
是校准后的用于下一阶段的输入。也就是说,原本的光照学习过程中第二阶段及以后的输入变成了由上述公式得到的结果(总的计算流程如图2所示),即光照优化过程的基本单元被重新公式化为:
实际上,该自校准模块通过引入物理规律(即Retinex理论),逐步校正了每一阶段的输入来间接地影响了每一阶段的输出,进而实现了阶段间的收敛。图3探究了自校准模块的作用,可以发现,自校准模块的引入使得不同阶段的结果能够很快地收敛到相同状态(即三个阶段的结果重合)。
图3 关于测试阶段是否采用自校准模块的增强结果t-SNE分布对比(阶段数为3)
(3)无监督损失函数
为了更好地训练提出的学习框架,该部分设计了一种无监督损失函数,以约束每一阶段的光照估计,公式表示如下:
其中前一项与后一项分别代表数据保真项及平滑正则项(关于各个变量的详细说明请参见论文)。
实验结果
(1)定量分析
表1展示了在著名的MIT-Adobe FiveK数据集上的定量结果对比,可以看出,提出方法取得了最优性能。值得注意的是,尽管提出方法为无监督方法,但其在PSNR与SSIM这类有参考指标上的结果均实现了最优,究其原因在于该数据集的Ground Truth是由专家修饰得到的,也说明了提出方法生成的结果更符合人类视觉习惯。
表1 在MIT-Adobe FiveK数据集上的定量结果对比
(2)真实场景下的视觉对比
图4展示了两组在有难度的真实场景下的增强结果对比。可以看出,相比于其他的方法,提出方法的增强结果亮度适中、细节丰富、色调自然、具有更高的视觉质量。
图4 真实场景下的增强结果对比
(3)下游任务性能分析
为了进一步探究SCI的优势,本文比较了在低光照人脸检测与夜间语义分割两个下游任务的性能。在低光照人脸检测任务中,定义了两种与SCI相关的版本,一种是将SCI作为预处理来实现数据的亮度增强(其他对比方法采用相同方式)并在该数据基础上微调检测网络,另一种是SCI与检测网络联合微调(记为SCI+)。图5中展示了检测结果,可以看出,本文提出的方法具有明显优势,能够检测出更多的小目标。
图5 低光照人脸检测结果对比
图6展示了夜间语义分割性能,可以看出,SCI获得了有竞争的数值结果,同时在类别划分上更准确,边缘刻画更清晰。
图6 夜间语义分割结果对比
总结与展望
本文提出的SCI在图像质量和推理速度方面均取得了突破,为低光照图像增强任务的解决提供了一种新的视角,即如何在有限资源下赋予网络模型更强的刻画能力,该种视角相信也能够为其他相关视觉增强领域带来启发。未来,作者将继续探究如何设计更有效的学习手段来建立轻量、鲁棒、面向更具有挑战真实场景的低光照图像增强方案。
如何更改循环中变量的名称?比如 number1 、 number2 、 number3 、 number4 ? var array = [2,4,6,8] func ap ( number1: Int
我想设置 View 的背景颜色并在一定延迟后将其更改为另一种颜色。这是我的尝试方式: print("setting color 1") self.view.backgroundColor = UICo
我在使用 express-session 时遇到问题。 session 数据不会在请求之间持续存在。 正如您在下面的代码中看到的那样,/join 路由设置了一些 session 属性,但是当 /sur
我试图从叶渲染器获得一个非常简单的结果,用于快速 Steam 的 for 循环。 我正在上传叶文件 HTML,因为它不接受此处格式正确的代码 - 下面的pizza.swift代码- import
你们中有人有什么好的链接可以与我分享吗?我正在寻找一个 FAST 程序员编辑器,它可以非常快速地打开包含超过 100, 000 行代码的文件?我目前正在使用记事本自动取款机,打开一个 29000 行长
我现在正在处理眼动追踪数据,因此拥有一个巨大的数据集(想想数百万行),因此希望有一种快速的方法来完成此任务。这是它的简化版本。 数据告诉您眼睛在每个时间点正在查看的位置以及我们正在查看的每个文件。 X
我是新手,想为计时器或其他设备选择提示音。 如何打开此列表,以选择其中一种声音? Alert sound list 最佳答案 您将无法在应用中使用系统声音。 但是,您可以包括自己的声音文件,并将其显示
我编写了以下代码来构建具有顺序字符串的数组。 它的工作方式与我预期的一样,但我希望它能更快地运行。有没有更有效的方法在PowerShell中产生我想要的结果? 我是PowerShell的新手,非常感谢
我有一个包含一些非唯一行的矩阵,例如: x 尝试 y <- rle(apply(x, 1, paste, collapse = " ")) # y$lengths is the vector con
我的函数“keyboardWillShown”有问题。所以我想要的是菜单打开时,菜单正好出现在键盘上方。它可以在Iphone 8 plus,8、7、6上完美运行。但是,当我在模拟器上运行Iphone
我正在尝试通过Swift 5中的HTTP get方法从API提取数据。它在启动时成功加载了数据,但是当我刷新页面时,它说“索引超出范围”,这是因为数据是不再会在我的日志中读取,因此索引中没有任何内容。
我想做什么: 从我的数据库中获取时间戳并将其转换为用户的时区。 我的代码: let tryItNow = "\(model.timestampName)" let format = D
给定字体名称和字体大小,如何查找字符串的宽度(CGFloat)? (目标是将UIView的宽度设置为足以容纳字符串的宽度。) 我有两个字符串:一个重复“1”,重复36次,另一个重复“M”,重复36次。
我正在尝试解析此JSON ["Items": ( { AccountBalance = 0; AlphabetType = 3; Description = "\U0631\U
我在UINavigationBar内放置了一个UILabel。 我想根据navigationBar的高度增加该标签的字体大小。当navigationBar很大时,我希望字体大小更大;当滚动并缩小nav
我想将用户输入限制为仅有效数字并使用以下内容: func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, rep
目前我有一个包含超过 100.000 张图像的数据库,它们大小不一或类似,但我想为我的公司制作以下内容: 我插入/上传一张图片,系统返回最有可能相同的图片。我不知道使用什么算法,但它需要快速。我可以预
在我的 swift 项目中,我有一个按钮,我想在标签上打印按下该按钮的时间。 如何解决这个问题? 最佳答案 添加到DHEERAJ的答案中,您只需在func press(sender: UIButton
我必须发表评论,尝试在解析中导入数组。然而,有一个问题。 当我尝试从 Parse 加载数组时,我的输出是 ("Blah","Blah","Blah")这是一个元组...而不是一个数组 TT... 如何
我的应用程序有一个名为 MyDevice 的类,我用它来与硬件通信。该硬件是可选的,实例变量也是可选的: var theDevice:MyDevice = nil 然后,在应用程序中,我必须初始化设备
我是一名优秀的程序员,十分优秀!