当前位置: 首页 > news >正文

4K-Resolution Photo Exposure Correction at 125 FPS with ~8K Parameters

MSLTNet开源 | 4K分辨率+125FPS+8K的参数量,怎养才可以拒绝这样的模型呢?

错误的曝光照片的校正已经被广泛使用深度卷积神经网络或Transformer进行广泛修正。尽管这些方法具有令人鼓舞的表现,但它们通常在高分辨率照片上具有大量的参数数量和沉重的计算浮点运算(FLOPs)。

在本文中,作者提出了一个极轻量级(仅有约8K参数)的多尺度线性变换(MSLT)网络,该网络采用多层感知架构,可以在125帧每秒(FPS)的速度下,使用泰坦RTX GPU处理4K分辨率sRGB图像。

具体来说,提出的MSLT网络首先使用拉普拉斯金字塔技术将输入图像分解为高和低频层,然后依次通过像素自适应线性变换来纠正不同层,这种实现方式是通过高效的双边网格学习或1×1卷积来实现的。在两个基准数据集上的实验表明,作者的MSLT在照片曝光校正方面与最先进的水平相比具有高效性。大量的消融实验验证了作者的贡献的有效性。

代码:https://github.com/Zhou-Yijie/MSLTNet

1 Introduction

智能手机摄像头的普及使人们像摄影师一样捕捉日常生活场景。然而,快门速度、焦距光圈比和/或ISO值设置不准确可能导致捕捉到的照片曝光不正确,视觉质量下降。为了以视觉上可取的方式正确调整照片曝光,对于边缘设备开发高效的曝光校正方法至关重要。

在过去的几十年里,提出了低光增强方法和过曝校正方法来分别调整欠曝和过曝图像的亮度。然而,低光增强方法在矫正过曝图像时几乎无法实现,而过曝校正方法在矫正欠曝图像时则无法正常工作。

高动态范围(HDR)调色映射方法也可以在一定程度上调整内容的不正确曝光,但主要是通过在曝光不正确区域的局部细节增强以及动态范围减少来实现。最后,所有这些方法都不适合曝光校正,因为曝光校正需要在图像中的不正确曝光进行全局调整。

近年来,基于卷积神经网络(CNN)或Transformer的曝光校正方法或也出现了几种。例如,多尺度曝光校正(MSEC)使用拉普拉斯金字塔技术和UNet架构进行层次曝光校正。后来,[48]的工作利用局部颜色分布先验(LCDP)来定位和增强不正确曝光区域。

基于注意力的照明自适应Transformer(IAT)在Transformer架构下估计与图像信号处理器(ISP)相关的参数。尽管这些曝光校正的卷积神经网络或Transformer具有令人鼓舞的表现,但它们通常受到大量参数数量和计算成本的限制。

为了在提高模型效率的同时产生视觉上令人满意的结果,本文提出了一种极轻量级的多尺度线性变换(MSLT)网络,用于高分辨率图像曝光校正。具体来说,作者首先通过拉普拉斯金字塔技术将输入图像分解为高频和低频层,以实现从粗到细的曝光校正。然后作者设计简单的线性变换网络逐步校正这些层,消耗较少的参数数量和计算成本。对于低频层,作者采用双边网格学习(BGL)框架,在不良曝光和正确曝光图像对之间学习像素级仿射变换。

为了在BGL中学习上下文感知的变换系数,作者提出了一种无参数的上下文感知特征分解(CFD)模块,并将其扩展为多尺度仿射变换。对于高频层,作者通过两个通道的1×1卷积层简单地学习像素级校正Mask。

得益于使用多层感知(MLP)进行从粗到细的曝光校正,作者的最大网络MSLT++有8098个参数,只需要0.14G和3.67ms来处理一个的图像,使用RTX GPU。

作为比较,基于CNN的MSEC、LCDP和基于Transformer的IAT的参数数量分别为约7015K、约282K和约86.9K,对应的FLOPs/速度分别为73.35G/240.46ms、17.33G/507.67ms和22.96G/153.96ms。在两个基准数据集上的实验表明,作者的MSLTs在定量和定性方面都优于最先进的曝光校正方法。如图1所示,在ME数据集上的性能比较结果。

作者主要的贡献可以总结如下:

1. 开发了具有最多8098个参数的多尺度线性变换网络,在运行4K分辨率(3840X2160X3)图像时,最多可达到125 FPS,并具有有效的曝光校正性能。

