基于Vision Transformer的图像去雾算法研究与实现(附源码)

基于Vision Transformer的图像去雾算法研究与实现

0. 服务器性能简单监控

\LOG_USE_CPU_MEMORY\文件夹下的use_memory.py文件可以实时输出CPU使用率以及内存使用率,配合nvidia-smi监控GPU使用率

可以了解服务器性能是否足够;运行时在哪一步使用率突然升高;是否需要释放内存等等

1. 数据集

image-20220606173345617

1.1 NH-HAZE

数据集下载: https://competitions.codalab.org/competitions/22236#participate-get_data

Train:1-40;Test:41-45

我们引入了NH-HAZE,一个非均匀的真实数据集,有成对真实的模糊和相应的无雾图像。因此,非均匀雾霾数据集的存在对于图像去雾场是非常重要的。

它代表第一个真实的图像去模糊数据集与非均匀的模糊和无模糊(地面真实)配对图像

为了补充之前的工作,在本文中,我们介绍了NH-HAZE,这是第一个具有非均匀模糊和无雾(地面真实)图像的真实图像去模糊数据集。

1.2 NTIRE 2019

DENSE-haze是一个真实的数据集,包含密集(均匀)模糊和无烟雾(地面真实)图像

官方地址:

https://data.vision.ee.ethz.ch/cvl/ntire19/#:~:text=Datasets%20and%20reports%20for%20NTIRE%202019%20challenges

https://data.vision.ee.ethz.ch/cvl/ntire19//dense-haze/

另一个下载地址:

https://www.kaggle.com/rajat95gupta/hazing-images-dataset-cvpr-2019?select=GT

Train:1-45;Test:51-55

1.3 I-HAZE

其中包含 35 对有雾的图像和相应的无雾(真实)室内图像

下载地址:https://data.vision.ee.ethz.ch/cvl/ntire18//i-haze/

Train:1-25;Test:31-35

1.4 O_HAZE

O-HAZE是第一个引入的包含模糊和无烟雾(地面真实)图像的真实数据集。它由45个不同的户外场景组成,使用一个专业的雾霾发生器在控制照明下拍摄。而O-HAZE和I-HAZE则由相对较轻、均匀的雾霾组成

下载地址:https://data.vision.ee.ethz.ch/cvl/ntire18//o-haze/

Train:1-35;Test:41-45

我们使用NH-HAZE数据集作为举例数据集,其他数据集除了数据集路径之外,大多数参数设置都一样。

该去雾项目源码下载:

https://download.csdn.net/download/DeepLearning_/87570157

2. 模型运行过程

2.0 模型介绍

在文件夹/Uformer_ProbSparse/下存放模型代码

image-20220606174010393


image-20220606173917583

网络架构图

参考代码:https://github.com/ZhendongWang6/Uformer


image-20220606174029064

2.1 预处理数据 — 把训练数据图像切分成大小为256*256的小图

下载数据集存放在:

/home/dell/桌面/TPAMI2022/Dehazing/#dataset/NH_haze/

内含两个文件夹:train test

对训练数据集处理:

python3 generate_patches_SIDD.py --src_dir /home/dell/桌面/TPAMI2022/Dehazing/#dataset/NH_haze/train --tar_dir /home/dell/桌面/2022毕业设计/Datasets/NH-HAZE/train_patches

2.2 训练代码My_train.py

python3 ./My_train.py --arch Uformer --nepoch 270 --batch_size 32 --env My_Infor_CR --gpu '1' --train_ps 128 --train_dir /media/dell/fd6f6662-7e38-4427-80c6-0d4fb1f0e8b9/work_file/2022毕业设计/Datasets/NH-HAZE/train_patches --val_dir /media/dell/fd6f6662-7e38-4427-80c6-0d4fb1f0e8b9/work_file/2022毕业设计/Datasets/NH-HAZE/test_patches --embed_dim 32 --warmup

如果要继续对模型进行训练:--pretrain_weights 设置预训练权重路径,我的模型预训练权重在My_best_model文件夹下,以数据集划分不同预训练权重

