HCLR-Net: 混合对比学习正则化与局部随机扰动用于水下图像增强

news2025/1/23 6:10:29

论文地址:https://doi.org/10.1007/s11263-024-01987-y

源码:https://github.com/zhoujingchun03/HCLR-Net

摘要:

由于水下环境复杂多样,导致光吸收、散射和色彩失真等严重退化现象,因此水下图像增强是一项重大挑战。更重要的是,为这些场景获取配对训练数据是一项具有挑战性的任务,这进一步阻碍了增强模型的泛化性能。为了解决这些问题,提出了一种新方法--混合对比学习正则化(HCLR-Net)。此方法建立在一种独特的混合对比学习正则化策略之上,其中包含一种构建负样本的独特方法。这种方法能使网络形成更稳健的样本分布。值得注意的是,HCLR-Net对正样本和负样本都采用了非配对数据,并利用局部斑块扰动创新性地重建了负样本。这一策略克服了仅依赖配对数据的限制,提高了模型的泛化潜力。HCLR-Net 还集成了自适应混合注意力模块和细节修复分支,分别用于有效的特征提取和纹理细节修复。

贡献:

1)提出了一种用于水下图像增强的创新型混合对比学习模型,以解决水下场景中普遍存在的成像质量不理想的问题。独特贡献在于开发了一种处理负样本的新策略,既保留了负样本的统计特性,又防止网络过度剖析这些样本中的特征信息。这种平衡确保了网络的学习能力不会减弱,从而为在水下图像中突出复杂特征这一复杂挑战提供了稳健的解决方案。
2)设计了一种新颖的双分支网络架构来应对水下退化因素的复杂耦合。该架构包含一个自适应混合注意力(AHA)模块,作为提高模型性能的基础组件。我们创新的定向特征编码策略可捕捉长程依赖性和准确的位置信息,有效辨别不同的退化程度。此外,细节修复分支(DRB)专门用于恢复模糊的纹理细节,为水下图像难题提供了简洁而全面的解决方案。
3)提出的 HCLR-Net 模型是第一个在 UIE 任务中应用混合对比学习的模型(提出了使用非配对数据进行对比学习的创新方法。在每一轮训练中随机引入非配对负样本,避免过度拟合,促进稳健学习)。深入研究了各种损失函数的相互作用,强调了混合对比学习的重要性。

网络框架

特征提取分支和自适应混合注意力(AHA)模块旨在通过精确的位置信息捕捉长距离依赖关系。为了弥补细节的损失,我们设计了一个细节修复分支(DRB),重点关注像素级纹理细节。最后,通过对混合对比学习正则化进行了全面解释。

在特征提取模块中,采用了编码器-解码器结构。之所以采用这种结构,是因为我们需要在清晰域和劣化域中挖掘潜在特征,从而重建图像的上下文信息。编码器从输入图像中提取高级语义信息,解码器通过增强编码器的低分辨率特征图来重建细节。细节修复模块包含一个残差块,旨在增强纹理结构信息。该模块能有效捕捉并还原复杂的纹理细节,这些细节在水下图像中经常会因为苛刻的照明和散射条件而减弱或模糊。为了进一步提高网络的鲁棒性和泛化能力,引入了非配对对比正则化模块。利用非配对数据,该模块有助于学习更稳健的水下图像分布,从而增强模型处理各种水下条件的能力。

特征提取分支

特征提取分支包括三个 2× 下采样模块、六个 FE 模块和三个 2× 上采样模块,每次卷积结束时都会添加 AHA 模块。为了确保所学特征之间的全面互动,我们采用了高斯误差线性单元(GELU)非线性激活函数。GELU 在计算效率和表征能力之间取得了平衡。每次卷积后,我们都会引入一个自适应混合注意力(AHA)模块来完善所获得的特征。AHA 模块是我们网络架构的关键组成部分。它使模型能够捕捉长距离依赖关系和详细的位置信息,从而有效处理水下图像在不同方向和位置的不均匀退化。


特征提取(FE)模块是基本的构建模块。如图 4 所示,FE 模块由 AHA 模块、并行 1 × 1 和 3 × 3 卷积以及残差连接组成。最终,我们将相应的 8 倍上采样操作与 3 × 3 卷积结合起来,生成初步的增强图像。此外,我们还添加了跳转连接,以充分利用可用的特征信息。

