2024CVPR《HomoFormer》

news2025/1/19 3:21:10

这篇论文提出了一种名为HomoFormer新型Transformer模型,用于图像阴影去除。论文的主要贡献和创新点如下:

1. 研究背景与动机

  • 阴影去除的挑战:阴影在自然场景图像中普遍存在,影响图像质量并限制后续计算机视觉任务的性能。阴影的空间分布不均匀且模式多样,导致传统的卷积神经网络(CNN)和基于窗口的Transformer模型难以有效处理。

  • 现有方法的局限性:现有的方法通常依赖于复杂的模型来适应阴影的非均匀分布,但这些模型的计算复杂度高,难以应用于高分辨率图像。

在这里插入图片描述

2. 方法概述

  • 随机打乱操作:为了应对阴影的非均匀分布问题,论文提出了一种新的策略:通过随机打乱操作(Random Shuffle)将阴影的非均匀分布均匀化。随机打乱操作将图像像素在空间上随机重新排列,使得阴影在整个图像中均匀分布,从而便于后续的局部自注意力层处理。
    在这里插入图片描述

  • 逆打乱操作:在随机打乱操作后,通过逆打乱操作(Inverse Shuffle)将像素恢复到原始顺序,确保图像语义信息不丢失。

  • 局部自注意力层:在均匀化的空间中,使用局部自注意力层(Local Self-Attention)来处理图像,避免了传统全局自注意力的高计算复杂度。
    ![[Pasted image 20250109154028.png]]

  • 结构建模的前馈网络(FFN):由于随机打乱操作破坏了像素的相对位置信息,论文设计了一种新的前馈网络(FFN),通过深度卷积来建模图像的结构信息。
    ![[Pasted image 20250109154042.png]]

3. 主要贡献

  • 均匀化阴影分布:论文提出了一种新的视角,通过随机打乱操作将阴影的非均匀分布均匀化,从而解决了传统模型在处理非均匀阴影时的局限性。

  • HomoFormer模型:基于随机打乱和逆打乱操作,论文构建了一个名为HomoFormer的局部窗口Transformer模型,能够在保持线性计算复杂度的同时,有效处理非均匀分布的阴影。
    在这里插入图片描述

  • 实验验证:论文在多个公开数据集上进行了广泛的实验,验证了HomoFormer在阴影去除任务中的优越性,并展示了其在生成高质量无阴影图像方面的能力。

4. 实验与结果

  • 数据集:实验在ISTD+和SRD两个基准数据集上进行,评估了HomoFormer与现有最先进方法的性能对比。

  • 定量评估:HomoFormer在阴影区域、非阴影区域和整个图像上的均方误差(MAE)、峰值信噪比(PSNR)和结构相似性(SSIM)等指标上均优于现有方法。
    SDR
    在这里插入图片描述

  • 定性评估:视觉对比结果显示,HomoFormer生成的图像具有更少的伪影和更清晰的细节。
    在这里插入图片描述
    在这里插入图片描述

  • 消融实验:通过消融实验验证了随机打乱操作和结构建模FFN的有效性,表明它们对提升模型性能起到了关键作用。

5.核心代码

import torch
import torch.nn as nn
import torch.utils.checkpoint as checkpoint
from timm.models.layers import DropPath, to_2tuple, trunc_normal_
import torch.nn.functional as F
from einops import rearrange, repeat
from einops.layers.torch import Rearrange
import math
import numpy as np
import time
from torch import einsum
import random