2.为了加速多尺度分解,设计了一个双边网格网络(BGN)来像素级校正低频层的曝光。

3.通过使用通道级MLP而不是CNN或Transformer来实现BGN,以赋予作者的MSLTs较小的参数数量和计算成本。

4.提出了一种上下文感知特征分解(CFD)模块,用于在作者的BGN中学习层次变换系数,以实现有效的曝光校正。

2 Related Work

Image Exposure Correction Methods

曝光校正任务类似于低光图像增强、过曝校正和HDR调色映射等任务,但又有不同。据作者所知,MSEC是第一个基于深度学习的曝光校正方法。该方法将图像分解为高频和低频部分,并逐步校正曝光错误。然而,MSEC有超过700万个参数,在高分辨率图像上的效率不足。

Local Color Distributions Prior(LCDP)利用局部颜色分布来统一处理欠曝和过曝,大约有282K个参数,需要巨大的计算成本,17.33G FLOPs,处理一个1024X1024X3X3的图像。基于Transformer的照明自适应Transformer(IAT)有大约86.9K个参数,但在高分辨率图像上存在巨大的计算成本和缓慢的推理速度。

在本文中,作者提出了一种轻量级和高效的Multi-Scale Linear Transformation(MSLT)网络,其参数数量最多为8098个,并且可以在125 FPS的速度下运行,用于校正不正确的4K分辨率图像曝光。

Image Processing MLPs

在卷积神经网络(CNNs)和Transformer的繁荣之前,多层感知(MLPs)在视觉任务中起着重要的作用。MLP为基础的网络再次引起了研究人员注意,因为它们具有简单性。MLP-Mixer是一种纯粹基于MLP的网络,没有卷积或自注意力。后来,ResMLP被提出,它只使用线性层和GELU非线性。gMLP的工作利用具有gating的MLP来实现与Transformer在图像分类上相似的结果。Ding等人提出了一种再参数化技术来提高MLP在图像分类上的能力。最近开发的MAXIM是一种多轴MLP为基础的网络,用于通用图像处理任务。

在本文中,作者开发了一种非常高效的曝光校正网络,该网络主要利用通道MLPs(而不是空间MLPs)来全局感知图像的曝光信息。

Light-weight Image Enhancement Networks

为了追求轻量级和高效的模型,一种简单的方法是将模型应用于低分辨率输入,然后将输出放大到高分辨率。但高频细节会丢失。为此,Laplacian Pyramid分解被用来保留高频信息。另一种方法是学习一个近似算子,并将其应用于下采样输入,然后将这个算子应用于原始图像。这样的近似算子通常简单且高效。后来,这个近似洞察也被研究了,用于加速图像处理方法在图像增强、图像去雾和立体匹配等任务上的应用。

在本文中,作者设计了使用拉普拉斯金字塔技术和双边网格学习框架的轻量级和高效的图像曝光校正网络。与CNN和Transformer不同,作者的双边网格网络纯粹由通道MLP实现,消耗的参数和计算成本比CNN和Transformer少得多。

3 Proposed Method

Network Overview

Low-Frequency Layer Correction

照明信息主要存在于低频中,因此作者更关注低频层的有效曝光校正。受到在高效图像处理上的成功启发,作者采用双边网格学习来校正低频层的曝光。

如图2所示,作者的双边网格网络包含三个部分:

  1. 学习引导图;

  2. 估计仿射系数的双边网格;

  3. 系数变换。

如图3(a)所示,上下文感知特征是通过将原始特征通道乘以全局平均池化和全局标准池化计算的平均值和标准差得到的。作者将CFD扩展为一个层次化的特征分解(HFD)模块,通过将三个共享参数的CFD和SFE模块堆叠在一起,如图3(c)所示。

目标是学习一个16x16x72的仿射系数3D双边网格,其中每个12个通道表示一个3x4仿射矩阵。作者通过通道级的1x1卷积来实现层次化的特征分解(HFD)模块,以进行空间一致性和像素自适应亮度调整。在ReLU之前,三个共享参数的1x1卷积(如图3(c)所示),具有较少的参数数量和计算成本。

如图4所示的校正强度热图与输入图像 I 的上下文密切相关。这表明作者的MSLT确实实现了像素自适应的曝光校正。

 

 

 

在SICE上,作者的MSLTs与MSECs具有可比性能,但比IAT和FECNet稍逊一筹。然而,作者的MSLTs在效率方面优于所有比较方法,如表3所示。