并添加参数 --resume

训练所有参数设置在option.py文件种,主要的参数含义:

  • --train_ps 训练样本的补丁大小,默认为128,指多大的patches输入到模型中
  • --train_dir --val_dir 训练和测试文件夹,文件夹下包含两个文件夹gt和hzay,分别包含无雾图片集和带雾图片集
  • --batch_size 设置Batch_size,默认为3
  • --is_ab **是否使用n a对比损失,默认为False(使用)
  • --w_loss_vgg7对比损失使用的权重,默认为1
  • --w_loss_CharbonnierLoss CharbonnierLoss 所占权重,默认为1**

2.3 测试代码test_long_GPU.py和预训练权重

预训练权重:

链接:https://pan.baidu.com/s/1a1YPTGSNa0R6I-qiTNir0A
提取码:y422

模型预训练权重:将百度网盘中的Uformer_ProbSparse/My_best_model文件夹放到Uformer_ProbSparse文件夹下,里面包含4大数据集下的权重

python3 ./test_long_GPU.py

测试流程:

在My_train.py文件中,为了训练速度考虑,我们是在每个patch上进行的测试,但patch上测试结果不等于在整图上测试的结果,因此该文件是对模型在整图上结果进行测试,论文中的结果与该测试结果一致

由于代码的特殊设置,需要让输入的图片的长和宽为 --train_ps 的整数倍,如果不够足,则要进行扩展

主要参数解释:

  • --input_dir 设置测试的文件夹,文件夹下包含两个文件夹gt和hzay,分别包含无雾图片集和带雾图片集

  • --train_ps训练样本的补丁大小,默认为128,指多大的patches输入到模型中

  • 代码中的: L表示图像需要拓展长和宽为多大

    例如:输入是1200 * 1600,patch size = 128时,L = 1664

    L需要为128倍数,且要大于输入图像的长和宽,需要根据输入图像进行调整,例如:NH-HAZE数据集上的为L = 1664

3. NH-HAZE数据集上的Losslandscape

主要将最优权重的周围的loss可视化,以探索模型收敛的难易程度以及模型架构的性能

参考文献:Park N, Kim S. How Do Vision Transformers Work?[J]. arXiv preprint arXiv:2202.06709, 2022.

3.1 基于CNN模型(FFA-Net)的Loss landscape

预训练权重:

链接:https://pan.baidu.com/s/1a1YPTGSNa0R6I-qiTNir0A
提取码:y422

模型预训练权重:将百度网盘中的FFA_how-do-vits-work-transformer文件夹包含的内容放到FFA_how-do-vits-work-transformer文件夹下,里面包含FFA-Net在NH-HAZE数据集下的最优权重,以及该权重下运行的结果

/FFA_how-do-vits-work-transformer/FFA_pretrain_weight/下存放FFA-Net模型在该数据集下的预训练权重,决定预训练权重的路径代码在/FFA_how-do-vits-work-transformer/FFA_model/option.py

主要代码FFA_losslandscape.py:在最优权重周围随机找121个权重,然后计算这些权重的loss值,得到的loss值保存在/FFA_how-do-vits-work-transformer/checkpoints/logs/FFA_NH/My_NH_ffa_3_19_best.pk/文件夹下用于绘图,得到的Loss landscape如下:

save

3.2 基于Vision Transformer架构改进后的Loss landscape

预训练权重:

链接:https://pan.baidu.com/s/1a1YPTGSNa0R6I-qiTNir0A
提取码:y422

模型预训练权重在2.3节有阐述

将百度网盘中的how-do-vits-work-transformer文件夹包含的内容放到how-do-vits-work-transformer文件夹下,下面有讲解文件夹内包含的内容

/Uformer_ProbSparse/My_best_model/下存放改进后模型在各种数据集下的预训练权重,决定预训练权重的路径代码在/how-do-vits-work-transformer/Uformer_Info/option.py中的--pretrain_weights设置对应数据集上最优的参数权重路径

