《Multiple-Operation Image Anti-Forensics with WGAN-GP Framework 》代码复现
这是什么
因为一个比赛,我们去看文献,然后恰好读到这篇论文,名字叫《Multiple-Operation Image Anti-Forensics with WGAN-GP Framework 》,简单来说就是对于一张篡改图片,我们使用多种后处理方法隐藏篡改痕迹,然后再使用WGAN网络隐藏痕迹,让篡改真正做到无迹可寻(实际的欺骗率大概在50%左右)。
网络结构
这就是论文中给出的图片结构,还是比较清晰的。
损失函数
损失函数分为两个:生成器和判别器。
首先是生成器的损失函数
L
G
=
E
x
‘
[
α
L
G
p
i
x
e
l
+
β
L
G
v
g
g
+
γ
L
G
a
d
v
]
L_G = E_{x^`}[αL_{G}^{pixel}+βL_{G}^{vgg}+γL_{G}^{adv}]
LG=Ex‘[αLGpixel+βLGvgg+γLGadv]
其中有
L
G
p
i
x
e
l
=
1
N
∑
i
=
1
N
∣
x
i
−
G
(
x
i
‘
)
∣
L_{G}^{pixel}= \frac{1} {N} \sum_{i=1}^N \mid x_i-G(x_{i}^`) \mid
LGpixel=N1i=1∑N∣xi−G(xi‘)∣
L
G
v
g
g
=
1
N
∑
i
=
1
N
∥
θ
(
x
)
i
−
θ
(
G
(
X
‘
)
i
)
∥
2
2
L_{G}^{vgg}=\frac{1}{N} \sum{i=1}^N \parallel \theta(x)_i-\theta(G(X^`)_i) \parallel_{2}^{2}
LGvgg=N1∑i=1N∥θ(x)i−θ(G(X‘)i)∥22
其中
θ
(
x
)
\theta(x)
θ(x)表示用ImageNet训练的VGG-19网络的第12层卷积层输出的特征图
L
G
a
d
v
=
−
C
(
G
(
X
‘
)
)
L_{G}^{adv}=-C(G(X^`))
LGadv=−C(G(X‘))
接着是判别器的损失函数,其损失函数表达式如下
L
C
=
E
x
[
C
(
x
)
]
−
E
x
‘
[
C
(
G
(
x
‘
)
)
]
+
λ
E
x
^
[
(
∥
▽
x
^
C
(
x
^
)
∥
2
)
−
1
)
2
]
L_C=E_x[C(x)]-E_{x^`}[C(G(x^`))]+\lambda E_{\widehat{x}}[({\parallel \triangledown_{\widehat{x}}C(\widehat{x}) \parallel}_2)-1)^2]
LC=Ex[C(x)]−Ex‘[C(G(x‘))]+λEx
[(∥▽x
C(x
)∥2)−1)2]
其中
x
^
=
ϵ
x
+
(
1
−
ϵ
)
G
(
x
‘
)
\widehat{x}=\epsilon x+(1-\epsilon)G(x^`)
x
=ϵx+(1−ϵ)G(x‘)并且
λ
=
10
\lambda=10
λ=10
我们复现的时候将VGG19变成了VGG16,输入是128*128的图片,经过VGG16网络后得到512*4*4的特征图。
代码
代码都上传码云了,数据集用的是篡改数据集,一共900多张图片,设置batchsize为16,用GTX1080大概跑了4个小时。
训练结果如下
生成器的效果如下
码云仓库传送门