在图6中,作者提供了ME数据集中的"Manor"和SICE数据集中的"Mountain"的校正图像,分别由比较方法生成。更多视觉比较结果可参见补充文件。

在过曝的"Manor"图像上,可以看出Zero-DCE,SCI,LPTN和Channel-MLP很难减弱曝光。作者的MSLTs在云、墙壁和草坪的细节上比LCDP和IAT更好。校正后的MSEC图像对比度过高,不够真实。在欠曝的"Mountain"图像上,作者的MSLTs在整体亮度和绿叶细节方面都优于其他方法。

 

 

 

在作者的MSLT+和MSLT++中,作者引入可学习3X3的卷积核,步长为2用于Laplacian金字塔分解中的下采样,以及步长为1的3X3卷积核 followed by 双线性插值用于Laplacian金字塔重构中的上采样。

相关文章:

4K-Resolution Photo Exposure Correction at 125 FPS with ~8K Parameters

MSLTNet开源 | 4K分辨率125FPS8K的参数量,怎养才可以拒绝这样的模型呢? 错误的曝光照片的校正已经被广泛使用深度卷积神经网络或Transformer进行广泛修正。尽管这些方法具有令人鼓舞的表现,但它们通常在高分辨率照片上具有大量的参数数量和沉…...

网络初识:局域网广域网网络通信基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、局域网LAN是什么?二、广域网是什么:三. IP地址四.端口号五.认识协议5.1五元组 总结 前言 一、局域网LAN是什么? 局域网…...

JVM之jps虚拟机进程状态工具

jps虚拟机进程状态工具 1、jps jps:(JVM Process Status Tool),虚拟机进程状态工具,可以列出正在运行的虚拟机进程,并显示虚拟机执 行主类(Main Class,main()函数所在的类)的名称&#xff0c…...

C++实现顺序栈的基本操作(扩展)

#include <stdio.h> typedef char ElemType; #define StackSize 100 /*顺序栈的初始分配空间*/ typedef struct { ElemType data[StackSize]; /*保存栈中元素*/int top; /*栈顶指针*/ } SqStack; void InitStack(SqStack &st) {st.top-1; } …...

用python写一个简单的爬虫

爬虫是一种自动化程序&#xff0c;用于从互联网上获取数据。它能够模拟人类浏览网页的行为&#xff0c;访问网页并提取所需的信息。爬虫在很多领域都有广泛的应用&#xff0c;例如数据采集、信息监控、搜索引擎索引等。 下面是一个使用Python编写的简单爬虫示例&#xff1a; …...

分布式追踪

目录 文章目录 目录自定义指标1.删除标签2.添加指标3.禁用指标 分布式追踪上下文传递Jaeger 关于我最后最后 自定义指标 除了 Istio 自带的指标外&#xff0c;我们还可以自定义指标&#xff0c;要自定指标需要用到 Istio 提供的 Telemetry API&#xff0c;该 API 能够灵活地配…...

make -c VS make -f

make 是一个用于构建&#xff08;编译&#xff09;项目的工具&#xff0c;它通过读取一个名为 Makefile 的文件来执行构建任务。make 命令有很多选项和参数&#xff0c;其中包括 -c 和 -f。 make -c&#xff1a; 作用&#xff1a;指定进入指定的目录并执行相应的 Makefile。 示…...

Unity 代码控制Color无变化

Unity中&#xff0c;我们给Color的赋值比较常用的方法是&#xff1a; 1、使用预定义颜色常量&#xff1a; Color color Color.white; //白色 Color color Color.black; //黑色 Color color Color.red; //红色 Color color Color.green; //绿色 Color color Color.blue; …...

【Erlang进阶学习】2、匿名函数

受到其它一些函数式编程开发语言的影响&#xff0c;在Erlang语言中&#xff0c;将函数作为一个对象&#xff0c;赋予其“变量”的属性&#xff0c;即为我们的匿名函数 或 简称 fun&#xff0c;它具有以下特性&#xff1a; &#xff08;匿名函数&#xff1a;不是定义在Erlang模…...

肖sir__mysql之视图__009

mysql之视图 一、什么是视图 视图是一个虚拟表&#xff08;逻辑表&#xff09;&#xff0c;它不在数据库中以存储形式保存&#xff08;本身包含数据&#xff09;&#xff0c;是在使用视图的时候动态生成。 二、视图作用 1、查询数据库中的非常复的数据 例如&#xff1a;多表&a…...

FPGA falsh相关知识总结

