18、论文阅读:AOD-Net:一体化除雾网络
AOD-Net: All-in-One Dehazing Network
- 前言
- 介绍
- 相关工作
- 物理模型
- 传统方法
- 深度学习方法
- 建模与扩展
- 变换后的公式
- 网络设计
- 与高级特征任务相结合
- 除雾评价
- 数据集和实现
前言
该论文提出了一种基于卷积神经网络(CNN)的图像去雾模型,称为 All-in-One 去雾网络(AOD-Net)。该模型基于重构的大气散射模型进行设计,不像以往的模型那样分别估计透射矩阵和大气光,而是通过轻量级的 CNN 直接生成干净图像。这种新颖的端到端设计使 AOD-Net 易于嵌入到其他深度模型中,例如 Faster R-CNN,从而提升雾霾图像上的高层次任务性能。实验结果表明,在合成和真实雾霾图像数据集上,AOD-Net 在 PSNR、SSIM 和主观视觉质量方面均优于现有的最先进方法。此外,将 AOD-Net 与 Faster R-CNN 结合后,我们在雾霾图像上的目标检测性能显著提升。
介绍
雾霾的存在会显著降低恶劣天气下拍摄的户外图像的清晰度,影响到目标检测和识别等高层次的计算机视觉任务。因此,单图像去雾成为一种非常实用的技术。尽管从单张图像中估计多个物理参数具有挑战性,许多近期的研究已在这一目标上取得显著进展。除了估计全局的大气光强度,去雾的关键在于恢复传输矩阵,为此采用了多种统计假设和复杂模型。然而,这些估计往往并不准确,一些常用的预处理方法(如引导滤波和软抠图)可能会扭曲雾霾图像生成过程,导致恢复性能不佳。此外,传输矩阵和大气光这两个关键参数的非联合估计,可能在应用时放大误差。
本文提出了一种高效的端到端去雾卷积神经网络(CNN)模型,称为 All-in-One 去雾网络(AOD-Net)。尽管一些早期的去雾模型提出了“端到端”的概念,我们认为 AOD-Net 的主要创新在于,它是第一个从雾霾图像到清晰图像进行优化的真正端到端模型,而不是停留在中间的参数估计阶段。AOD-Net 基于重新构造的大气散射模型进行设计,使用合成的雾霾图像进行训练,并在合成和真实自然图像上进行测试。实验结果表明,AOD-Net 在 PSNR 和 SSIM 指标上优于多种现有的先进方法(Figure 1),并在视觉质量上表现出色(Figure 2)。作为轻量化模型,AOD-Net 处理 480 × 640 图像的时间仅需 0.026 秒,具有极快的处理速度。此外,AOD-Net 是第一个探索去雾模型如何帮助后续高层次视觉任务的模型。**由于其端到端的结构,AOD-Net 能轻松嵌入 Faster R-CNN,并大幅提升雾霾图像的目标检测性能。
**
相关工作
物理模型
大气散射模型是模糊图像生成过程的经典描述
传统方法
在去雾技术中,有多种方法致力于解决单图像去雾问题。具体而言,[23] 通过最大化局部对比度来处理雾霾去除问题。[6] 提出了一种基于物理的去雾方法,通过估算场景的反照率(albedo)来进行去雾。[8, 24] 则发现了有效的暗通道先验 (Dark Channel Prior, DCP),这使得传输矩阵的计算更加可靠。[12] 进一步引入边界约束和上下文正则化,以获得更清晰的去雾图像。[22] 提出了一个加速的自动恢复大气光强度的方法。[32] 开发了颜色衰减先验,并为雾霾图像建立了一个场景深度的线性模型,然后以监督方式学习模型参数。
深度学习方法
卷积神经网络(CNN)在计算机视觉任务中取得了广泛的成功,最近也被应用于去雾问题中。例如,[17] 提出了一种多尺度CNN (MSCNN) 模型,该模型首先生成一个粗略的传输矩阵,然后进行精细化处理。[3] 提出的 DehazeNet 是一种可训练的端到端模型,用于估计中间传输,通过雾霾图像作为输入,输出其传输矩阵。结合通过经验规则估算的大气光强度,基于大气散射模型可以恢复去雾图像。
上述方法的共同点在于,去雾的关键在于准确估算传输矩阵,同时独立计算大气光,然后利用这些参数恢复清晰图像。然而,这种方法尽管直观且具有物理依据,却没有直接对图像的重建失真进行度量或最小化,因此难以避免图像恢复质量的次优表现。分步估算的误差会在每一步累积,可能相互放大,导致图像恢复效果欠佳。
与之相对,AOD-Net 建立在一种不同的信念之上,即物理模型可以通过“更端到端”的方式进行建模,将所有参数统一在一个模型中估算。AOD-Net 不需要中间步骤来估算参数,而是直接输出去雾后的清晰图像。不同于 [3] 仅从雾霾图像到传输矩阵的端到端学习,AOD-Net 的完全端到端设计直接缩小了雾霾图像与清晰图像之间的最终目标差距。
建模与扩展
在本节中,解释了所提出的 AOD-Net。 我们首先介绍转换后的大气散射模型,AOD-Net 是基于该模型设计的。 然后详细描述AOD-Net的结构。 此外,由于其端到端设计,我们通过将所提出的模型直接嵌入到其他现有的深度模型中,讨论了将其扩展到模糊图像上的高级任务。
变换后的公式
根据公式 (1) 中的大气散射模型,得到的清晰图像为:
网络设计
所提出的 AOD-Net 由两个部分组成(见图 4):一个使用五个卷积层来估计K(x) 的 K -估计模块,接着是一个清晰图像生成模块,该模块由逐元素相乘层和若干逐元素相加层组成,通过计算公式 (4) 生成复原图像。
K-估计模块是 AOD-Net 的关键组件,负责估计深度和相对雾度水平。如图 4(b) 所示,我们使用五个卷积层,通过融合不同大小的滤波器来形成多尺度特征。[3] 采用了不同滤波器尺寸的并行卷积,[17] 则将粗尺度网络的特征与精细尺度网络的中间层相连接。受到这些方法的启发,AOD-Net 的“concat1”层连接了“conv1”和“conv2”层的特征。“concat2”同样连接“conv2”和“conv3”层的特征;“concat3”则连接“conv1”、“conv2”、“conv3”和“conv4”层的特征。这样的多尺度设计捕捉了不同尺度的特征,中间层的连接也弥补了卷积过程中信息的损失。
作为验证连接的简单基线方法,我们在 TestSetA(见第 4 节)上尝试了不使用连接的结构,即“conv1” → “conv2” → “conv3” → “conv4” → “conv5”。得到的平均 PSNR 为 19.0674 dB,SSIM 为 0.7707,两者均低于表 1 中的当前结果(尤其是 SSIM 的大幅下降)。值得注意的是,AOD-Net 的每个卷积层仅使用三个滤波器,因此与 [3] 和 [17] 等现有的深度方法相比,我们的模型更加轻量。
与高级特征任务相结合
高级计算机视觉任务(如目标检测和识别)关注视觉语义,并已受到广泛关注 [16, 30]。然而,这些算法的性能通常受到多种降质因素的影响。传统方法首先通过单独的图像复原步骤作为预处理,再输入目标的高级任务中。近期,[27, 4] 证明了复原与识别步骤的联合优化能优于传统的两阶段方法。
先前的研究 [31] 已探讨了噪声、模糊和低分辨率等常见降质的影响及其补救方法。然而,据我们所知,目前还没有类似的研究定量地分析雾霾对高级视觉任务的影响及其缓解方法。当前的去雾模型主要关注复原质量,而我们迈出了实现这一重要目标的第一步。由于其独特的端到端设计,AOD-Net 可以无缝嵌入其他深度模型中,形成一个能够在雾霾图像上执行高级任务的管道,并在其中隐式地进行去雾处理。这种管道可以端到端地联合优化,以提升性能,而如果将 AOD-Net 替换为其他深度去雾模型 [3, 17],这种优化将无法实现。
除雾评价
数据集和实现
我们通过公式 (1) 生成合成的雾霾图像,使用来自 NYU2 Depth Database [21] 的带有深度元数据的真实清晰图像。我们设定不同的大气光 A ,每个通道在 [0.6, 1.0] 范围内均匀选取,并选择 β ∈{0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6}
对于 NYU2 数据库,我们选取了 27,256 张图像作为训练集,3,170 张图像作为不重叠的测试集 TestSet A。我们还使用了 Middlebury 立体数据库 [19, 18, 9] 中的 800 张全尺寸合成图像作为测试集 TestSet B。此外,我们还收集了一组自然雾霾图像来评估我们模型的泛化性能。
在训练过程中,模型的权重通过高斯随机变量进行初始化。我们使用 ReLU 神经元,因为在我们的特定设置中发现其效果优于文献 [3] 中提出的 BReLU 神经元。动量参数和衰减参数分别设置为 0.9 和 0.0001。我们采用简单的均方误差(MSE)损失函数,发现它不仅提升了 PSNR,还提高了 SSIM 和视觉质量。
AOD-Net 模型在大约 10 个训练周期后收敛,通常在 10 个周期后表现足够好。我们还发现将梯度裁剪到 [−0.1, 0.1] 范围内有助于限制梯度范数。这一技术在稳定循环神经网络训练中非常流行 [15]。
相关文章:

