基于图像重建的对抗样本无目标攻击方法
论文:中科院的Dlight团队
生成模块
生成模块这一部分和17年比赛中的ATN(Adversarial Transformation Network)一样,是Encoder-Decoder结构,输出图像和输入尺寸相同。
作者给的代码中,用了Inception_Resnet_V2的前一部分作为Encoder,由卷积和池化层组成,输出为maxpool_5a层的输出。输入3 *299 *299时,输出尺寸为192 *35 *35。
Decoder的代码如下:
class Decoder(nn.Module):
def __init__(self):
super(Decoder, self).__init__()
self.upconv1=torch.nn.ConvTranspose2d(192, 512, kernel_size=4, stride=2 ,output_padding=1, bias=False)
self.upconv5=torch.nn.ConvTranspose2d(512, 512, kernel_size=3, stride=1 ,padding=1, bias=False)
self.upconv2=torch.nn.ConvTranspose2d(512, 256, kernel_size=3, stride=2 ,output_padding=1, bias=False)
self.upconv6=torch.nn.ConvTranspose2d(256, 256, kernel_size=3, stride=1 ,padding=1, bias=False)
self.upconv3=torch.nn.ConvTranspose2d(256, 128, kernel_size=4, stride=2 ,output_padding=1, bias=False)
self.upconv4=torch.nn.ConvTranspose2d(128, 3, kernel_size=3, stride=1 ,padding=1, bias=False)
self.relu = nn.ReLU(inplace=False)
self.tanh=torch.nn.Tanh()
def forward(self, input):
x = self.relu(self.upconv1(input))
x = self.relu(self.upconv5(x))
x = self.relu(self.upconv2(x))
x = self.relu(self.upconv6(x))
x = self.relu(self.upconv3(x))
x = self.tanh(self.upconv4(x))
return x
一波反卷积实现上采样,输出三通道的299*299图像。
鲁棒增强模块(Robust-Enhance)
为了增强对对抗训练和图像预处理的防御方法的鲁棒性,作者在生成模块之后加入了鲁棒增强模块。
在该模块中应用了三种图像处理方法:
1、加入随机噪声
2、预训练Filter:将图像输入一个预训练的网络模型,参数固定
3、训练Filter:将图像输入一个预训练的网络模型,且模型在训练过程中参与训练
loss函数
- Feature-based
计算干净图片和对抗样本在目标网络中的feature的L1距离 - Prediction-based
上面的loss函数意义为:
当生成的图片最大预测值fir对应的是正确标签时,要使生成图片在目标网络中的fir概率值减小,sec概率值增大。
当生成的图片最大预测值fir对应的不是正确标签时,要使生成图片在目标网络中的fir概率值增大,sec概率值减小。
这样能使生成的图像被目标模型误分类。
攻击集成模型
用每个目标网络计算的loss的和,作为集成loss指导网络训练。每个loss前有一个集成权重,用来维持不同模型梯度大小的平衡。
为了避免生成模型倾向于某一个目标模型,作者添加了一个阈值来控制loss的最大值。