Learning in the Frequency Domain(频域)阅读笔记

1、背景知识

1.1、频域

频域相关知识:频谱、相位谱、傅里叶变换、欧拉公式等…

傅里叶级数:
任何周期函数都可以分解成一堆(无穷个)正弦函数 Asin(wx+φ),又因为sin(a+b) = sina cosb+cosa sinb,则对于任何周期函数可以分解为一堆正弦和余弦函数。
傅里叶级数所做的工作:

  • 把{1,sinx,cosx,sin2x,cos2x,…,…}看成空间的基(原因:这组基的各部分之间是相互正交的,也就是线性无关的);
  • 然后将f(x)展开成这组基的线性组合。

1.2、YCbCr彩色空间

YCbCr是色彩空间的一种,是YUV的压缩和偏移版本,通常会用于的影响连续处理,或是数字摄影系统中。其中,Y表示亮度,Cb表示蓝色色度,Cr表示红色色度。我们常见的JPEG就采用的是这种格式。
通常会采用4:1:1,即每个点保存一个8bit的Y值,而每2x2个点保存一个8bit的Cr值和Cb值。这样,原本在RGB的图像中每个点需要8bits x 3=24bits,当转化为YCbCr后,每个点仅需要8bits+8bits/4+8bits/4=12bits。这样图像大小就变为了原来的一半。

Learning in the Frequency Domain(频域)阅读笔记_第1张图片

或者写成矩阵运算:

Learning in the Frequency Domain(频域)阅读笔记_第2张图片

效果如下:

Learning in the Frequency Domain(频域)阅读笔记_第3张图片 Learning in the Frequency Domain(频域)阅读笔记_第4张图片

2、问题

大部分CNN模型的输入是224x224的RGB图,RGB图通常较大,在CPU和GPU传输需要较大通信带宽。传统方法是对输入图像进行下采样(池化层),这种方法会对信息带来损失,从而导致精度下降。

本文思路:输入的RGB图像通过DCT变换,在保留更多图像信息(不影响精度)的前提下,减少CPU和GPU通信带宽,保持较高的精度。

Learning in the Frequency Domain(频域)阅读笔记_第5张图片

如上图所示:
传统方法中,图像先在CPU进行预处理,然后将处理后的High CB的信息传到GPU进行学习。
新方法中,图像先在CPU进行DCT变换,并通过通道选择后,将low CB的信息传到GPU进行学习。

3、解决方法

3.1、DCT(离散余弦变换)

Learning in the Frequency Domain(频域)阅读笔记_第6张图片
  1. Spatial resize and crop:对原始图像进行预处理(仿射变换)。
  2. DCT transform:将预处理后的图像(RGB格式)转成YCbCr格式,再将YCbCr格式转成空间频域上。输入图片大小是224x224x3,以8x8分块进行DCT变换,然后将8x8的系数展开成64大小的张量。即(224,224,1)==>(28,28,64)
  3. DCT reshape:将同一频率下的二维DCT系数分到同一通道下,组成三维DCT数据。
  4. DCT channel select:将影响力较强的频率通道选出来。
  5. DCT concatenate:将被选出来的频率通道合并成一个张量。
  6. DCT normalize:用通过训练集得到的均值和方差对每个频率通道进行归一化。

3.1、DCT+CNN(以ResNet-50为例)

经过上述处理后,图片的形状变成(H/8, W/8, C*64),例如(224,224,3)==>(28,28,192)。
Learning in the Frequency Domain(频域)阅读笔记_第7张图片

对CNN网络进行修改,只需要将第一个残差块的输入通道数改成64(符合DCT的输出通道数),然后将原本的前三层输入换成DCT。

3.1、动态通道选择

Learning in the Frequency Domain(频域)阅读笔记_第8张图片
  1. Tensor1为输入向量,尺寸为(W,H,C),这里C代表频率通道;
  2. 对Tensor1使用average pooling,得到的向量Tensor2;
  3. 对Tensor2使用的卷积核进行卷积操作,得到的向量Tensor3,从Tensor1到Tensor3的转换类似于squeeze and excitation block (SE-Block);
  4. Tensor3中的每个元素与两个训练参数相乘得到的向量对Tensor4(因为没看到代码,笔者私以为这里的两个参数是特意设定的);
  5. 对Tensor4中的每个频率通道的两个数进行归一化,通过对向量对中的两个向量比较确定是否采用该频率(笔者个人理解这里的比较应该是人为将向量对中的一个设定成了基准,然后用另一个和他比较大小,如果基准小,则采用),采用为1,不采用归0,然后与输入数据进行点乘得到Tensor5。(值得一提的是,由于参数选择使用的是argmax,所以这里用Gumbel Softmax的方式使得离散的数据可导,允许梯度通过离散采样过程反向传播)。

4、实验发现

  1. 相比于高频通道,低频通道出现的频率更高;
  2. 相比于Cb和Cr,Y通道会更多地被选择;

参考文献和博客:
解读基于频域的图像分类网络——Learning in the Frequency Domain阅读笔记
傅里叶分析之掐死教程(完整版)更新于2014.06.06
Learning in the Frequency Domain

你可能感兴趣的:(图像分类,计算机视觉,人工智能)