class PModule(nn.Module):
    def __init__(self, dim=32, hidden_dim=128, act_layer=nn.GELU, drop=0.):
        super().__init__()
        self.linear1 = nn.Linear(dim, hidden_dim)
        self.dwconv = nn.Conv2d(hidden_dim, hidden_dim, groups=hidden_dim, kernel_size=3, stride=1, padding=1)
        #self.selayer = SELayer(hidden_dim//2)
        self.linear2 = nn.Sequential(nn.Linear(hidden_dim//2, dim))
        self.dim = dim
        self.hidden_dim = hidden_dim

    def forward(self, x, img_size=(128, 128)):
        # bs x hw x c
        hh,ww = img_size[0],img_size[1]
        x = self.linear1(x)

        # spatial restore
        x = rearrange(x, ' b (h w) (c) -> b c h w ', h=hh, w=ww)

        x1,x2 = self.dwconv(x).chunk(2, dim=1)
        x3 = x1 * x2
        #x4=self.selayer(x3)
        # flaten
        x3 = rearrange(x3, ' b c h w -> b (h w) c', h=hh, w=ww)
        y = self.linear2(x3)

        return y

class SepConv2d(torch.nn.Module):
    def __init__(self,
                 in_channels,
                 out_channels,
                 kernel_size,
                 stride=1,
                 padding=0,
                 dilation=1, act_layer=nn.ReLU):
        super(SepConv2d, self).__init__()
        self.depthwise = torch.nn.Conv2d

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

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

相关文章

JavaEE之CAS

上文我们认识了许许多多的锁,此篇我们的CAS就是从上文的锁策略开展的新概念,我们来一探究竟吧 1. 什么是CAS? CAS: 全称Compare and swap,字⾯意思:“比较并交换”,⼀个CAS涉及到以下操作: 我们假设内存中…

国产编辑器EverEdit - 复制为RTF

1 复制为RTF 1.1 应用背景 在写产品手册或者其他文档时,可能会用到要将产品代码以样例的形式放到文档中,一般的文本编辑器拷贝粘贴到Word中也就是普通文本,没有语法着色,这样感观上不是太好,为了让读者的感观更好一点…

LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145185794 Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律…

CSS认识与实践

目录 CSS 是什么 基本语法规范 引入方式 内部样式表 行内样式表 外部样式 空格规范 选择器 选择器的功能 选择器的种类 基础选择器 标签选择器 类选择器 id 选择器 通配符选择器 基础选择器小结 复合选择器 后代选择器 子选择器 并集选择器 伪类选择器 复合…

vue项目引入阿里云svg资源图标

1:生成svg图标 登录阿里云官网 1.1 创建项目组 1.2 从阿里云网站上面获取喜欢的图标加入到已有的项目组 1.3 如果团队有自己的设计师,也可以让设计师上传自己的svg图标到阿里云指定的项目组; 使用的时候,把 资源包下载到本地项…

Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)

目录 前言1. 基本知识2. Java代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线!! 对于Java的基本知识推荐阅读: java框架…

使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址

从http切换至https 许多不同ip的图片地址需要统一进行代理 部分图片地址是重定向地址 nginx配置 主站地址:https://192.168.123.100/ 主站nginx配置 server {listen 443 ssl;server_name localhost;#ssl证书ssl_certificate ../ssl/ca.crt; #私钥文件ssl_ce…

Unix 与 Linux 深度应用与对比分析

文章目录 引言Unix 与 Linux 的相似之处1. 设计理念2. 文件系统结构3. 命令行界面4. 多用户多任务支持 Unix 与 Linux 的不同之处1. 开源性2. 内核架构3. 应用场景4. 发行版 Unix 和 Linux 的开发语言1. C 语言2. 脚本语言 在 Unix 和 Linux 上开发简单应用示例1. 编写一个简单…

事务机制及Spring事务管理

事务概览 事务是一组操作的集合,它是一个不可分割的工作单位。 事务会将所有的操作作为一个整体一起向系统提交或撤销操作请求,换句话说:这些操作要么同时成功、要么同时失败。 具体案例 我们先看一个需求:现在有两张数据库表&…

48.【6】BUUCTF WEB BabySQL

进入靶场 order by 判断字节数 输入内容是 1 order by 2# 显示图片内容,知被过滤了 一般最简单的绕过方法是双写或大小写 尝试双写 It is ok continue 经过多次尝试,4时异常,所以字节数是3 union select都被过滤了 双写解决,成…

Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端

文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理(1)为RestClient(2)为WebClient(3)为RestTemplate 注意 一、概述 官方文档…

高效并发编程:掌握Go语言sync包的使用方法

高效并发编程:掌握Go语言sync包的使用方法 引言基本概念并发与并行互斥锁(Mutex)读写锁(RWMutex)等待组(WaitGroup)一次性操作(Once)条件变量(Cond&#xff0…

.Net Core webapi 实现JWT认证

文章目录 需求准备创建JWT配置创建JWTService注册JWT创建中间件读取jwt的token在需要的接口上添加属性启动认证启动swagger的授权认证使用 需求 实现一个记录某个用户所有操作的功能 准备 创建你的webapi项目从nuget下载安装JWT资源包根据你的项目使用.net版本下载对应的jwt…

Linux《Linux简介与环境的搭建》

在学习了C或者是C语言的基础知识之后就可以开始Linux的学习了,现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用,所以Linxu也是我们学习编程的重要环节,在此接下来我们将会花大量的时间在Linxu的学习上。在学习Linux初期你可以会像初…

从零开始:Gitee 仓库创建与 Git 配置指南

引言 Git 是一款广泛使用的版本控制工具,它能够帮助开发者在开发过程中高效地管理代码的版本。而 Gitee(码云)是国内知名的 Git 托管平台,它提供了强大的代码托管、团队协作和项目管理功能。如果你是 Git 和 Gitee 的新手&#x…

创建模式、结构模式及行为模式

谁在什么地方提供什么功能? 要设计几个类?这些类各个是什么功能?相互间的关系是什么? 创建模式指的是对象那么多,怎么把它"生"出来?生几个?从这个角度上来说数组就是一种另类的创建模式。主要…

SpringBoot链接Kafka

一、SpringBoot生产者 (1)修改SpringBoot核心配置文件application.propeties, 添加生产者相关信息 # 连接 Kafka 集群 spring.kafka.bootstrap-servers192.168.134.47:9093# SASL_PLAINTEXT 和 SCRAM-SHA-512 认证配置 spring.kafka.properties.securi…

Linux下源码编译安装Nginx1.24及服务脚本实战

1、下载Nginx [rootlocalhost ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz2、解压 [rootlocalhost ~]# tar xf nginx-1.24.0.tar.gz -C /usr/local/src/3、安装依赖 [rootlocalhost ~]# yum install gcc gcc-c make pcre-devel openssl-devel -y4、 准备 N…

解答二重积分

什么是积分? 一元函数的积分。具体计算过程,是将无数个小矩形加起来,然后求极限。 而今天我们要讲的积分,是二元函数的积分。我们可以用曲顶柱体的体积来理解。 什么是曲顶柱体? 它的底是xoy平面上的一个闭区域。顶是…

代理模式实现

一、概念:代理模式属于结构型设计模式。客户端不能直接访问一个对象,可以通过代理的第三者来间接访问该对象,代理对象控制着对于原对象的访问,并允许在客户端访问对象的前后进行一些扩展和处理;这种设置模式称为代理模…