自适应混合注意力模块(AHA)


        自适应混合注意力模块主要采用两种不同的定向池操作对特征进行混合编码。这些编码后的特征会被输入后续的自适应注意机制,以捕捉准确的位置信息和长距离空间交互特征。
        AHA 模块利用垂直方向上的 Avgpool 和水平方向上的 Maxpool 来捕捉远程依赖关系和准确的位置信息,从而有效确定不同方向上的特征退化。此外,我们还利用 Mixup 根据深空中的位置信息对特征进行自适应融合,生成特征图。

细节复原分支

连续的降采样和升采样操作可能会导致图像细节的丢失,从而严重影响最终增强水下图像的质量。构建了一个独立于特征增强分支(FEB)的新的简单分支,称为细节修复分支(DRB)。如图 2 所示,DRB 由两个卷积层和五个残差增强块组成。卷积层作为一对编码器-解码器,促进了低维和高维特征之间的转换。如图 6 所示,残差增强模块包含卷积和挤压激励(SE)模块,旨在捕捉降级特征。


SE 模块能够对不同通道的特征之间的关系进行建模,而在标准卷积过程中,这种关系经常被忽略。通过根据每个通道特征的重要性对模型进行加权,我们可以增强富含上下文信息的通道,从而获得更准确、更详细的特征表示。这一过程最终会在样本中形成更优化的特征分布,从而产生更好的结果。

混合对比学习正则化

       对比学习策略通常旨在最小化正样本之间的欧氏距离,使预测图像更接近理想图像,同时最大化负样本与预测图像之间的距离,使它们进一步远离非理想表征。

       设计了一种新颖的混合对比学习正则化(HCLR)方法,将水下原图像的相应清晰图像作为正样本。同时,采用局部斑块扰动(LPP)策略的非配对原始图像可作为负样本,从而有助于积极探索与正负样本相关的特征空间。如图 2 所示,我们的策略是在未配对降解图像的局部区域引入随机斑块扰动。这会破坏相邻像素之间的潜在相关性,从而干扰网络提取准确特征的能力。

损失函数

为了有效提高增强结果与地面实况之间的相似度,我们采用了 l1 损失 Ll1、感知损失 L per 和混合对比损失 L HCLR 的线性组合。总优化损失 Ltotal 表示为

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

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

相关文章

实战-解决编码问题

前言 在数据处理过程中,乱码是常见的一种现象,它归属于编码问题. 编码问题处理不当会导致解析错误和数据丢失的严重后果.文章主要是展示如何用Python的chardet库或Notepad的使用来解决编码问题. 常见表现 乱码 文本数据在屏幕上显示为不可识别的符号、方框、问号等,…

ES入门十四:分词器

我们存储到ES中数据大致分为以下两种: 全文本,例如文章内容、通知内容精确值,如实体Id 在对这两类值进行查询的时候,精确值类型会比较它们的二进制,其结果只有相等或者不想等。而对全文本类型进行等值比较是不太实现…

CVE漏洞是什么,如何对其进行针对性的防护

CVE(Common Vulnerabilities and Exposures)漏洞是一个网安技术术语,用于描述和标识信息安全领域的已知漏洞和安全风险。CVE是一个公开的列表或数据库,它为各种公开知晓的信息安全漏洞和风险提供了标准化的名称。 每个CVE标识符都…

Java-类型转换

Java数据类型转换的规则掌握后,将使我们对以后的学习事半功倍,下面是我列出的一些重点。 类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。底到高依次是:byte,short,char->int->lo…

ThinkPHP审计(2) Thinkphp反序列化链5.1.X原理分析从0编写POC

ThinkPHP审计(2) Thinkphp反序列化链子5.1.X原理分析&从0编写POC 文章目录 ThinkPHP审计(2) Thinkphp反序列化链子5.1.X原理分析&从0编写POC动态调试环境配置Thinkphp反序列化链5.1.X原理分析一.实现任意文件删除二.实现任意命令执行真正的难点 Thinkphp反序列化链5.1.…

openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint

文章目录 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint257.1 功能描述257.2 语法格式257.3 示例 openGauss学习笔记-257 openGauss性能调优-使用Plan Hint进行调优-Custom Plan和Generic Plan选择的Hint 257.1 功能描…

【MYSQL之进阶篇】视图、存储过程、存储函数以及触发器

🔥作者主页:小林同学的学习笔录 🔥mysql专栏:小林同学的专栏 1.视图 1.1 定义 视图是MySQL数据库中的虚拟表,它基于一个或多个实际表的查询结果。视图提供了一种简单的 方法来封装和重用复杂的查询,同时…

Prometheus-Grafana基础篇安装绘图

