DOA-GAN论文解读

DOA-GAN论文解读

Insight

  • 提出了基于双阶注意力的 GAN 用于检测和定位图像中的 copy-move 操作。

  • 1st-order注意力模型提取篡改区域注意力图,2nd-order注意力模型提取图像中的像素依赖。两个注意力图提供更具判别性的特征用于 copy-move 的检测和定位。

Method

网络的框架图如下所示

  • 生成器是一个端到端的的网络结构,用于检测图像是否被篡改以及定位篡改区域。
  • 判别器用于判别预测结果的mask图像与ground-truth图像是否相同。

生成器是一个端到端的统一的结构,完成检测和定位任务。

  1. 给定一幅输入图像 \(I\),使用与训练好的Vgg19模型的前四层模块提取图像的特征,将特征图resize成统一大小,再concatenate为一个张量图 \(F_{c a t}\)

  2. 计算仿射矩阵,经过双顺序注意力模型得到注意力图 \(A_{1}、A_{2}\)

  3. 参数不同的ASPP-1 和 ASPP-2 提取上下文特征 \(F_{a s p p}^{1}、F_{a s p p}^{2}\)

  4. \(A_{1}\) 分别与 \(F_{a s p p}^{1}、F_{a s p p}^{2}\) 像素乘得到 \(F_{\text {atten }}^{1}、F_{\text {atten }}^{2}\)

  5. \(A_{2}\) 分别与 \(F_{\text {atten }}^{1}、F_{\text {atten }}^{2}\) 做矩阵乘法得到 \(F_{\text {cooc }}^{1}、F_{\text {cooc }}^{2}\)

  6. 把四个特征图concatenate:

    • 输入检测分支,得出检测分数,即图像篡改的可能性大小;
    • 输入定位分支,得到 mask。

判别器的输入是 I 和 mask M,鉴别器被训练来判别式 ground truth mask 还是predicted mask。

3.1 Generator Network

\[S=F_{c a t}^{\prime} F_{c a t}^{\prime T} \]

S是亲和矩阵(相似性矩阵)。

3.1.1 双阶注意模块

\[G\left(i, j, i^{\prime}, j^{\prime}\right)=1-\exp \left(\frac{\left(i-i^{\prime}\right)^{2}+\left(j-j^{\prime}\right)^{2}}{2 \sigma^{2}}\right) \]

  • 在对一幅图像做自相关时,相似性矩阵的对角线上的值比较大,用上述方法解决该问题。G使用高斯核减弱图像同一部份的相关性,得到新的相似性矩阵。

\[\mathrm{S}^{\prime}=\mathrm{S} \odot \mathrm{G} \]

  • 使用[6]的 patch-matching 策略,计算 S′ 的 i 行的patch和 j 列的 patch 匹配的可能性。

    \[\begin{aligned} L^{r}(i, j) &=\frac{\exp \left(\alpha S^{\prime}[i, j]\right)}{\sum_{j^{\prime}=1}^{h w} \exp \left(\alpha S^{\prime}\left[i, j^{\prime}\right]\right)} \\\\\\ L^{c}(i, j) &=\frac{\exp \left(\alpha S^{\prime}[i, j]\right)}{\sum_{i^{\prime}=1}^{h w} \exp \left(\alpha S^{\prime}\left[i^{\prime}, j\right]\right)} \\\\\\ L(i, j) &=L^{r}(i, j) L^{c}(i, j) \end{aligned} \]

  • α是一个可训练参数,初始化为3。\(L \in \mathbb{R}^{h w \times h w}\) 是最终的相似性矩阵。从 \(L\) 里取 top- \(\mathrm{k}\) 的值,再 reshape 成 \(T \in \mathbb{R}^{h \times w \times k}\) ,把 \(T\) 输入注意力模型,如示意图:

  • 为了充分利用patch间的相互依赖关系,对最终的相似性矩阵进行归一化,得到上下文关联注意图。

\[A_{2}(i, j)=\frac{L(i, j)}{\sum_{j^{\prime}=1}^{h w} L\left(i, j^{\prime}\right)} \]

3.1.2 空间金字塔池(ASPP)块

