ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析

ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析

  • 论文:https://arxiv.org/abs/2012.11879
  • 代码:https://github.com/cfzd/FcaNet

文章是围绕 2D 的 DCT 进行展开的,本文针对具体的计算逻辑进行梳理和解析。

f ( u , v ) = α u α v H W ∑ i = 0 H − 1 ∑ j = 0 W − 1 f ( i , j ) cos ⁡ ( 2 i + 1 ) u π 2 H cos ⁡ ( 2 j + 1 ) v π 2 W = ∑ i = 0 H − 1 [ α u H cos ⁡ ( 2 i + 1 ) u π 2 H ] ∑ j = 0 W − 1 [ α v W cos ⁡ ( 2 j + 1 ) v π 2 W ] x ( i , j ) = ∑ i = 0 H − 1 A u i ∑ j = 0 W − 1 A v j x ( i , j ) = ∑ i = 0 H − 1 ∑ j = 0 W − 1 x ( i , j ) B u , v i , j ,   u ∈ { 0 , 1 , … , H − 1 } ,   v ∈ { 0 , 1 , … , W − 1 } α u = { 1 u = 0 2 u ≠ 0 , α v = { 1 v = 0 2 v ≠ 0 , x = ∑ u = 0 H − 1 ∑ v = 0 W − 1 f ( u , v ) B u , v i , j \begin{align} \\ f(u,v) &= \sqrt{\frac{\alpha_{u}\alpha_{v}}{HW }} \sum^{H-1}_{i=0} \sum^{W-1}_{j=0} f(i,j) \cos\frac{(2i+1)u\pi}{2H} \cos\frac{(2j+1)v\pi}{2W} \\ & = \sum^{H-1}_{i=0} \left[ \sqrt{ \frac{\alpha_{u}}{H} }\cos\frac{(2i+1)u\pi}{2H}\right] \sum^{W-1}_{j=0} \left[ \sqrt{ \frac{\alpha_{v}}{W} }\cos\frac{(2j+1)v\pi}{2W} \right] x(i,j) \\ & = \sum^{H-1}_{i=0} A^{i}_{u} \sum^{W-1}_{j=0} A^{j}_{v} x(i,j) \\ & = \sum^{H-1}_{i=0} \sum^{W-1}_{j=0} x(i,j) B^{i,j}_{u,v}, \, u \in \{0, 1, \dots, H-1\}, \, v \in \{0, 1, \dots, W-1\} \\ \alpha_{u} & = \left\{ \begin{matrix} 1 & u = 0 \\ 2 & u \ne 0, \end{matrix} \right. \quad \alpha_{v} = \left\{ \begin{matrix} 1 & v = 0 \\ 2 & v \ne 0, \end{matrix} \right. \\ x & = \sum^{H-1}_{u=0} \sum^{W-1}_{v=0} f(u,v) B^{i,j}_{u,v} \end{align} f(u,v)αux=HWαuαv i=0H1j=0W1f(i,j)cos2H(2i+1)uπcos2W(2j+1)vπ=i=0H1[Hαu cos2H(2i+1)uπ]j=0W1[Wαv cos2W(2j+1)vπ]x(i,j)=i=0H1Auij=0W1Avjx(i,j)=i=0H1j=0W1x(i,j)Bu,vi,j,u{0,1,,H1},v{0,1,,W1}={12u=0u=0,αv={12v=0v=0,=u=0H1v=0W1f(u,v)Bu,vi,j

实际上这里是将 2D 图像的空间索引 i , j i,j i,j 看做了时域索引,而频域分量的空间位置则由 h , w h,w h,w 索引。从上面的推导中可以看到,正反变换使用的系数是一样的。这就体现出了 DCT 的简洁性。

矩阵形式为:

f ∈ R H × W = A H ⊤ x A W = A ⊤ x A i f   H = W A H = [ ( i = 0 , u = 0 ) … ( i = 0 , u = H − 1 ) ⋮ ⋮ ⋮ ( i = H − 1 , u = 0 ) … ( i = H − 1 , u = H − 1 ) ] ∈ R H × H A W = [ ( j = 0 , v = 0 ) … ( j = 0 , v = W − 1 ) ⋮ ⋮ ⋮ ( j = W − 1 , v = 0 ) … ( j = W − 1 , v = W − 1 ) ] ∈ R W × H x = A H ⊤ f A W ( H = W 时, A H 与 A W 在是正交的, H ≠ W 时不清楚 ) \begin{align} f & \in \mathbb{R}^{H \times W} = A^{\top}_{H}xA_{W} = A^{\top}xA \quad if \, H=W \\ A_{H} & = \begin{bmatrix} (i=0,u=0) & \dots & (i=0,u=H-1) \\ \vdots & \vdots & \vdots \\ (i=H-1,u=0) & \dots & (i=H-1,u=H-1) \\ \end{bmatrix} \in \mathbb{R}^{H \times H} \\ A_{W} & = \begin{bmatrix} (j=0,v=0) & \dots & (j=0,v=W-1) \\ \vdots & \vdots & \vdots \\ (j=W-1,v=0) & \dots & (j=W-1,v=W-1) \\ \end{bmatrix} \in \mathbb{R}^{W \times H} \\ x & = A^{\top}_{H}fA_{W} (H=W时,A_{H}与A_{{W}}在是正交的,H \ne W时不清楚) \end{align} fAHAWxRH×W=AHxAW=AxAifH=W= (i=0,u=0)(i=H1,u=0)(i=0,u=H1)(i=H1,u=H1) RH×H= (j=0,v=0)(j=W1,v=0)(j=0,v=W1)(j=W1,v=W1) RW×H=AHfAW(H=W时,AHAW在是正交的,H=W时不清楚)

文中证明了 SEBlock 中的 GAP 操作就是 DCT 中的最低频率的组件。

f ( 0 , 0 ) = ∑ i = 0 H − 1 ∑ j = 0 W − 1 x ( i , j ) B 0 , 0 i , j = ∑ i = 0 H − 1 ∑ j = 0 W − 1 x ( i , j ) = GAP ( x ) H W \begin{align} f(0,0) = \sum^{H-1}_{i=0}\sum^{W-1}_{j=0}x(i,j)B^{i,j}_{0,0} = \sum^{H-1}_{i=0}\sum^{W-1}_{j=0}x(i,j) = \text{GAP}(x)HW \end{align} f(0,0)=i=0H1j=0W1x(i,j)B0,0i,j=i=0H1j=0W1x(i,j)=GAP(x)HW

所以作者们在 GAP 的基础上进一步补充了其他的频率成分。考虑变换的公式,假定 H = W = 7 H=W=7 H=W=7,则其中的基函数可以直接得出:

α u 7 cos ⁡ ( 2 i + 1 ) u π 14 = α u 7 cos ⁡ ( π u 7 ( i + 0.5 ) ) ,   u ∈ { 0 , 1 , … , 6 } \begin{align} \sqrt{ \frac{\alpha_{u}}{7} } \cos\frac{(2i+1)u\pi}{14} = \sqrt{ \frac{\alpha_{u}}{7} } \cos\left( \pi \frac{u}{7} (i+0.5) \right), \, u \in \{0, 1, \dots, 6\} \end{align} 7αu cos14(2i+1)uπ=7αu cos(π7u(i+0.5)),u{0,1,,6}

对应于代码中的:

def build_filter(self, pos, freq, POS):
    result = math.cos(math.pi * freq * (pos + 0.5) / POS) / math.sqrt(POS) 
    if freq == 0:
        return result
    else:
        return result * math.sqrt(2)

这里的 freq 实际上对应的就是前式里的 u u u v v v。因此,对于 7 × 7 7 \times 7 7×7 的数据,实际上存在 49 个分量,作者们通过大量的实验对不同分量单独使用时的效果进行了汇总:

在这里插入图片描述

通过对得分由高到低排序得到 49 个 ( u , v ) (u,v) (u,v) 对,在代码中直接按情况选择即可。

参考链接

  • 《数字图像处理》图像表征:离散傅里叶变换(DFT)、离散余弦变换(DCT)、主成分分析(PCA)- zhiwei 的文章 - 知乎 https://zhuanlan.zhihu.com/p/563668048

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

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

相关文章

【MySQL精炼宝库】数据库的约束 | 表的设计 | 聚合查询 | 联合查询

目录 一、数据库约束 1.1 约束类型: 1.2 案例演示: 二、表的设计 2.1 一对一: 2.2 一对多: 2.3 多对多: 2.4 内容小结: 三、新增 四、查询 4.1 聚合查询: 4.1.1 聚合函数: 4.1.2 GROUP BY子句&#xff1a…

linux使用docker 安装mysql redis

linux安装docker https://hub-stage.docker.com/ 前往这里搜索容器来部署。每个容器都有独立的运行环境。 具体安装教程 https://docs.docker.com/engine/install/centos/#install-using-the-repository 检查是否安装成功: sudo docker --version 配置国内镜像加速…

人脸识别概念解析

目录 1. 概述 2. 人脸检测 3. 人脸跟踪 4. 质量评价 5. 活体检测 6. 特征提取 7. 人脸验证 8. 人脸辨识 1. 概述 人脸识别在我们的生活中随处可见,例如在大楼门禁系统中,它取代了传统的门禁卡或密码,提高了进出的便捷性和安全性。在商…

Adfind的使用

Adfind是一个使用C语言写的活动目录查询工具,它允许用户轻松地搜索各种活动目录信息。它不需要安装,因为它是基于命令行的。它提供了许多选项,可以细化搜索并返回相关细节。下面讲解Adfind的参数以及其使用。 参数 执行如下命令即可查看Adf…

ruoyi-nbcio-plus基于vue3的flowable为了适配文件上传改造VForm3的代码记录

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

Flutter笔记:DefaultTextStyle和DefaultTextHeightBehavior解读

Flutter笔记 DefaultTextStyle和DefaultTextHeightBehavior解读 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

PriorityQueue—优先级队列FollowUp

FollowUp大纲: 思维导图: FollowUp PriorityQueue: Q1:但不知道是大根堆化石小根堆 A:Q1 只需要放进去几个元素peek()出元素是大的还是小的 下面如果是5就是小根堆10就是大根堆 A:默认是小根…

Github创建远程仓库(项目)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

OPPO Reno10Pro/Reno11/K10手机强解BL刷root权限KSU内核抓包刷机救砖

OPPO Reno10Pro/Reno11/K10手机虽然发布时间并不久,但由于天玑处理器的体质,已经支持强制解锁BL了,该漏洞来自第三方工具适配,支持OPPO天机8100/8200刷机救砖解锁BL不需要等待官方深度测试直接实现。解锁BL后的OPPO Reno10Pro/Ren…

华为ensp中BGP(边界网关协议)基础原理及配置命令

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月27日10点04分 BGP(边界网关协议)是一种路由协议,用于在互联网中的不同自治系统(AS)之间交换路由信息。它…

Edge浏览器新特性深度解析,写作ai免费软件

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

运算符重载(2)

1.赋值运算符重载 #include<iostream> using namespace std;class Person { friend void test01(); public:Person(int age){m_Age new int(age);}/*堆区的数据由程序员手动开辟并手动释放*/~Person(){if (m_Age ! NULL){delete m_Age;}}Person& operator(Person &a…

如此建立网络根文件系统 Mount NFS RootFS

安静NFS系统服务 sudo apt-get install nfs-kernel-server 创建目录 sudo mkdir /rootfsLee 将buildroot编译的根文件系统解压缩到 sudo tar xvf rootfs.tar -C /rootfsLee/ 添加文件NFS访问路径 sudo vi /etc/exports sudo /etc/exports文件&#xff0c;添加如下一行 …

比 PSD.js 更强的下一代 PSD 解析器,支持 WebAssembly

比 PSD.js 更强的下一代 PSD 解析器&#xff0c;支持 WebAssembly 1.什么是 webtoon/ps webtoon/ps 是 Typescript 中轻量级 Adobe Photoshop .psd/.psb 文件解析器&#xff0c;对 Web 浏览器和 NodeJS 环境提供支持&#xff0c;且做到零依赖。 Fast zero-dependency PSD par…

创建SpringBoot和RabbitMQ的整合项目

文章目录 创建SpringBoot和RabbitMQ的整合项目首先快速创建一个maven项目引入SpringBoot整合rabbitMQ的依赖在src/main目录下创建resources目录并引入配置文件写消息发送者MessageSender写消息接收者MessageReceiver写RabbitMQConfig配置类写SpringBoot启动主类CommandLineRunn…

决策树模型示例

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个决策树模型pytorch程序,最后打印5个条件分别的影响力。 一 决策树模型是一种非参数监督学习方法&#xff0c;主要…

Java高阶私房菜:JVM垃圾回收机制及算法原理探究

目录 垃圾回收机制 什么是垃圾回收机制 JVM的自动垃圾回收机制 垃圾回收机制的关键知识点 初步了解判断方法-引用计数法 GCRoot和可达性分析算法 什么是可达性分析算法 什么是GC Root 对象回收的关键知识点 标记对象可回收就一定会被回收吗&#xff1f; 可达性分析算…

使用R语言进行简单的因子分析

在本文中&#xff0c;将介绍如何使用R语言进行因子分析&#xff0c;并通过一个示例演示整个过程。因子分析是一种多元统计分析方法&#xff0c;用于探索变量之间的潜在结构和关系。R语言提供了丰富的统计工具和包&#xff0c;使因子分析的实现变得简单而高效。 准备工作 首先…

c++中的链表list的模拟实现

拖更了半个月&#xff0c;我终于来填c的坑啦。上次我们说的vetcor不知道小伙伴还记得多少呢&#xff1f;今天我们要讲list的模拟实现。 目录 架构结点list表的结构 构造函数尾插push_back()尾删pop_back()计算个数&#xff1a;size()判断空empty()※迭代器问题普通迭代器迭代器…

数据结构:实验六:图的操作

一、 实验目的 &#xff08;1&#xff09;掌握图的邻接矩阵和邻接表存储结构。 &#xff08;2&#xff09;熟练图的邻接表的基本运算。 &#xff08;3&#xff09;加深图的深度优先遍历算法和广度优先遍历算法的理解 二、 实验要求 有下图所示的带权有向图及其对应的邻…
最新文章