首先Prometheus安装 1、下载 https://prometheus.io/download/ 官网路径可以去这儿下载 2、如图: 3.解压: tar -xf prometheus-2.6.1.linux-amd64 cd prometheus-2.6.1.linux-amd64 4.配置文件说明: vim prometheus.yml 5.启动Promethe…

【蓝桥杯嵌入式】12届程序题刷题记录及反思

一、题目解析 按键短按LCD显示两个界面LED指示灯PWM脉冲输出 二、led控制 控制两个led灯&#xff0c;两种状态 //led void led_set(uint8_t led_dis) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,led_dis << 8,GPIO_PIN_RESET);HAL…

Java常用API_正则表达式_分组——捕获分组与非捕获分组介绍与练习

在正则表达式中&#xff0c;从左到右第一个左括号确定为第一组&#xff0c;继续往右看再有左括号它表示的组数就加一。我们可以在正则表达式中使用 \\组数 的方法表示第几组&#xff0c;如\\1表示第一组的内容。 1.捕获分组 捕获分组就是把这一组的数据捕获出来&#xff0c;后…

何为网络协议?一图知晓网络过程。

网络协议就是计算机之间沟通的语言 为了有效地交流&#xff0c;计算机之间需要一种共同的规则或协议&#xff0c; 就像我们和老外沟通之前&#xff0c;要先商量好用哪种语言&#xff0c; 要么大家都说中文&#xff0c;要么大家都说英语&#xff0c;这才能有效地沟通。 网络协…

git bash上传文件至github仓库

Linux运维工具-ywtool 目录 一.访问github二.新建仓库1.点击自己头像2.选择"your repositories"3.点击"New"4.创建新仓库 三.通过git bash软件上传文件1.提示2.打开git bash软件3.切换到本地仓库目录4.配置github的用户名和邮箱信息5.生成SSH Key6.github添…

【使用flex两端对齐加margin-right】

解决办法众多&#xff1a;https://cloud.tencent.com/developer/article/1516801 <div class"job_tabs_content"><div class"job_tab_item"></div><div class"job_tab_item"></div><div class"job_tab_i…

c++的学习之路:15、list(2)

本章主要是讲模拟实现list&#xff0c;文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码&#xff0c;链表是由一块一块不连续的空间组成的&#xff0c;所以这里写了三个模板&#xff0c;一个是节点&#xff0c;一…

Linux IO的奥秘:深入探索数据流动的魔法

Linux I/O&#xff08;输入/输出&#xff09;系统是其核心功能之一&#xff0c;负责处理数据在系统内部及与外界之间的流动。为了优化这一流程&#xff0c;Linux进行了一系列努力和抽象化&#xff0c;以提高效率、灵活性和易用性。&#x1f680; 1. 统一的设备模型 Linux将所…

SpringCloud Alibaba Sentinel 实现熔断功能

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十六篇&#xff0c;即使用 Sentinel 实现熔断功能。 二、 Ribbon 系列 首先我们新建两个服务的提供者…

2024单品正价起号,直播素材投流选品,【选品课】+【投流课】+【素材课】+【卡首屏】

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89064168 更多资源下载&#xff1a;关注我。 课程内容: 01 01 1.如何养账号过风控,mp4 01 1.如何搭建一条计划(1)..mp4 02 1.如何搭建一条计划(2)..mp4 02 02 2.单品起号方案如何选择,mp4 03 2.-比…

Linux -- 字符设备驱动--LED的驱动开发(初级框架)

驱动框架一阶段 我们怎样去点亮一个 LED 呢&#xff1f;分为三步&#xff1a; 看原理图确定引脚&#xff0c;确定引脚输出什么电平才能点亮/熄灭 LED 看主芯片手册&#xff0c;确定寄存器操作方法&#xff1a;哪些寄存器&#xff1f;哪些位&#xff1f;地址是&#xff1f; 编…

每天五分钟掌握深度学习框架pytorch:本专栏说明

专栏大纲 专栏计划更新章节在100章左右&#xff0c;之后还会不断更新&#xff0c;都会配备代码实现。以下是专栏大纲 部分代码实现 代码获取 为了方便用户浏览代码&#xff0c;本专栏将代码同步更新到github中&#xff0c;所有用户可以读完专栏内容和代码解析之后&#xff0c…

go语言实现无头单向链表

什么是无头单向链表 无头单向链表是一种线性数据结构&#xff0c;它的每个元素都是一个节点&#xff0c;每个节点都有一个指向下一个节点的指针。"无头"意味着这个链表没有一个特殊的头节点&#xff0c;链表的第一个节点就是链表的头。 优点&#xff1a; 动态大小&…