两个ASPP 模块用于提取特征中的上下文信息,可以有效用于图像分割等任务。ASPP 出处

对于给定的输入图像以不同采样率的空洞卷积并行采样,相当于以多个尺度捕获图像的上下文,称为 ASPP (atrous spatial pyramid pooling) 模块。

创新点:

  1. 一个1x1卷积和三个3x3的采样率为rates={6,12,18}的空洞卷积,滤波器数量为256,包含BN层。

  2. 图像级特征,即将特征做全局平均池化,经过卷积再融合。

# ASPP源码
class ASPP(nn.Module):
    def __init__(self, in_channel=512, depth=256):
        super(ASPP,self).__init__()
        # global average pooling : init nn.AdaptiveAvgPool2d ;also forward torch.mean(,,keep_dim=True)
        self.mean = nn.AdaptiveAvgPool2d((1, 1))
        self.conv = nn.Conv2d(in_channel, depth, 1, 1)
        self.atrous_block1 = nn.Conv2d(in_channel, depth, 1, 1)
        self.atrous_block6 = nn.Conv2d(in_channel, depth, 3, 1, padding=6, dilation=6)
        self.atrous_block12 = nn.Conv2d(in_channel, depth, 3, 1, padding=12, dilation=12)
        self.atrous_block18 = nn.Conv2d(in_channel, depth, 3, 1, padding=18, dilation=18)
        self.conv_1x1_output = nn.Conv2d(depth * 5, depth, 1, 1)
 
    def forward(self, x):
        size = x.shape[2:]
        image_features = self.mean(x) #全局自适应池化
        image_features = self.conv(image_features) #1x1卷积
        image_features = F.upsample(image_features, size=size, mode='bilinear') #上采样
        atrous_block1 = self.atrous_block1(x)
        atrous_block6 = self.atrous_block6(x)
        atrous_block12 = self.atrous_block12(x)
        atrous_block18 = self.atrous_block18(x)
 
        net = self.conv_1x1_output(torch.cat([image_features, atrous_block1, atrous_block6,
                                              atrous_block12, atrous_block18], dim=1)) # 将特征融合再经过一个1x1的卷积
        return net

3.1.3 功能融合

\[\begin{aligned} &F_{a t t n}^{1}=F_{a s p p}^{1} \odot A_{1} \end{aligned} \]

\[\begin{aligned} &F_{a t t n}^{2}=F_{a s p p}^{2} \odot A_{1} \end{aligned} \]

\(F_{\text {atten }}\)表示的是上下文注意力特征图。copy-move region aware attentive features

\[\begin{aligned} &F_{cooc}^{1}=F_{attn}^{1} \otimes A_{2} \end{aligned} \]

\[\begin{aligned} &F_{cooc}^{2}=F_{attn}^{2} \otimes A_{2} \end{aligned} \]

\(F_{\text {cooc }}\)表示的是相关性特征图。 co-occurrence features

矩阵相乘操作充分探索了patch之间的相互依赖,远距离像素能够贡献基于相似度量的位置特征响应。distant pixels are able to contribute to the feature response at a location based on similarity metrics.

\[F_{\text {final }}=\operatorname{Merge}\left(F_{\text {attn }}^{1}, F_{\text {attn }}^{2}, F_{\text {cooc }}^{1}, F_{\text {cooc }}^{2}, A_{1}\right) \]

3.1.4 检测分支和定位分支

  • 检测分支是一个全连接层网络;

  • 定位分支是一个卷积网络;

  • # x_cat为F_final
    out1 = self.head_mask(x_cat) #定位网络
    # 【out1】 shape: [8,3,40,40]
    out = F.interpolate(out1, size=(h, w), mode='bilinear',align_corners=True) #上采样
    # 【out】 shape: [8,3,256,256]
    

3.2 Discriminator Network

判别器的结构是基于PatchGAN鉴别器的。具体来说,该判别器用来预测图像中的每个N×N补丁是真实的还是假的。该判别器由全卷积网络构成的,由五个卷积块组成,每个块接着是BatchNorm和LeakyReLU,除了最后的一个卷积层。

