YOLOv8结合CVPR2024最新图像增强算法!让你的模型无惧风雨【含端到端推理脚本】

本文主要是介绍YOLOv8结合CVPR2024最新图像增强算法!让你的模型无惧风雨【含端到端推理脚本】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

篇博客的算法来自于CVPR2024,代码刚刚开源没几天~

原图去雨去雨+检测

如何有效地探索雨痕的多尺度表示对于图像去雨是很重要的。与现有的基于Transformer的方法相比,这些方法主要依赖于单一尺度的雨痕外观,我们开发了一个端到端的多尺度Transformer,利用各种尺度中潜在有用的特征来促进高质量的图像重建。为了更好地探索空间变化的雨痕的常见退化表示,我们在像素坐标上结合了基于尺度内隐式神经表示和退化输入,采用闭环设计,使得学习到的特征有助于去除雨水并提高模型在复杂场景中的鲁棒性。为了确保来自不同尺度的更丰富的协作表示,我们在我们的多尺度Transformer中嵌入了一个简单而有效的尺度间双向反馈操作,通过进行粗到细和细到粗的信息交流。大量实验证明,我们的方法,命名为NeRD-Rain,在合成和真实世界基准数据集上表现优于最先进的方法。

代码地址:cschenxiang/NeRD-Rain: Bidirectional Multi-Scale Implicit Neural Representations for Image Deraining (CVPR 2024) (github.com)icon-default.png?t=N7T8https://github.com/cschenxiang/NeRD-Rain

论文地址:2404.01547.pdf (arxiv.org)


论文简介

相关工作

近年来,由于大量深度卷积神经网络(CNN)的发展,图像去雨的研究取得了显著进展。然而,作为 CNN 中的基本操作,卷积是空间不变的,并且具有有限的感受野,不能有效地模拟清晰图像的空间变异特性和非局部结构。此外,仅仅增加网络深度以获得更大的感受野并不总是能够带来更好的性能。为了缓解这个问题,最近的几种方法利用变压器来解决单图像去雨,因为变压器可以模拟非局部信息以更好地恢复图像。尽管这些方法的性能比大多数基于 CNN 的方法更好,但它们大多在固定图像尺度(即单输入单输出架构)上探索特征表示,而忽略了其他尺度可能有用的信息。由于在较粗的图像尺度下雨效果显著减少,探索多尺度表示将有助于去除雨水。

在本文中,我们开发了一种有效的双向多尺度Transformer,采用隐式神经表示来更好地探索多尺度信息并建模复杂的雨滴。考虑到雨滴效应在不同的图像尺度上变化,我们构建了多个不等Transformer分支,每个分支用于学习图像去雨的尺度特定特征。受到隐式神经表示(INR)最近取得的成功启发,能够将图像编码为连续函数,我们进一步在相邻分支之间加入了INR,以从不同的降质输入中学习共同的雨降解表示,使得学习到的特征对复杂和随机的雨滴具有鲁棒性。为了便于在各种尺度上表示雨的外观,我们在INR中采用了两种不同的基于坐标的多层感知器(MLP)(即一个粗糙特征网格和一个细粒度特征网格),以适应复杂的雨特征。此外,为了提高INR的建模能力,我们提出了一种尺度内共享编码器,形成一个闭环框架。请注意,上述两种表示类型(即, 尺度特定和通用的雨滴) 能够互补。

论文贡献

主要贡献总结如下:

  • 我们设计了一种有效的多尺度 Transformer,以利用多尺度雨信息生成高质量的去雨结果。
  • 我们引入了隐式神经表示来更好地学习常见的雨降解特征,并展示它可以帮助促进去雨并增强在复杂场景中去雨模型的鲁棒性。
  • 我们将简单而有效的双向反馈传播操作集成到我们的多尺度 Transformer 中,以实现跨尺度更好的特征交互。
  •  对合成和真实世界基准的实验结果表明,我们的方法在性能上表现优于最先进的方法。

为了更好地探索多尺度信息和建模复杂的雨水条纹,我们精心开发了一种有效的双向多尺度 Transformer,采用隐式神经表示(称为 NeRD-Rain),包括一个尺度内 INR 分支和一个尺度间双向分支。前者从多样的多雨图像中学习潜在的退化表示,而后者实现了不同尺度之间更丰富的协作表示。

算法效果


YOLOv8 结合NeRD去雨算法

具体的算法流程如下所示:

大家最好拉到和v8项目同级路径位置:

git clone https://github.com/cschenxiang/NeRD-Rain.git
pip install -r requirements.txt
cd pytorch-gradual-warmup-lr
python setup.py install
cd ..

然后在NeRD-Rain文件夹下新建一个NeRD_v8.py文件,将代码放进去。

完整的代码和权重我都放到了群文件【NeRD_v8_去雨.zip】

部分NeRD_v8.py

def process_image(input_image, weights_path, win_size=256, gpu_device="0"):# 设置GPU设备os.environ["CUDA_VISIBLE_DEVICES"] = gpu_devicetorch.cuda.set_device(int(gpu_device))# 加载模型model_restoration = mynet()utils.load_checkpoint(model_restoration, weights_path)model_restoration.cuda()model_restoration = nn.DataParallel(model_restoration)model_restoration.eval()# 处理图像with torch.no_grad():input_image = input_image.cuda()_, _, Hx, Wx = input_image.shapeinput_re, batch_list = window_partitionx(input_image, win_size)restored = model_restoration(input_re)restored = window_reversex(restored[0], win_size, Hx, Wx, batch_list)restored = torch.clamp(restored, 0, 1)restored = restored.permute(0, 2, 3, 1).cpu().detach().numpy()restored_img = img_as_ubyte(restored[0])  # 假设直接处理的批量大小为1return restored_img

代码里面需要注意的就是 sys.path 这里,这里务必写成你v8项目的绝对路径,以确保可以找到这个项目包。

import syssys.path.append("/Github/YOLOv8-Magic/ultralytics-8.1.0")

运行我的代码后就能看到检测结果了


引用

@InProceedings{NeRD-Rain,author={Chen, Xiang and Pan, Jinshan and Dong, Jiangxin}, title={Bidirectional Multi-Scale Implicit Neural Representations for Image Deraining},booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},month={June},year={2024}
}

这篇关于YOLOv8结合CVPR2024最新图像增强算法!让你的模型无惧风雨【含端到端推理脚本】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/913064

相关文章

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应