现实中的图像篡改取证问题一般都是有各种各样的篡改类型,有时候甚至是组合的篡改攻击,为了解决这个问题,本文提出了一种统一的深度神经网络架构,ManTra-Net。 不同于现有的很多方法,ManTra-Net是端到端的,即输入一张图片,输出一张同样尺寸的灰度图,其中原图中被篡改的位置概率值大。并且网络对输入图像尺寸无要求,支持拼接,copy-move,removal,enhancement等篡改类型。这篇论文一共不声不响的干了三件事:
从上面的网络中可以看出,整个网络结构分为两个子网络,第一个子网络负责篡改痕迹特征提取,并且提供一种统一的特征表达,第二个子网络,即局部异常检测网络(local anomaly detection network (LADN)) 直接定位被篡改的区域。在这个网络中,论文一共做了三点贡献:
IMC——image manipulation classification (IMC).
IFID—— image forgery localization/detection (IFLD).
使用Dresden数据集作为原始数据,按照8:1:1去划分训练集,验证集,测试集。并且将每张图像crop成256256 的大小,去重之后,得到了1.25M(millions)的图像patch。对这些patch的处理如下:(1)随机的选取一个patch P和一种篡改方式y(385种之一),对P应用y,再从P中随机crop出128128的region作为X,则(X,y)作为一个输入和输出样本对对于篡改分类的任务。
此处用了四个数据集,分别是拼接数据集1,copy-move数据集2,消除数据集,用Dresden数据集和OpenCV制作的,以及增强数据集,其中增强数据集的制作有些麻烦,具体步骤如下:(1)引用了一个mask M参考31合成增强后的图片Z = P*(1-M)+y§*M,P和y为之前的patch和随机的一个篡改方式(3)将(Z,M)作为LADN任务的一个输入和输出对。
batchsize = 64, 一个epoch有1000个patches。使用Adam优化方法,学习率1e-4,如果验证集loss有20个周期还不降的话,学习率减半。使用交叉熵损失函数。
因为这块之前也没有统一的框架,所以,使用了三种分类网络的对比,三种网络的引用和结果如下图。为了加快训练过程,先进行了一个IMC-7种篡改分类的任务( 分别是compression, blurring, morphology, contrast manipulation, additive noise, resampling, and quantization)。并且在Kaggle Camera Identification Datasets上面进行测试。
最后发现VGG的最好,所以选择了VGG,并且在不同的卷积核使用上也做了一系列的实验,最后选择了最好的组合卷积特征。
将七种的篡改定为level0,再将这几种篡改类型进行细分,比如将blurring细分为Gaussian blur,中值blur等等几种。一共进行6个level,对应的种类分别为7,25,49,96,185,385,如下表:
从表中看出,47.3%的准确率在385类的分类上,这个准确率有点略地,所以作者提出在这个baseline上面改进:(1)使得网络更宽(2)加深网络。最后获得的最好的准确率是51.8%。。。这个真的尽力了,感觉比较难。
以上主要是获得一个可以很好的表达图像被篡改了的特征的网络。
包含三个步骤:(1)调整网络。对上一步得到的IMC分类网络进行调整,使其适用于异常检测网络。(2)基于人类思维的异常特征提取。(3)决策,基于以上信息判断一个像素是否是篡改的。其中(2)是比较关键的。
作者提出了一个疑问,看下面的图像:
看到篡改图像第一眼人是怎么分辨的呢?一种可能的过程是这样的:
在DNN-based manipulation,以及photoshop-battle dataset上进行了测试。计算图像级别的AUC,每张图像被篡改的概率就简单的认为是所有像素篡改概率的一个平均,并且选择是在前面的IMC网络上finetune还是随机初始化,得到结果如下表:
对图像进行了各种可能的攻击:
可以看出,对于不同标准差的噪声攻击基本免疫,但对篡改区域边缘进行高斯模糊核过大就不行了。JPEG压缩还是比较难克服的。缩放的话基本GG(95%的缩放都只能到0.65的F1了)。
可以看出,本文的方法虽然没用这几个数据集做过训练(其他几个方法都或多或少用过),但是效果都还可以,本方法的泛化性能还是比较优秀的。
详细测试版github地址: https://github.com/zhangqizky/ManTra_Net_Test_Demo
欢迎star~~
#总结
CVPR2019的论文,看得出来做了很多工作,但是篡改检测这个问题太难了,毕竟弱特征。还需要继续努力!在本文的基础上可以想到的改进就是继续扩展385类的分类,是第一阶段IMC分类网络能学习到更丰富的篡改特征。另一个方面就是改进后面的异常区域定位网络。这个除了可以尝试将网络加深加宽等,暂时没有什么特别好的idea。