1.存储容量是128M/8 Mb16MB 2.有256个sector扇区*每个扇区64KB16MB 3.一页256Byte 4.页编程地址0256 5&#xff1a;在调试SPI时序的时候一定注意&#xff0c;miso和mosi两个管脚只要没发送数据就一定要悬空&#xff08;处于高组态&#xff09;&#xff0c;不然指令会通过两…...

升辉清洁IPO:广东清洁服务“一哥”还需要讲好全国化的故事

近日&#xff0c;广东物业清洁服务“一哥”升辉清洁第四次冲击IPO成功&#xff0c;拟于12月5日在香港主板挂牌上市。自2021年4月第一次递交招股书&#xff0c;时隔两年半&#xff0c;升辉清洁终于拿到了上市的门票。 天眼查显示&#xff0c;升辉清洁成立于2000年&#xff0c;主…...

Python自动化办公:PDF文件的分割与合并

我们平时办公中&#xff0c;可能需要对pdf进行合并或者分割&#xff0c;但奈何没有可以白嫖的工具&#xff0c;此时python就是一个万能工具库。 其中PyPDF2是一个用于处理PDF文件的Python库&#xff0c;它提供了分割和合并PDF文件的功能。 在本篇博客中&#xff0c;我们将详细…...

破解app思路

1.会看smali代码逻辑 一.快速定位关键代码 1.分析流程 搜索特征字符串 搜索关键 api 通过方法名来判断方法的功能 2.快速定位关键代码 反编译 APK 程序 AndroidManifest.xml>包名/系统版本/组件 程序的主 activity(程序入口界面) 每个 Android 程序…...

背景特效插件:Background Effects

...

36.位运算符

一.什么是位运算符 按照二进制位来进行运算的运算符叫做位运算符&#xff0c;所以要先将操作数转换成二进制&#xff08;补码&#xff09;的形式在运算。C语言的中的位运算符有&#xff1a; 运算符作用举例结果& 按位与&#xff08;and&#xff09; 0&00; 0&10; …...

C#异常处理-throw语句

throw语句是我们手动引发异常的一个语句。 在程序执行过程中&#xff0c;当某些条件不符合我们的要求时&#xff0c;那么我们就可以使用throw语句手动抛出异常&#xff0c;那么就可以在异常发生的地方终止当前代码块的执行&#xff0c;此时我们就可以把控制权传递给调用堆栈中…...

PlantUML语法(全)及使用教程-时序图

目录 1. 参与者1.1、参与者说明1.2、背景色1.3、参与者顺序 2. 消息和箭头2.1、 文本对其方式2.2、响应信息显示在箭头下面2.3、箭头设置2.4、修改箭头颜色2.5、对消息排序 3. 页面标题、眉角、页脚4. 分割页面5. 生命线6. 填充区设置7. 注释8. 移除脚注9. 组合信息9.1、alt/el…...

231204 刷题日报

21. 合并两个有序链表 单调栈没看懂&#xff0c;晚上回家再说吧 380. O(1) 时间插入、删除和获取随机元素 今天被接雨水钉在耻辱柱&#xff0c;找时间再看吧...

PTA 7-229 sdut-C语言实验- 排序

给你N(N<100)个数,请你按照从小到大的顺序输出。 输入格式: 输入数据第一行是一个正整数N,第二行有N个整数。 输出格式: 输出一行&#xff0c;从小到大输出这N个数&#xff0c;中间用空格隔开。 输入样例: 5 1 4 3 2 5输出样例: 1 2 3 4 5 #include <stdio.h>…...

原生横向滚动条 吸附 页面底部