判别器的输入是 I 和 mask M,鉴别器被训练来判别式 ground truth mask 还是predicted mask,而生成器试图欺骗判别器。

3.3 Loss Functions

模型的损失函数

\[\ \mathcal{L}=\mathcal{L}_{a d v}+\alpha \mathcal{L}_{c e}+\beta \mathcal{L}_{d e t} \]

3.3.1 对抗损失

  • \(\mathcal{L}_{\text {adv }}(G, D)=E_{(I, M)}[\log (D(I, M))+\log (1-D(I, G(I))]\)

3.3.2 交叉熵损失

  • \(\widehat{M}=G(I)\) ,即生成器的输出的预测结果mask图像,\({M}\)是ground truth图像。

  • \(\mathcal{L}_{\mathrm{ce}}=\frac{1}{H \times W \times 3} \sum_{k=1}^{3} \sum_{i=1}^{H} \sum_{j=1}^{W} M(i, j, k) \log \widehat{M}(i, j, k)\)

3.3.3 检测损失

  • 来自检测分支的图像级检测得分与ground truth之间的二值交叉熵损失。如果图像包含篡改区域就把\(y_{\mathrm{im}}\) 的值设为1,否则就设为0。

  • \(\mathcal{L}_{\mathrm{det}}=y_{\mathrm{im}} \log \left(\hat{y}_{\mathrm{im}}\right)+\left(1-y_{\mathrm{im}}\right) \log \left(1-\hat{y}_{\mathrm{im}}\right)\)

3.4 Implementation Details

我们对生成器和判别器网络使用两种不同的学习率,分别为0.001和0.0001,VGG-19特征提取器的学习率设置为0.0001。当训练损失在5个时期后趋于稳定时,我们将学习率降低了一半。对于训练,我们首先只优化3个epoch的生成器的交叉熵损失,然后开始优化所有的损失。当判别器损耗减小到0.3时,固定鉴别器,直到损失增加。这确保了生成器和鉴别器都以相似的速度学习,并且判别器不会过度训练。

Experimental Results

4.1 Experiments on the USC-ISI CMFD dataset

为了像素级评估,我们计算每个图像的精确率、召回率和F1评分指标的平均值。由于原始图像的F1评分定义明确,用于像素级评估的测试图像只包括伪造图像。对于图像级的评估,我们同时使用伪造图像和非伪造图像(总共20K图像)。如果来自检测分支的输出分数大于0.5,我们预测一个图像将是被伪造的,否则它将被预测为非伪造的。对于对比模型BustetNet,如果输出mask图像中有超过200个像素,则将认为其是经过篡改的。这里值得一提的是,200像素(大小为320×320的输入图像中总像素的<0.2%)被发现是假阴性和假阳性之间的合理权衡。

模型对比

BusterNet

ManTra-Net

U-Net

NA-GAN(没有注意力)

FOA-GAN(只用 1st-order 注意力)

SOA-GAN(只用 2nd-order 注意力)

DOA-GAN w/o \(\mathcal{L}_{a d v}\)(移除对抗损失)

DOA-GAN w/o \(\mathcal{L}_{det}\)(移除检测损失)

表1:定位结果

image-20220116220837124

表2:检测结果

image-20220116221029808

实验结果说明:

  1. DOA-GAN w/o \(\mathcal{L}_{a d v}\)(移除对抗损失)的所有指标比 Busternet 好;

  2. DOA-GAN 比 DOA-GAN w/o \(\mathcal{L}_{a d v}\)(移除对抗损失) 的F1 score高,表明DOA的判别器对于篡改检测是有作用的;

  3. DOA-GAN 比DOA-GAN w/o \(\mathcal{L}_{det}\)(移除检测损失)的F1 score高,表明检测损失是有用的;

  4. DOA-GAN 比 FOA-GAN (只用 1st-order 注意力)和 SOA-GAN (只用 2nd-order 注意力)的F1 score高,表明两注意力互补提高检测定位表现;

  5. DOA-GAN, SOA-GAN, 和 FOA-GAN 比 U-Net 、 NA-GAN(没有使用注意力) 的F1 score高,表明通过仿射矩阵得到的注意力机制的有效性。

4.2 Experiments on the CoMoFoD dataset

该数据集的图像经过了如旋转缩放形变压缩模糊噪声等后处理操作。

使用这个数据集来进一步分析提出的DOA-GAN在不同攻击影响下的鲁棒性。

image-20220116222201346

Discussion

  1. 当复制区域只是从统一的背景中提取并粘贴到相同的背景上时,它可能会失败;

  2. 当缩放程度发生了显著变化时,它也可能会失败。下图是两个例子,第一个例子的背景是一致的,而在第二个例子中,复制-移动区域的规模非常小。

Conclusion and Future Work

在本文中,我们提出了一种双阶注意生成对抗网络(DOA-GAN),用于复制移动伪造的检测和定位。在生成器中设计了双阶注意模块,以提取操作位置感知注意图和补丁之间的潜在共现关系。该判别器将进一步确定预测mask的精度。与先前的最先进的技术相比,所提出的DOA-GAN可以生成更准确的mask,并更好地区分出复制移动目标区域和源区域。我们未来的工作包括扩展目前的工作,以识别卫星图像中的图像级伪造,并解决其他具有挑战性的视觉任务,如共显著性检测(co-saliency detection and localization)和定位。

扩展:共显著性检测

不同显著性检测问题的例图。(a) 图像内显著性检测。(b) 跨图像的共显著性检测。(c) 图像内多物体的显著性检测。

经验总结

  1. 网络结构有创新;
  2. 在3个不同的数据集上分别做了多组对比实验;
    • 在数据集USC-ISI CMFD上做了删改损失函数的对比实验;
    • 在数据集上CoMoFoD上做了图像降质的验证模型鲁棒性的实验;

使用GAN来实现图像篡改检测

  • Result:Epoch: 132| F1 Score: 0.8517 | iou: 0.7736

image-20220117131750725

image-20220117131759222

遇到的问题

问题:MSE Loss是否可以用于图像篡改检测任务?

回答:可以,但需要避免输出层使用Sigmod激活函数,因为Sigmod激活函数和MSE Loss会导致梯度消失。

  • 使用BCELoss,即交叉熵损失函数进行训练。Result:Epoch: 14| F1 Score: 0.8591 | iou: 0.7689

  • 使用MSELoss,即均方误差损失函数进行训练。Result:Epoch: 12 | F1 Score: 0.8416 | iou: 0.7581

Why not Mean Squared Error(MSE) as a loss function for Logistic Regression?

一方面:

Log loss:

Mean Squared Loss:

For example:

对于错误分类的情况:

  • Actual label for a given sample in a dataset is “1”,即真实值 y 是1。
  • Prediction from the model after applying sigmoid function = 0,即预测值 \(\hat{y}\) 是0。

Loss value when using MSE: (1- 0)² = 1

Loss value when using Log: -(1 * log(0) + 0 * log(1) ) = tends to infinity !!

如上所示,使用MSE计算的损失值比使用Log损失函数计算的损失值要小得多。因此,从这一点可以看出MSE并不能强烈惩罚错误分类,即使是完全不匹配的!

对于正确分类的情况:

  • Actual label: “1”

  • Predicted: “1”

Loss value when using MSE: (1 - 1)² = 0

Loss value when using Log: -(1 * log(1) + 0 * log(0)) = 0

对于二元分类问题,MSE不是一个好的选择。

另一方面:

证明MSE和Sigmoid是一个非凸优化问题:

  • So in the above case when y = 0, it is clear from the equation that when ŷ lies in the range [0, 2/3] the function H(ŷ) ≥ 0 and when ŷ lies between

    [2/3, 1] the function H(ŷ) ≤ 0. This shows the function is not convex.

  • Now, when y = 1, it is clear from the equation that when ŷ lies in the range [0, 1/3] the function H(ŷ)0 and when ŷ lies between [1/3, 1] the function H(ŷ) ≥ 0. This also shows the function is not convex.

证明Log和Sigmoid是一个凸优化问题:

posted @ 2022-02-17 22:43  梁君牧  阅读(285)  评论(0编辑  收藏  举报