论文信息

论文标题:A Fourier-based Framework for Domain Generalization
论文作者:Qinwei Xu, Ruipeng Zhang, Ya Zhang, Yanfeng Wang, Qi Tian
论文来源: CVPR 2021
论文地址:download 
论文代码:download

1 介绍

  问题描述:当训练集和测试集数据分布不相同时,深度神经网络往往会性能退化,而解决该问题的一系列方法则称为域泛化(Domain Generalization)。

  动机:

  

  傅里叶频谱的相位分量保留了原始信号的高阶语义,而振幅分量包含了低阶统计量。

2 方法

  整体框架:

  

2.1 基于傅里叶的数据增强

  框架:

  

  对于单通道图像 $x$,将其傅里叶变换 $\mathcal{F}(x)$ 表示为:

    $\mathcal{F}(x)(u, v)=\sum\limits_{h=0}^{H-1} \sum\limits _{w=0}^{W-1} x(h, w) e^{-j 2 \pi\left(\frac{h}{H} u+\frac{w}{W} v\right)} \quad\quad\quad(1)$

  将振幅分量 和 相位分量 分别表示为:

    $\begin{array}{l}\mathcal{A}(x)(u, v)=\left[R^{2}(x)(u, v)+I^{2}(x)(u, v)\right]^{1 / 2} \\\mathcal{P}(x)(u, v)=\arctan \left[\frac{I(x)(u, v)}{R(x)(u, v)}\right]\end{array} \quad\quad\quad(2)$

  其中,$R(x)$ 和 $I(x)$ 分别表示 $\mathcal{F}(x)$ 的实部和虚部。对于 RGB 图像,分别计算每个通道的傅里叶变换,得到相应的振幅和相位信息。

  利用傅里叶相位分量的语义保留特性,在这里尝试建立专门突出相位信息的模型,期望其在跨领域具有更好的泛化能力。为了实现这一目标,一个自然的选择是通过某种形式的数据增强来干扰原始图像中的振幅信息。受 MixUp 的启发,设计了一种新的数据增强策略,通过在来自任意源域的两幅图像的振幅谱之间进行线性插值:

    $\hat{\mathcal{A}}\left(x_{i}^{k}\right)=(1-\lambda) \mathcal{A}\left(x_{i}^{k}\right)+\lambda \mathcal{A}\left(x_{i^{\prime}}^{k^{\prime}}\right) \quad\quad\quad(3)$

  其中,$\lambda \sim U(0, \eta)$ 和超参数 $\eta$ 控制了增强的强度。

  然后将 $\text{mixup}$ 生成的振幅谱与原始相位谱相结合,形成一种新的傅里叶表示:

    $\mathcal{F}\left(\hat{x}_{i}^{k}\right)(u, v)=\hat{\mathcal{A}}\left(x_{i}^{k}\right)(u, v) * e^{-j * \mathcal{P}\left(x_{i}^{k}\right)(u, v)} \quad\quad\quad(4)$

  通过傅里叶逆变换,生成增广图像 $\hat{x}_{i}^{k}=\mathcal{F}^{-1}\left[\mathcal{F}\left(\hat{x}_{i}^{k}\right)(u, v)\right] $。

  然后,将增强的图像和原始标签提供给模型进行分类。损失函数被表示为标准的交叉熵

    $\mathcal{L}_{c l s}^{a u g}=-y_{i}^{k} \log \left(\sigma\left(f\left(\hat{x}_{i}^{k} ; \theta\right)\right)\right)\quad\quad\quad(5)$

  核心代码:

def colorful_spectrum_mix(img1, img2, alpha, ratio=1.0):  
    # img1.shape = (224, 224, 3)
    # img2.shape = (224, 224, 3)
    # alpha = 1.0
    lam = np.random.uniform(0, alpha)

    img1_fft = np.fft.fft2(img1, axes=(0, 1))
    img2_fft = np.fft.fft2(img2, axes=(0, 1))
    img1_abs, img1_pha = np.abs(img1_fft), np.angle(img1_fft)  ## 取复数的绝对值,即复数的模
    img2_abs, img2_pha = np.abs(img2_fft), np.angle(img2_fft)
 
    img1_abs = np.fft.fftshift(img1_abs, axes=(0, 1))    #将零频率分量移到频谱中心。
    img2_abs = np.fft.fftshift(img2_abs, axes=(0, 1))    #将零频率分量移到频谱中心。

    img1_abs_ = np.copy(img1_abs)
    img2_abs_ = np.copy(img2_abs)
    img1_abs[0: 224, 0:224] = lam * img2_abs_[0:224, 0:224] + (1 - lam) * img1_abs_[0: 224,0:224]
    img2_abs[0:0 + 224, 0:0 + 224] = lam * img1_abs_[0:224, 0: 224] + (1 - lam) * img2_abs_[0: 224,0: 224]
                                                                               

    img1_abs = np.fft.ifftshift(img1_abs, axes=(0, 1))   #将低频从中心移到左上角。
    img2_abs = np.fft.ifftshift(img2_abs, axes=(0, 1))   #将低频从中心移到左上角。

    img21 = img1_abs * (np.e ** (1j * img1_pha))
    img12 = img2_abs * (np.e ** (1j * img2_pha))
    img21 = np.real(np.fft.ifft2(img21, axes=(0, 1)))
    img12 = np.real(np.fft.ifft2(img12, axes=(0, 1)))
    img21 = np.uint8(np.clip(img21, 0, 255))
    img12 = np.uint8(np.clip(img12, 0, 255))

View Code

2.2 正则化 [Co-teacher Regularization ]

  上述基于傅里叶的数据增强施加了一个隐式约束,要求模型在数据增强前后预测相同的对象。然而,从具有相同相位信息的原始图像和增强图像中所预测的分类关系可能会有所不同。例如,一个模型可能会从原始图像中了解到,马更像长颈鹿,而不是房子。然而,由于不同的增强,这种学习到的知识可能与从增强图像中学习到的知识相冲突。为了缓解这种分歧,我们添加了一个以双重一致性损失形式存在的显式约束。正如在[42]中所建议的,使用一个动量更新的教师模型来为一致性对齐提供更好的目标。在训练过程中,教师模型通过指数移动平均从学生模型中接收参数:

    $\theta_{\text {tea }}=m \theta_{\text {tea }}+(1-m) \theta_{s t u}\quad\quad\quad(6)$

  其中,$m$ 是动量参数。请注意,在反向传播过程中,没有梯度流过教师模型。然后,本文迫使模型在来自原始图像和增强图像的输出之间保持一致:

    $\mathcal{L}_{\text {cot }}^{a 2 o}=\operatorname{KL}\left(\sigma\left(f_{\text {stu }}\left(\hat{x}_{i}^{k}\right) / T\right) \| \sigma\left(f_{\text {tea }}\left(x_{i}^{k}\right) / T\right)\right)\quad\quad\quad(7)$

    $\mathcal{L}_{\text {cot }}^{o 2 a}=\mathrm{KL}\left(\sigma\left(f_{\text {stu }}\left(x_{i}^{k}\right) / T\right) \| \sigma\left(f_{\text {tea }}\left(\hat{x}_{i}^{k}\right) / T\right)\right)\quad\quad\quad(8)$

  在这里,我们将学生增强图像的输出与教师原始图像的输出对齐,以及学生原始图像的输出与教师增强图像的输出对齐。由于一致性损失采用对偶形式并包含了动量教师,为了简洁,我们将损失重命名为共同教师正则化。通过联合教师正则化,我们希望我们的模型从原始图像和增强图像中平等地学习。更具体地说,原始图像和它的增强对应图像可以看作是同一物体的两个视图。当从“原始观”学习时,学生模式不仅以基本真理为指导,而且以从“增强观”学习的教师模式为指导。当学生模型从“增强视角”中学习时也是如此。这种同时进行的协同教学过程使原始的观点和增强的观点之间能够进行全面的知识共享,并进一步指导模型关注不变的阶段信息,以达到两种观点之间的一致性。

  将所有的损失函数结合在一起,可以实现以下完整的目标:

    $\mathcal{L}_{F A C T}=\mathcal{L}_{c l s}^{o r i}+\mathcal{L}_{c l s}^{a u g}+\beta\left(\mathcal{L}_{c o t}^{a 2 o}+\mathcal{L}_{c o t}^{o 2 a}\right)\quad\quad\quad(9)$