深度学习弱光图像增强入门学习贴及相关可参考工作推荐

0 引言

先表明身份,在过去三年的时间里,发表弱光图像增强的SCI工作多篇,后续会在Github的代码库构建好之后,分享代码链接,欢迎关注(由于工作过于垃圾,因此咱还是以大佬的工作作为参考

首先,弱光图像增强,就是把暗图像增强为亮图像

这里有一个很大的误区,就是弱光增强并不是仅仅把灰度值调亮,而是把亮度提高的同时,必须保证对比度的一致,同时!色彩的饱和度高并且纹理细节的还原也必须优秀!

因此,弱光图像增强其实还是挺有难度的。

接下来,我们将分块进行弱光图像-深度的学习。

1 深度学习部分

首先,深度学习您是否掌握?深度学习我们这里仅仅要求您掌握神经网络的基础框架即可。在我看来,您想快速入门深度学习,最好的不是去看B站上任何的垃圾课程,而是专注于您的第一个网络的复现工作。

首先,您需要了解神经网络的基本工作原理;简明扼要,它是使用多个卷积核,通过对图像进行多尺度的分解,分解成一个一个的特征图。之后,在对其进行叠加即可。

说白了,你可以很玄学的去认为,它就是一堆卷积核穿起来,构成了一个可以改变图像灰度值的线性+非线性映射。

当然,知乎和CSDN上有大量的大佬,写了很多关于神经网络和卷积核的讲解,大家可以自己去搜。这里我就不再多将。

我推荐您复现这两个网络:VGG16和Resnet的任何版本。

您必须学会构建您的全连接网络,学会跳跃连接的操作,以及明白池化层,以及上下采样的意义。

最重要的,您必须会开启您的训练,必须知道如何用现有数据集开启训练,我这里指的是有监督学习。

有个大概的概念之后,我们将进入下一步!

2 弱光图像增强基础:

弱光图像增强你需要指导它存在3个核心问题:亮度低,对比度差、图像质量低(可以理解为色彩饱和度很垃圾,很难提取有用信息),OK,我们从3个方面来讲讲图像领域如何处理这种情况

2.1 亮度增亮

亮度增强中,在Opencv包括Photoshop里最喜欢用的,就是直接用灰度值去提升亮度。但是这种全局的增强有一个很大的问题。全局亮度提升,这玩意儿导致了所有的像素点都提升了,你还是看不见任何的区别。你可以看见,从直方图分布来看,弱光图像的像素分布问题在于:像素过于集中在左右两极。单纯的灰度值拉升,只会导致图像的信息没有得到任何有效增强。

因此,直接采用亮度提升,肯定是不行的,必须使用局部的亮度提升,才是最好的结果。

在这方面,我推荐一下近年来最经典的工作:ZERO-DCE

这篇工作的效果几乎堪称轰动。为啥呢?因为它在本领域的效果几乎是王炸。极其简单且效果拔群。

论文链接:https://openaccess.thecvf.com/content_CVPR_2020/papers/Guo_Zero-Reference_Deep_Curve_Estimation_for_Low-Light_Image_Enhancement_CVPR_2020_paper.pdf

代码链接:https://github.com/Li-Chongyi/Zero-DCE

简单讲解就是,Guo使用了一个深度网络对图像特征进行疯狂分解,然后,重点来了。他构建了一个零参考数据集。这个数据集很牛逼。每一张图像,存在不同的亮度等级。它通过让网络学习这些亮度等级的分布,从而到达取中间值的效果。如下所示,你可以看见,他为了取数据集中所有亮度的中间值,在里面甚至加入了极暗和曝光的情况。

为啥不是全局增强呢,因为他使用split,将图像分为了很多个部分进行函数迭代。

这里的函数迭代,来源于调光曲线的灵感,他构建了如下的二次乘法式子:

这里的α也就是上述使用split分割的局部特征。然后将这个局部特征放入网络中进行迭代增强。最终达到保持对比度的全局增强的效果。

最终取得的效果也很牛逼!我强烈建议您将其纳入您的第一个复现工作,因为它的代码极度简单,并且极好复现,最重要的是,它的代码参数量,仅有0.003M的大小。

它的同类工作,特别多。

我将推荐下面几个基于Zero-dce的改进作为您打开思路的参考。

2.1.1 STAR:A Structure-aware Lightweight Transformer for Real-time Image Enhancement

使用Transformer对图像特征进行增强,但大体的增强逻辑,基于Zero-DCE的迭代函数

论文链接:https://ieeexplore.ieee.org/document/9710083

代码链接:https://github.com/zzyfd/STAR-pytorch

2.1.2 FLW-NET:A Fast and Lightweight Network for Low-Light Image Enhancement

一种魔改的轻量化Zero-DCE,加了一个全局感受野的Moudle,整体还行。我觉得可以作为参考。

论文链接:https://arxiv.org/pdf/2304.02978v1.pdf

代码链接:FLW-Net/model.py at main · hitzhangyu/FLW-Net (github.com)

2.1.3 LUT-GCE: Lookup Table Global Curve Estimation for Fast Low-light Image Enhancement

这个改进我自己觉得比前面这些对Moudle进行改进的都要更好一些。这篇文章主要的改进,是把Zero-DCE里的二次函数改成了一个三次函数,我觉得这篇paper的点很好,但是没有提供多余的代码。说实话有点遗憾。而且它摘要说它们的网络参数量25.4k,我觉得并不太行,因为现在的轻量化模型基本来到了10k以下的战场,仍在25.4k,其实并不算一个特色:

文章链接:https://arxiv.org/abs/2306.07083

代码:没公布

2.2 对比度增强

对比度增强主要来源于一个公式:

对比度增强在早期的工作,主要是源于直方图的调整。但是大家都知道,直方图,太老了,说实话,这年头还搞直方图实在有点没有亮点了。而且其实你自己编程会发现,直方图转为Tensor与神经网络进行交互实在有些太麻烦了。因此,我们最好就别用直方图。

接下来,我将介绍两篇。这两篇是我觉得在对比度增强上还算不错的工作。

2.2.1 The linear contrast enhancement formula is given as follows Linear Contrast Enhancement Network for Low-Illumination Image Enhancement 

这篇工作特别好。虽然他在模型构建上来说似乎没有特别大的特色。但是呢,我非常推荐它里面提出的残差块,它取名叫LCE-Resblock。如下图所示,它使用神经网络取模拟我们上面提到的对比度增强公式,效果确实不错。

文章链接:https://ieeexplore.ieee.org/document/10001830

代码链接:https://ieeexplore.ieee.org/document/10001830

其他的创新,我觉得不算太亮眼,主要是针对特征提取的部分。但LCE-ResBlock我是觉得很不错的即插即用的模块。

2.2.2 The linear contrast enhancement formula is given as follows Linear Contrast Enhancement Network for Low-Illumination Image Enhancement

这篇文章我觉得还可以,效果也不错。只不过它是专门针对对比度增强提出的双分支网络。其实相对于上面的LCE-NET有一点繁琐了。

文章链接:https://ieeexplore.ieee.org/document/10001830

代码链接:https://github.com/zhuyr97/GLCE

2.3 特征提取及色彩恢复

其实到这个环节,就很抽象了。因为其实无论特征提取还是色彩恢复,这都是一个有监督学习的过程。当我们不考虑使用生成对抗网络GAN和后续的Diffusion Model这类生成式技术的时候,特征提取这个环节,几乎任何任务都能做是吧。

特征提取模型,灌水重灾区,魔改版本众多。超分领域、图像增强领域、目标识别领域、图像分割领域………………特征提取模块实在是过于抽象。

我这里从两个方面来推荐工作。一个是注意力模块来推荐,一个是传统的特征融合来推荐。

2.3.1 注意力模块

太多了,实在是太多了

早年的大水文,AFF,其实它的结构和传统的通道注意力,以及空间注意力就很像了。我推荐一个高速的轻量化注意力结构,来自超分算法FMEN。其余的大家自行去搜索一下。其实注意力模块每年都有大量的魔改。你可以看看有多少人在YOLO里加注意力的魔改,就可以知道这部分的水分其实还是挺大的,

文章链接:https://ieeexplore.ieee.org/document/9856988

代码链接:https://github.com/NJU-Jet/FMEN

FMEN提出了一个高效的注意力模块HFAB。这个模块可以直接插入到您的网络结构中,我试了下,在图像恢复里,其实效果还可以。

2.3.2 特征提取模块

好家伙,如果说注意力模块是灌水重灾区,那么特征提取模块,将成为真正的王炸级深海!这个部分简直抽象得令人发指。近年来得抽象主义魔改太多了。

早年ECCV得多尺度超分算法魔改:

文章链接:http://Multi-scale Residual Network for Image Super-Resolution

代码链接:https://github.com/MIVRC/MSRN-PyTorch

去年的抽象代表,重参数残差块:

文章链接:https://ieeexplore.ieee.org/document/10208691

代码链接:https://github.com/laonafahaodange/RepRFN

当然,还有如下的抽象主义(我真的无语了当时,可能我自己不太懂这个行业吧。。。这是仿生鹰眼结构。。。。是长得像鹰眼吗。。。

文章链接:https://link.springer.com/article/10.1007/s11063-022-11030-1

3 近期全新赛道

近期的发展其实在弱光增强领域,就是跟着新技术混呗。我太想将GAN的应用,以为其实发展到现在,EnlightenGAN还是最好的GAN算法。其次,在轻量化赛道,SCI这篇文章已经把参数量卷到300个了,真的太抽象了。

EnlightenGAN:

文章:https://arxiv.org/abs/1906.06972

代码:https://github.com/VITA-Group/EnlightenGAN

SCI:
文章:https://arxiv.org/abs/2204.10137

代码:https://github.com/vis-opt-group/SCI

后续我会专门开一个轻量化弱光图像增强的文章,具体讲一讲近年来的发展,欢迎各位监督和催促(求关注~

然后,从CVPR2023开始,全新的赛道,特就是NERF的赛道也打开了:

基于Nerf的弱光图像增强,其实今年有一篇还不错叫LLNerf,也公布了代码,我自己觉得还挺好的。

文章链接:https://arxiv.org/abs/2307.10664

代码链接:https://github.com/onpix/LLNeRF

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

推荐一款低成本半桥驱动器集成电路 SIC631CD-T1-GE3

SIC631CD-T1-GE3 是经过优化的集成功率级解决方案用于同步降压应用,提供大电流、高电压效率高,功率密度高。使电压调节器设计能够提供高达50 A的电流每相持续电流。内部功率MOSFET利用Vishay的最先进的第四代TrenchFET技术行业基准绩效将显著降低开关和传…

深入浅出Spring AOP

第1章:引言 大家好,我是小黑,咱们今天要聊的是Java中Spring框架的AOP(面向切面编程)。对于程序员来说,理解AOP对于掌握Spring框架来说是超级关键的。它像是魔法一样,能让咱们在不改变原有代码的…

XSS漏洞:prompt.mi靶场通关

xss系列往期文章: 初识XSS漏洞-CSDN博客 利用XSS漏洞打cookie-CSDN博客 XSS漏洞:xss-labs靶场通关-CSDN博客 目录 第0关 第1关 第2关 第3关 第4关 第5关 第6关 第7关 第8关 第9关 第A关 第B关 第C关 第D关 第E关 第F关 上一篇文章给…

c语言将csv文件中的XY轴数据转换为html波形图

目标: c语言实现一个最简化的csv转html波形图显示方案。 csv文件格式: 共两行数据,第一行是x轴数据,第二行是y轴数据。 csv文件名分为3段: 波形图名称,x轴名称,y轴名称。 c代码: int csv2html…

springboot集成shiro+前端vue,前后端分离项目遇到跨域以及sessionid拿不到等问题

近期在写前后端分离的项目,由于前后端分离导致原来使用的shiro配置无法满足现有系统要求。同时在前后端分离项目中存在的一些问题。例如,一些用户信息需要存储在后端方便进行安全性判断,但这些存储在后端的session前端却获取不到(…

开发知识点-java基础

java基础知识整理 windows 多版本java jar包不能直接打开 需要java -jar问题解决 windows 多版本 控制面板 java15 download 多版本 https://www.cnblogs.com/chenmingjun/p/9941191.html https://gitee.com/shixinke/JC-jEnv/repository/archive/master.zip java jar包不…

2024年AMC8历年真题练一练和答案详解(10),以及全真模拟题

六分成长继续为您分享AMC8历年真题,最后两天通过高质量的真题来体会快速思考、做对题目的策略。 题目从575道在线题库(来自于往年真题)中抽取5道题,每道题目均会标记出自年份和当年度的序号,并附上详细解析。【使用六…

CUDA tips

命令行查看核函数消耗的寄存器和共享内存数量 nvcc --ptxas-options-v reduce_sum.cu nvprof 使用 由于 8.0 及以上计算能力的显卡用不了 nvprof,官方建议用 nsight system 和 ncu,但是如果只想命令行打印表格查看 kernel 概况感觉还是 nvprof 方便&am…

三个方法解决pycharm中 ,alt +enter自动导入包的快捷键失效的问题

目录 1. 检查IDE设置:查看IDE的设置,确保自动导入包的功能是启用的 2. file>settings>keymap 里没有找到 alt enter 的快捷键 3. 按照网上教程说的如下选项勾上,也没用 4. 在右侧的General设置界面中,找到并点击Auto I…

YOLOv5改进 | 2023主干篇 | 多种轻量化卷积优化PP-HGNetV2改进主干(全网独家创新)

一、本文介绍 Hello,大家好,上一篇博客我们讲了利用HGNetV2去替换YOLOv5的主干,经过结构的研究我们可以发现在HGNetV2的网络中有大量的卷积存在,所以我们可以用一种更加轻量化的卷积去优化HGNetV2从而达到更加轻量化的效果(亲测优化后的HGNetV2网络比正常HGNetV2精度更高…

Mac OS系统 SVN客户端 smartSVN 安装和基础使用

一、下载SVN客户端 官网地址,可以根据自己的系统下载 https://www.smartsvn.com/download/ 二、安装客户端和激活 第一步安装,很简单。 第二步,激活,选择激活文件 创建一个许可文件,例如 smartSvn.license。 内容如…

RabbitMQ交换机(1)

1.交换机Exchange RabbitMQ消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。 相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简单&am…

PDF有编辑密码怎么办

目录 注意: windows方法: 1 python 下载 2 打开命令行 3 安装 pikepdf 4 编写python脚本 5 使用py脚本 6解密完成 Linux方法: 注意: 此方法可以用于破解PDF的编辑密码,而不是PDF的打开密码 当遇到类似如下问…

Matlab交互式的局部放大图

在数据可视化中,很多时候需要对某一区间的数据进行局部放大,以获得对比度更高的可视化效果。下面利用 MATLAB 语言实现一个交互式的局部放大图绘制。 源码自行下载: 链接:https://pan.baidu.com/s/1yItVSinh6vU4ImlbZW6Deg?pwd9d…

【机器学习300问】10、学习率设置过大或过小对训练有何影响?

在上一篇文章中,首次出现了学习率这个词,在这篇文章中我会详细介绍一下它是什么,到底对机器学习的训练有着怎样的影响。 一、学习率是什么? 先来复习一下梯度下降算法,在每次迭代过程中,算法计算目标函数关…

给WordPress网站增加一个带时间的led广告牌

WordPress 后台》外观》小工具》自定义html》添加到合适位置 其他系统可自行添加合适位置 <style type"text/css">.studytextgzbox {background: #F9F9F9; border: 1px solid #999999;margin: 1px;text-align:center; float: left;line-height: 28px;hei…

WordPress回收站自动清空时间?如何关闭回收站或设置自动清理天数?

我们在WordPress后台的文章、页面、评论等页面都可以看到有回收站&#xff0c;意思就是我们不能直接删除某篇文章、页面、评论&#xff0c;而是需要现将它们移至回收站&#xff0c;然后再到回收站永久删除&#xff0c;或等回收站自动清理。 如上图所示&#xff0c;WordPress 6.…

【机组】算术逻辑运算单元实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a; 一、 实验目的…

服务器推送数据你还在用 WebSocket么?

当涉及到推送数据时,人们首先会想到 WebSocket。 的确,WebSocket 允许双向通信,可以自然地用于服务器到浏览器的消息推送。 然而,如果只需要单向的消息推送,HTTP 通过服务器发送的事件也有这种功能。 WebSocket 的通信过程如下: 首先,通过 HTTP 切换协议。服务器返回 101 状…

rust获取本地ip地址的方法

大家好&#xff0c;我是get_local_info作者带剑书生&#xff0c;这里用一篇文章讲解get_local_info的使用。 get_local_info是什么&#xff1f; get_local_info是一个获取linux系统信息的rust三方库&#xff0c;并提供一些常用功能&#xff0c;目前版本0.2.4。详细介绍地址&a…
最新文章