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

2024-04-27 12:28

本文主要是介绍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 resultelse: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

这篇关于ICCV 2021 | FcaNet: Frequency Channel Attention Networks 中的频率分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Spring、Spring Boot、Spring Cloud 的区别与联系分析

《Spring、SpringBoot、SpringCloud的区别与联系分析》Spring、SpringBoot和SpringCloud是Java开发中常用的框架,分别针对企业级应用开发、快速开... 目录1. Spring 框架2. Spring Boot3. Spring Cloud总结1. Sprin

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景