(论文笔记)NPR

235 阅读1分钟

Rethinking the Up-Sampling Operations in CNN-based Generative Network for Generalizable Deepfake Detection cvpr2024

activation

之前的论文考虑上采样时,通常使用频率方面的角度,由上采样产生的全局伪影作为forgery artifacts,但泛化性有限,作者考虑是否可以用像素间的局部相互依赖作为artifacts进行检测。

method

由于生成器的上采样过程,局部像素表现出很强的关系。例如,使用最近邻插值会导致局部 2×2 像素共享相同值。在上采样操作之后,通过卷积层进一步处理缩放的特征以生成图像。在此过程中,通过结合上采样操作和 CNN 层的平移不变性,在局部像素之间建立关系。并且GAN和diffusion在生成图片的过程中都会进行上采样

image.png 但是考虑到上采样产生的GANs频域的不同模式,基于频率的artifacts不足以实现泛化检测。作者通过分析接近输出层的上采样层和卷积层,当我们将卷积后的特征以ll为2拆分为许多个2X2的小patch后进行分析,可以发现这两层主要有三个特点:1)同一个patch内像素值是强相关的。2)卷积在推理阶段是固定的。3)卷积具有平移不变性。因此,每一个patch内都有元素相关性。作者通过这种每一个patch内的局部相关性作为artifacts。作者提取每个patch内的artifacts方式如下: 假设上采样前x=RW×H×Cx=\mathbb{R}^{W\times H\times C}经过上采样层,上采样ll倍得到x^R(l×W)×(l×H)×C\hat{x} \in \mathbb{R}^{(l\times W)\times(l\times H)\times C},之后将x^\hat{x}分为H×WH \times Wl×ll\times l的小块,即vIcVIv^{c}_{I}\in V_{I},最后使用减法提取vIcv_{I}^{c}内的相对关系: vIc={w1,...,wi,...,wn},n=l×lv^Ic={w1wj,...,wiwj,...,wnwj},1jn v_{I}^{c} = \{w_{1},...,w_{i},...,w_{n} \}, n=l\times l \\ \hat{v}_{I}^{c}=\{w_{1}-w_{j},...,w_{i}-w_{j},...,w_{n}-w_{j} \}, 1\leq j\leq n \\ 在本文中,作者主要将lljj取为2和1。

image.png

其实作者公布的源码上非常简单巧妙。

ResNet(nn.Module)::
    def __init__():
        ...
    def interpolate(self, img, factor):
        return F.interpolate(F.interpolate(img, scale_factor=factor, mode='nearest', recompute_scale_factor=True), scale_factor=1/factor, mode='nearest', recompute_scale_factor=True)
    def forward(self, x) :
        NPR  = x - self.interpolate(x, 0.5)
        x = self.conv1(NPR*2.0/3.0)
        # 接下来和做的和ResNet一样,论文里好像没说为啥要*2/3,可能是为了增强这种关系吧