18、论文阅读:AOD-Net:一体化除雾网络
AOD-Net: All-in-One Dehazing Network 前言介绍相关工作物理模型传统方法深度学习方法 建模与扩展变换后的公式网络设计与高级特征任务相结合 除雾评价数据集和实现 前言 该论文提出了一种基于卷积神经网络(CNN)的图像去雾模型,称为 All-in…...

Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署
文章目录 前言一、Zookeeper完全分布式部署(手动部署)1. 下载Zookeeper2. 上传安装包2. 解压zookeeper安装包3. 配置zookeeper配置文件3.1 创建 zoo.cfg 配置文件3.2 修改 zoo.cfg 配置文件3.3 创建数据持久化目录并创建myid文件 4. 虚拟机hadoop2安装并…...

【机器学习】聚类算法分类与探讨
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
MySQL中distinct与group by之间的性能进行比较
在 MySQL 中,DISTINCT 和 GROUP BY 都是用于去重或汇总数据的常用 SQL 语法。尽管它们在某些情况下能产生相同的结果,但它们的内部工作方式和性能表现可能有所不同。理解这两者的差异,对于选择正确的语法非常重要,尤其是在处理大量…...

计算机视觉读书系列(1)——基本知识与深度学习基础
研三即将毕业,后续的工作可能会偏AI方向的计算机视觉方面,因此准备了两条线来巩固计算机视觉基础。 一个是本系列,阅读经典《Deep Learning for Vision System》,做一些总结跑一些例子,也对应本系列文章 二是OpenCV实…...