效果图 /** 横向滚动条 吸附 页面底部 */ export class StickyHorizontalScrollBar {constructor(options {}) {const { el, style } optionsthis.createScrollbar(style)this.insertScrollbar(el)this.setScrollbarSize()this.onEvent()}/** 创建滚轴组件元素 */createS…...

1+x网络系统建设与运维(中级)-练习3

一.设备命名 AR1 [Huawei]sysn AR1 [AR1] 同理可得&#xff0c;所有设备的命名如上图所示 二.VLAN LSW1 [LSW1]vlan 10 [LSW1-vlan10]q [LSW1]int g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type access [LSW1-GigabitEthernet0/0/1]port default vlan 10 [LSW1-GigabitEt…...

知识图谱07——图片中表格开源ocr识别

对比了多种ocr识别算法&#xff0c;最终选择了百度paddle官方的ocr算法 在所在的虚拟环境下运行 pip install paddleocr --userfrom paddleocr import PaddleOCR import os import csv# 创建 PaddleOCR 对象 ocr PaddleOCR(use_gpuTrue) # 无gpu时选择False# 指定图片文件夹…...

每日一练2023.12.4——正整数【PTA】

一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#xff0c;index[1]0 对应 arr[0]8&#xff0c;index[2]3 对应 arr[3]0&#xff0c;以此类推…… 很容易得到电话号码是18013…...

golang之net/http模块学习

文章目录 开启服务开启访问静态文件获取现在时间按时间创建一个空的json文件按时间创建一个固定值的json文件 跨域请求处理输出是json 开启服务 package mainimport ("fmt""net/http" )//路由 func handler(w http.ResponseWriter, r *http.Request){fmt.…...

Python中format函数用法

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 format优点 format是python2.6新增的一个格式化字符串的方法&#xff0c;相对于老版的%格式方法&#xff0c;它有很多优点。 1.不需要理会数据类型的问题&#…...

Android 断点调试

Android 调试 https://developer.android.google.cn/studio/debug?hlzh-cn 调试自己写的代码&#xff08;不在Android源码&#xff09; 点击 Attach debugger to Android process 图标 需要在添加断点界面手动输入函数名 但也可以不手动&#xff0c;有个技巧可以new 空proje…...

对抗神经网络 CGAN实战详解 完整数据代码可直接运行

代码视频讲解: 中文核心项目:对抗神经网络 CGAN实战详解 完整代码数据可直接运行_哔哩哔哩_bilibili 运行图: 完整代码: from keras.layers import Input, Dense, Reshape, Flatten, Dropout, multiply from keras.layers import BatchNormalization, Activation, Embedd…...

LeetCode417. Pacific Atlantic Water Flow

文章目录 一、题目二、题解 一、题目 There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island’s left and top edges, and the Atlantic Ocean touches the island’s right and bottom edges…...

Python字符串模糊匹配工具:TheFuzz 库详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在处理文本数据时&#xff0c;常常需要进行模糊字符串匹配来找到相似的字符串。Python的 TheFuzz 库提供了强大的方法用于解决这类问题。本文将深入介绍 TheFuzz 库&#xff0c;探讨其基本概念、常用方法和示例代…...

新疆做网站哪家好/海外市场推广做什么的

我有一个Thread-extends类,它应该一次只运行一个实例(跨进程).为了实现这一点,我正在尝试使用文件锁.以下是我的代码&#xff1a;class Scanner(Thread):def __init__(self, path):Thread.__init__(self)self.lock_file open(os.path.join(config.BASEDIR, "scanner.lock…...

图片设计 五星级酒店网站/天门网站建设

python3 数组(列表)初始化 1. 初始化一个定长的数组 有时需要预定义一个定长的数组&#xff0c;并给每个元素赋值 方法1&#xff1a; python3中代码如下&#xff1a;#codingutf-8 item PythonTab array [item for v in range(10)] #把 item 的值赋给 range()迭代器的每个元素…...

wordpress瀑布流/网站优化入门免费教程

2.请实现一个函数&#xff0c;将一个字符串中的每个空格替换成“%20”。例如&#xff0c;当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy function replaceSpace(str) {return str.replace(/\s/g,%20) } 转载于:https://www.cnblogs.com/manru75/p/10260331…...

深圳较便宜的网站建设/seo行业

获取变量类型 typeof(var) Number String 类型转换 parseInt parseFloat Date() getDate() 1-31日 getTime() 1970-1-1到当前的毫秒数 getDay() 星期几0-6 getHours() getMinutes() getSeconds() setFullYear() setDate() getFullYear()...

电商网站类型/百度seo快速见效方法

1&#xff1a;基于相同IP不同Port的虚拟主机vim /etc/httpd/conf/httpd.conf更改Listen字段(此设置表示使用80以及8888端口)更改虚拟主机部分为&#xff1a;保存以上设置创建目录以及页面文件&#xff1a;(注&#xff1a;在/etc/httpd/conf/httpd.conf 中有DirectoryIndex inde…...

福建省建建设行业信用评分网站/无锡优化网站排名

侧滑菜单有很大的坑&#xff0c;根据网友的描述&#xff0c;在苹果上正常&#xff0c;安卓上不能用。并且社区里很多人提了问题都没得回复。目前最有效的方法只能修改源码&#xff0c;增加window.h5pullDown的判断。在引入mui前添加一个全局变量var h5pullDown true;方案一我是…...