每日Attention学习7——Frequency-Perception Module

模块出处

[link] [code] [ACM MM 23] Frequency Perception Network for Camouflaged Object Detection


模块名称

Frequency-Perception Module (FPM)


模块作用

获取频域信息,更好识别伪装对象


模块结构

在这里插入图片描述

模块代码
import torch
import torch.nn as nn
import torch.nn.functional as Fclass FirstOctaveConv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, alpha=0.5, stride=1, padding=1, dilation=1,groups=1, bias=False):super(FirstOctaveConv, self).__init__()self.stride = stridekernel_size = kernel_size[0]self.h2g_pool = nn.AvgPool2d(kernel_size=(2, 2), stride=2)self.h2l = torch.nn.Conv2d(in_channels, int(alpha * in_channels),kernel_size, 1, padding, dilation, groups, bias)self.h2h = torch.nn.Conv2d(in_channels, in_channels - int(alpha * in_channels),kernel_size, 1, padding, dilation, groups, bias)def forward(self, x):if self.stride ==2:x = self.h2g_pool(x)X_h2l = self.h2g_pool(x)X_h = xX_h = self.h2h(X_h)X_l = self.h2l(X_h2l)return X_h, X_lclass OctaveConv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, alpha=0.5, stride=1, padding=1, dilation=1,groups=1, bias=False):super(OctaveConv, self).__init__()kernel_size = kernel_size[0]self.h2g_pool = nn.AvgPool2d(kernel_size=(2, 2), stride=2)self.upsample = torch.nn.Upsample(scale_factor=2, mode='nearest')self.stride = strideself.l2l = torch.nn.Conv2d(int(alpha * in_channels), int(alpha * out_channels),kernel_size, 1, padding, dilation, groups, bias)self.l2h = torch.nn.Conv2d(int(alpha * in_channels), out_channels - int(alpha * out_channels),kernel_size, 1, padding, dilation, groups, bias)self.h2l = torch.nn.Conv2d(in_channels - int(alpha * in_channels), int(alpha * out_channels),kernel_size, 1, padding, dilation, groups, bias)self.h2h = torch.nn.Conv2d(in_channels - int(alpha * in_channels),out_channels - int(alpha * out_channels),kernel_size, 1, padding, dilation, groups, bias)def forward(self, x):X_h, X_l = xif self.stride == 2:X_h, X_l = self.h2g_pool(X_h), self.h2g_pool(X_l)X_h2l = self.h2g_pool(X_h)X_h2h = self.h2h(X_h)X_l2h = self.l2h(X_l)X_l2l = self.l2l(X_l)X_h2l = self.h2l(X_h2l)X_l2h = F.interpolate(X_l2h, (int(X_h2h.size()[2]),int(X_h2h.size()[3])), mode='bilinear')X_h = X_l2h + X_h2hX_l = X_h2l + X_l2lreturn X_h, X_lclass LastOctaveConv(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, alpha=0.5, stride=1, padding=1, dilation=1,groups=1, bias=False):super(LastOctaveConv, self).__init__()self.stride = stridekernel_size = kernel_size[0]self.h2g_pool = nn.AvgPool2d(kernel_size=(2, 2), stride=2)self.l2h = torch.nn.Conv2d(int(alpha * out_channels), out_channels,kernel_size, 1, padding, dilation, groups, bias)self.h2h = torch.nn.Conv2d(out_channels - int(alpha * out_channels),out_channels,kernel_size, 1, padding, dilation, groups, bias)self.upsample = torch.nn.Upsample(scale_factor=2, mode='nearest')def forward(self, x):X_h, X_l = xif self.stride == 2:X_h, X_l = self.h2g_pool(X_h), self.h2g_pool(X_l)X_h2h = self.h2h(X_h) X_l2h = self.l2h(X_l) X_l2h = F.interpolate(X_l2h, (int(X_h2h.size()[2]), int(X_h2h.size()[3])), mode='bilinear')X_h = X_h2h + X_l2h return X_hclass FPM(nn.Module):def __init__(self, in_channels, out_channels, kernel_size=(3, 3)):super(FPM, self).__init__()self.fir = FirstOctaveConv(in_channels, out_channels, kernel_size)self.mid1 = OctaveConv(in_channels, in_channels, kernel_size)self.mid2 = OctaveConv(in_channels, out_channels, kernel_size)self.lst = LastOctaveConv(in_channels, out_channels, kernel_size)def forward(self, x):x_h, x_l = self.fir(x)                  x_h_1, x_l_1 = self.mid1((x_h, x_l))     x_h_2, x_l_2 = self.mid1((x_h_1, x_l_1)) x_h_5, x_l_5 = self.mid2((x_h_2, x_l_2)) x_ret = self.lst((x_h_5, x_l_5))return x_retif __name__ == '__main__':x = torch.randn([3, 256, 16, 16])fpm = FPM(in_channels=256, out_channels=64)out = fpm(x)print(out.shape)  # 3, 64, 16, 16

原文表述

具体来说,我们采用八度卷积以端到端的方式自动感知高频和低频信息,从而实现伪装物体检测的在线学习。八度卷积可以有效避免DCT 引起的块状效应,并利用GPU的计算速度优势。此外,它可以轻松插入任意网络。

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

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

相关文章

【Python函数编程实战】:从基础到进阶,打造代码复用利器