主要代码My_losslandscape.py:在最优权重周围随机找121个权重,然后计算这些权重的loss值,得到的loss值保存在/how-do-vits-work-transformer/checkpoints/logs/NH/Uformer_Informer/文件夹下用于绘图,得到的Loss landscape如下:

在实践过程中,通常运行My_losslandscape.py代码就可以直接得到下图

但在我运行过程中,因为服务器断电,只能继续训练,因此\how-do-vits-work-transformer\checkpoints\logs\NH\Uformer_Informer\下的middle_result.txtNH_Uformer_Informer_x1_losslandscape.csv是两次运行文件中间结构,而losslandscape.ipynb中融合了两次运行结果得到该图

save

Park N, Kim S. How Do Vision Transformers Work?[J]. arXiv preprint arXiv:2202.06709, 2022.提到:损失景观越平坦,性能和泛化效果越好

可以发现:我们基于Vision Transformer架构改进后的模型和FFA-Net模型在最优参数时的Loss landscape,能够反应出我们的模型收敛效果比较好这与训练过程一致:我们的模型训练270个epoch就会收敛,而FFA-Net则需要40000个epoch

4. 实验结果

image-20220606173637944 image-20220606173646976 image-20220606173705551

根据恢复图的结果,我们发现在部分图上的效果并不是特别优异

**可以很好的反应Vision Transformer的劣势:该架构虽然全局建模能力强,但局部建模能力没有CNN强,因此当输入某物体占大部分空间时,恢复结果容易受到其影响;因此可以在之后改进中使用CNN和Transformer组合模型,共同对全局和局部进行建模。

5. 消融实验

image-20220606173744093

6. 总结展望

image-20220606173837155

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

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

相关文章

第一个vue-cli项目

第一个vue-cli项目 12.1、什么是vue-cli vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板;   预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个骨架项目,这个估计项目就是脚手架&…

编写一个函数,输入一个日期,计算其距年底的时间