怎么查看navicat的数据库密码
步骤1:打开navicat连接数据库工具,顶部的文件栏-导出结果-勾选导出密码-导出 步骤2:导出结果使用NotePad或文本打开,找到,数据库对应的的Password"995E66F64A15F6776“”的值复制下来 <Connection ConnectionName"…...

webrtc前端播放器完整案例
https://download.csdn.net/download/jinhuding/89961792...
GORM优化器和索引提示
在使用 GORM 进行数据库操作时,优化器和索引提示可以帮助你提高查询性能。GORM 提供了一些方法来利用这些特性。 优化器提示 优化器提示(Optimizer Hints)是数据库系统提供的功能,用于指导查询优化器如何处理查询。不同的数据库…...

linux驱动-i2c子系统框架学习(1)
可以将整个 I2C 子系统用下面的框图来描述: 可以将上面这一 I2C 子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层, 本篇主要内容就是介绍 I2C 子系统框架中…...
元戎启行嵌入式面试题及参考答案
介绍下 CAN 通信原理 控制器局域网(CAN)是一种串行通信协议,主要用于汽车、工业自动化等领域的电子控制单元(ECU)之间的通信。 其通信原理是基于多主站架构。在总线上,多个节点(设备)都可以主动发起通信。CAN 协议使用差分信号来传输数据,通过两条信号线 CAN_H 和 CAN…...

【EasyExcel】EasyExcel导出表格包含合计行、自定义样式、自适应列宽
目录 0 EasyExcel简介1 Excel导出工具类设置自定义表头样式设置自适应列宽添加合计行 2 调用导出工具类导出Excel表3 测试结果 0 EasyExcel简介 在数据处理和报表生成的过程中,Excel是一个非常常用的工具。特别是在Java开发中,EasyExcel库因其简单高效而…...

es数据同步(仅供自己参考)
数据同步的问题分析: 当MySQL进行增删改查的时候,数据库的数据有所改变,这个时候需要修改es中的索引库的值,这个时候就涉及到了数据同步的问题 解决方法: 1、同步方法: 当服务对MySQL进行增删改的时候&…...

apt镜像源制作-ubuntu22.04
# 安装必要的软件 sudo apt-get install -y apt-mirror # 编辑/etc/apt/mirror.list,添加以下内容 set base_path /var/spool/apt-mirror # 指定要镜像的Ubuntu发布和组件-null dir jammy-updates main restricted universe multiverse # 镜像的Ubuntu发布和组件的URL-n…...
libaom 源码分析: 预测编码过程梳理
AV1 预测编码中核心技术 AV1(AOMedia Video 1)作为一种开源的视频编码格式,其预测编码核心技术主要包括以下几个方面: 分区树分割模块: AV1利用多类型分割模式,递归地对图像/视频序列进行分区,以捕捉更丰富的空间信息,从而提升编码效率。这包括新的方向预测分割模式及…...

从0开始学习Linux——Yum工具
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 上一个章节我们简单了解了Linux中常用的一些文本编辑器,本次教程我们将学习yum工具。 一、Yum简介 Yum(全名…...

【Linux】Linux管道揭秘:匿名管道如何连接进程世界
🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1.什么是管道 ?2. 管道的类型2.1 匿…...
【LeetCode】【算法】155. 最小栈
LeetCode 155. 最小栈 题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int …...
3.3 windows,ReactOS系统中页面的换出----1
系列文章目录 文章目录 系列文章目录3.3 页面的换出MiBalancerThread()MmTrimUserMemory()MmPageOutVirtualMemory() 3.3 页面的换出 在前一节中我们看到,如果有映射的页面已经被倒换到磁盘上即倒换文件中,…...
QCustomPlot添加自定义的图例,实现隐藏、删除功能(二)
文章目录 实现步骤:详细代码示例:实现原理和解释:使用方法:其他参考要实现一个支持复选框来控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写绘制和事件处理方法来实现,同时发出信号通知曲线的状态变更。 实现步骤: 继承 QCPLegend 类,添加绘…...

Linux云计算 |【第五阶段】CLOUD-DAY8
主要内容: 掌握DaemonSet控制器、污点策略(NoSchedule、Noexecute)、Job / CronJob资源对象、掌握Service服务、服务名解析CluterIP(服务名自动发现)、(Nodeport、Headless)、Ingress控制器 一…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...