文章目录 🚋前言🚀一、认识函数🌈二、函数定义❤️三、函数调用⭐四、实参与形参💥1. 形式参数🚲2. 实际参数🔥1. 位置参数☔2. 关键字参数🎬3. 默认参数🔥4. 可变数量参数(不定长参…

Nomad Web 1.0.12还能这样

大家好,才是真的好。 前几天讲代码和开发,忽略了大家的真实感受,那就是不爱开。我也记起来我们很久没有讲Notes/Domino产品的更新,因为除了补丁程序外,确实没多少更新。 不过就在前两天,有一项产品得到了…

零成本、高效率:免费可视化工具的魅力所在

在如今这个数据驱动的时代,免费可视化工具越来越受到人们的欢迎。这些工具不仅降低了数据分析的门槛,还为用户提供了强大的功能和极高的灵活性,使得各行各业的人们都能够轻松地利用数据做出明智的决策。首先,免费可视化工具的零成…

【Qt】认识Qt界面Hello world小程序

一.认识Qt界面 1.左边栏 在编辑模式下,左边竖排的两个窗⼝叫做 "边栏" 。 ① 是项⽬⽂件管理窗⼝ ② 是打开⽂件列表窗⼝。 边栏⾥的窗⼝数⽬可以增加,边栏⼦窗⼝标题栏有⼀排⼩按钮,最右边的是关闭按钮,倒数第⼆个是 …

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC 1.1 定义(同步串行半双工通信总线) IIC(Inter-Integrated Circuit)又称I2C,是是IICBus简称,所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备…

猫头虎 Gemma和Gemini模型的区别是什么?

猫头虎 🐯 Gemma和Gemini模型的区别是什么? 摘要📘 在这篇文章中,我们将深入探讨Gemma和Gemini这两个由Google开发的AI模型。我们会对比它们的参数规模、计算资源需求和集成难度,帮助大家了解这两者之间的主要区别。…

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来:深入了解机器学习的核心技术与实际应用 💎1.引言💎1.1 什么是机器学习? 💎2 机器学习的分类💎3 常用的机器学习算法💎3.1 线性回归(Linear Regression)&#x1…

Redis集群-主从复制、哨兵

●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。 主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障 恢复无法自动化;写操作无法负载均…

幻兽帕鲁服务器如何安装模组安装

由于模组多数为Window版本的,所以本教程以服务端为Window的作为演示(Linux服务端的也是一样的操作)百度莱卡云开服 如果你你是Linux版本的,请点击跳转切换服务端教程 接下来是本地安装模组包的方法(服务器自带&#xf…

妙笔 WonderPen 专业版会员值得购买吗?

在信息爆炸的时代,写作已经是一项重要技能。无论是学生、职场人士还是自由职业者,都经常需要写点东西。 一个好的工具能让写作成为享受,今天就为大家推荐专业写作工具:妙笔。为长文写作设计,且有云服务功能&#xff0…

自闭症儿童能不能用药

在星贝育园自闭症儿童康复学校,我们一直秉持着谨慎且保守的态度对待自闭症儿童的用药问题。我们坚定地认为,在大多数情况下,药物并非自闭症儿童康复的首选。 自闭症是一种神经发育障碍,其核心症状包括社交沟通障碍、重复刻…

为什么网络爬虫广泛使用HTTP代理?

一、引言 网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP 代理成…

C++专业面试真题(1)学习

进程有多少种状态,如何转换 创建:一个进程启动,首先进入创建状态,需要获取系统资源创建进程管理科PCB完成资源分配。就绪态:在创建完成后,进程已经准备好,处于就绪状态,但是还未获得…

Linux内核——Linux内核体系模式(二)

1 Linux系统的中断机制 Linux内核将中断分为两类:硬件中断和软件中断(异常)。每个中断是由0-255之间的一个数字进行标识。 中断int0-int31(0x00-0x1f)作为异常int32-int255由用户自己设定 int32-int47对应与8259A中断…

PCL 基于点云RGB颜色的区域生长算法

RGB颜色的区域生长算法 一、概述1.1 算法定义1.2 算法特点1.3 算法实现二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 算法定义 点云RGB区域生长算法: 是一个基于RGB颜色信息的区域生长算法,用于点云分割。该算法利用了点云中相邻点之间的颜色相似性来将点云分割成…

志愿者管理系统带讲解,保运行

技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 分为 管理员端 用户端 功能描述 用户端 管理员端 观看地址: B站 : 【毕设者】志愿者管理系统(安装讲解源码)

进程,线程,虚拟内存,交换技术

参考资料: 参考视频1https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from333.999.0.0&vd_source97411b9a8288d7869f5363f72b0d7613 参考视频2https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from333.337.search-card.all.click&vd_source…

Redis基础教程(六):redis 哈希(Hash)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

3D开发工具HOOPS助力3D制造业仿真应用实现工厂环境规划和模拟!

HOOPS SDK是全球领先的3D领域开发工具提供商Tech Soft 3D 打造的控件产品,HOOPS SDK包括4款3D软件开发工具,其中HOOPS Exchange是一款CAD数据转换工具,可读取和导入30多种CAD文件格式;HOOPS Communicator是一款专注于Web端工程图形…

昇思25天学习打卡营第13天|基于MobileNetV2的垃圾分类

MobileNetv2模型原理介绍 相比于传统的卷积神经网络,MobileNet网络使用深度可分离卷积(Depthwise Separable Convolution)的思想在准确率小幅度降低的前提下,大大减小了模型参数与运算量。并引入宽度系数α和分辨率系数β使模型满…