--编写一个函数,输入一个日期,计算其距年底的时间 create or replace function f_end(i_date varchar2) return number is/*声明四个变量,v_end:存放输入的日期的年底日期 v_date:存放经过转化为日期型的输入字符串 v_minus:存放两个日期之差…

Springboot怎么实现WebSocket通信(二)

前言上一篇文章分享了单机模式下,websocket的基本使用方法,但在实际的业务中,通常是不会这样使用的,大部项目都是分布式部署的,一个工程布署了多个服务节点,前端并不直接请求具体服务节点,而是先…

xijs更新指南(v1.2.1)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用函数逻辑问题, 帮助开发者更高效的开展业务开发.接下来就和大家一起分享一下v1.2.1 版本的更新内容以及后续的更新方向.1. 添加算法模块分类该模块主要由 WangLei802 贡献, 添加内容如下:添加冒泡排序算法及其…

什么是工程项目管理工作?其特点是什么?

什么是工程项目管理工作?其特点是什么? 工程项目管理是为了实现工程项目的有效、高效和可持续管理而进行的一系列活动。 工程项目的管理就像是驾驭一艘巨大的船只,需要一位经验丰富的船长来领导整个团队。 通过工程项目管理,项…

fiddler(抓包)的用法和HTTP 协议的基本格式

目录 fiddler(抓包)用法: HTTP 协议的基本格式 HTTP请求: 首行 认识HTTP方法 GET和POST的典型区别: 认识请求“报头”(header) HTTP 响应 HTTP状态码: 状态码的分类: 认识响应 …

python语法基础

🐟在本次博客主要想大家介绍一些简单的python语法的注意事项,从代码缩进到注释规则,从标准输入到标准输出,以及位运算符等方面了解python的基础使用方法。那么我们接下来直接开始步入正题,开始我们的python语法的讲解吧…

【SpringCloud】SpringCloud Nacos详解(集群配置)

目录前言一.Nacos集群逻辑图二.Nacos集群搭建1.搭建数据库,初始化数据库表结构2.下载Nacos3.配置Nacos3.启动Nacos4.配置启动nginx5.测试是否成功6.设置服务的nacos地址7.新增一个配置,查看数据看是否进行持久化了前言 在我前面两篇讲的都是单个nacos&a…

c++11 多线程使用

文章目录创建线程异常导致死锁实现两个线程交互的打印奇数和偶数(面试题)创建线程 1.创建线程的方式: 1.拷贝构造禁止了2.允许移动构造3.无参构造后我们可以对对象进行赋值操作4.传递可调用对象(例如包装器,泛函数,lambda,普通函数,静态成员函数) 参数列表 进行创建 2.样例…

第17章_触发器

第17章_触发器 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…

JavaEE简单示例——SpringMVC的简单数据绑定

简单介绍: 在前面我们介绍过如何将我们自己创建的类变成一个servlet来处理用户发送的请求,但是在大多数的时候,我们在请求 的时候会携带一些参数,而我们现在就开始介绍我们如何在Java类中获取我们前端请求中携带的参数。首先&…

SpringBoot自定义注解+异步来实现日志管理

一、前言 我们在企业级的开发中,必不可少的是对日志的记录,实现有很多种方式,常见的就是基于AOP注解进行保存,同时考虑到程序的流畅和效率,我们可以使用异步进行保存! 二、基础环境 1. 导入依赖 我这里…

C#,码海拾贝(06)——连分式(Continued Fraction)曲线插值算法,《C#数值计算算法编程》源代码升级改进版

一、连分式法 连分式法是一种有理函数逼近法,其基本出发点是:将原型展开成连分式,然后截取前面几个起主要作用的偏系数构成简化模型,连分式法计算简便,拟合精度较高,是一种很有效的传递函数简化法。 Cont…

【Spring Cloud Alibaba】5.创建服务消费者(Feign)

文章目录简介什么是 Feign开始搭建创建项目修改POM文件添加启动类创建 Feign 接口添加Controller添加配置文件启动项目测试访问Nacos访问接口测试负载均衡通过终端启动多个服务提供者实例简介 接下来我们创建一个服务消费者,通过Feign来进行与服务提供者交互&#…

KDZD程控超低频高压发生器

一、产品概述 本产品接合了现代数字变频技术,采用微机控制,升压、降压、测量、保护自动化。由于电子化,所以体积小重量轻、大屏幕液晶显示,清晰直观、且能显示输出波形、打印试验报告。 设计指标符合《电力设备专用测试仪器通用…

SSM—【笔记】1.1Spring

Spring好处 简化开发,降低企业级开发的复杂性框架整合,高效整合其他技术,提高企业级应用开发与运行效率 简化开发:1、IoC、2、AOP[2.1衍生出事务处理 ] 框架整合:MyBatis、Mybatis-plus、Struts、Struts2、Hibernat…

Android开发-Android常用组件-ToggleButton开关按钮 Switch开关

4.7 开关按钮ToggleButton和开关Switch 1.开关按钮ToggleButton 属性名 说明 android:disabledAlpha 设置按钮在禁用时的透明度 android:textOff 按钮没有被选中时显示的文字 android:textOn 按钮被选中时显示的文字 另外,除了这个我们还可以自己写个 selec…

Spring Cloud之一:注册与发现-Eureka工程的创建

系列目录(持续更新。。。) Spring Cloud:什么是微服务 Spring Cloud之一:注册与发现-Eureka工程的创建 Spring Cloud之二:服务提供者注册到Eureka Server Spring Cloud之三:Eureka Server添加认证 Spr…

SpringBoot(3)整合Mybatis

文章目录一、导入依赖二、编写配置文件三、在启动类上添加注解&#xff0c;表示mapper接口所在位置四、定义mapper接口五、定义mapper.xml映射文件六、service层七、controller层八、修改idea检查代码的严格程度一、导入依赖 <dependency><groupId>org.mybatis.spr…

华为OD机试题,用 Java 解【新员工座位安排系统】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:新员工座位安排系统 题目 工位…