DOA-GAN论文解读
DOA-GAN论文解读
Insight
-
提出了基于双阶注意力的 GAN 用于检测和定位图像中的 copy-move 操作。
-
1st-order注意力模型提取篡改区域注意力图,2nd-order注意力模型提取图像中的像素依赖。两个注意力图提供更具判别性的特征用于 copy-move 的检测和定位。
Method
网络的框架图如下所示:
- 生成器是一个端到端的的网络结构,用于检测图像是否被篡改以及定位篡改区域。
- 判别器用于判别预测结果的mask图像与ground-truth图像是否相同。
生成器是一个端到端的统一的结构,完成检测和定位任务。
-
给定一幅输入图像 ,使用与训练好的Vgg19模型的前四层模块提取图像的特征,将特征图resize成统一大小,再concatenate为一个张量图
-
计算仿射矩阵,经过双顺序注意力模型得到注意力图 ;
-
参数不同的ASPP-1 和 ASPP-2 提取上下文特征 ;
-
分别与 像素乘得到 ;
-
分别与 做矩阵乘法得到 ;
-
把四个特征图concatenate:
- 输入检测分支,得出检测分数,即图像篡改的可能性大小;
- 输入定位分支,得到 mask。
判别器的输入是 I 和 mask M,鉴别器被训练来判别式 ground truth mask 还是predicted mask。
3.1 Generator Network
S是亲和矩阵(相似性矩阵)。
3.1.1 双阶注意模块
- 在对一幅图像做自相关时,相似性矩阵的对角线上的值比较大,用上述方法解决该问题。G使用高斯核减弱图像同一部份的相关性,得到新的相似性矩阵。
-
使用[6]的 patch-matching 策略,计算 S′ 的 i 行的patch和 j 列的 patch 匹配的可能性。
-
α是一个可训练参数,初始化为3。 是最终的相似性矩阵。从 里取 top- 的值,再 reshape 成 ,把 输入注意力模型,如示意图:
- 为了充分利用patch间的相互依赖关系,对最终的相似性矩阵进行归一化,得到上下文关联注意图。
3.1.2 空间金字塔池(ASPP)块
两个ASPP 模块用于提取特征中的上下文信息,可以有效用于图像分割等任务。ASPP 出处
对于给定的输入图像以不同采样率的空洞卷积并行采样,相当于以多个尺度捕获图像的上下文,称为 ASPP (atrous spatial pyramid pooling) 模块。
创新点:
-
一个1x1卷积和三个3x3的采样率为rates={6,12,18}的空洞卷积,滤波器数量为256,包含BN层。
-
图像级特征,即将特征做全局平均池化,经过卷积再融合。
copy# 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 功能融合
表示的是上下文注意力特征图。copy-move region aware attentive features
表示的是相关性特征图。 co-occurrence features
矩阵相乘操作充分探索了patch之间的相互依赖,远距离像素能够贡献基于相似度量的位置特征响应。distant pixels are able to contribute to the feature response at a location based on similarity metrics.
3.1.4 检测分支和定位分支
-
检测分支是一个全连接层网络;
-
定位分支是一个卷积网络;
-
copy
# 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
模型的损失函数
3.3.1 对抗损失
3.3.2 交叉熵损失
-
,即生成器的输出的预测结果mask图像,是ground truth图像。
-
3.3.3 检测损失
-
来自检测分支的图像级检测得分与ground truth之间的二值交叉熵损失。如果图像包含篡改区域就把 的值设为1,否则就设为0。
-
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 (移除对抗损失)
DOA-GAN w/o (移除检测损失)
表1:定位结果
表2:检测结果
实验结果说明:
-
DOA-GAN w/o (移除对抗损失)的所有指标比 Busternet 好;
-
DOA-GAN 比 DOA-GAN w/o (移除对抗损失) 的F1 score高,表明DOA的判别器对于篡改检测是有作用的;
-
DOA-GAN 比DOA-GAN w/o (移除检测损失)的F1 score高,表明检测损失是有用的;
-
DOA-GAN 比 FOA-GAN (只用 1st-order 注意力)和 SOA-GAN (只用 2nd-order 注意力)的F1 score高,表明两注意力互补提高检测定位表现;
-
DOA-GAN, SOA-GAN, 和 FOA-GAN 比 U-Net 、 NA-GAN(没有使用注意力) 的F1 score高,表明通过仿射矩阵得到的注意力机制的有效性。
4.2 Experiments on the CoMoFoD dataset
该数据集的图像经过了如旋转缩放形变压缩模糊噪声等后处理操作。
使用这个数据集来进一步分析提出的DOA-GAN在不同攻击影响下的鲁棒性。
Discussion
-
当复制区域只是从统一的背景中提取并粘贴到相同的背景上时,它可能会失败;
-
当缩放程度发生了显著变化时,它也可能会失败。下图是两个例子,第一个例子的背景是一致的,而在第二个例子中,复制-移动区域的规模非常小。
Conclusion and Future Work
在本文中,我们提出了一种双阶注意生成对抗网络(DOA-GAN),用于复制移动伪造的检测和定位。在生成器中设计了双阶注意模块,以提取操作位置感知注意图和补丁之间的潜在共现关系。该判别器将进一步确定预测mask的精度。与先前的最先进的技术相比,所提出的DOA-GAN可以生成更准确的mask,并更好地区分出复制移动目标区域和源区域。我们未来的工作包括扩展目前的工作,以识别卫星图像中的图像级伪造,并解决其他具有挑战性的视觉任务,如共显著性检测(co-saliency detection and localization)和定位。
扩展:共显著性检测
不同显著性检测问题的例图。(a) 图像内显著性检测。(b) 跨图像的共显著性检测。(c) 图像内多物体的显著性检测。
经验总结
- 网络结构有创新;
- 在3个不同的数据集上分别做了多组对比实验;
- 在数据集USC-ISI CMFD上做了删改损失函数的对比实验;
- 在数据集上CoMoFoD上做了图像降质的验证模型鲁棒性的实验;
使用GAN来实现图像篡改检测
- Result:Epoch: 132| F1 Score: 0.8517 | iou: 0.7736
遇到的问题
问题: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,即预测值 是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是一个凸优化问题:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步