1.摘要
随着互联网、社交媒体和简易图像操作工具的普及,图像篡改带来的问题日益严重。为了解决这一问题,研究者们利用深度卷积神经网络来检测图像篡改并定位篡改区域。为此我们训练了一个ManTra-Net模型,该模型以TensorFlow为后端,使用Adam优化器和分类交叉熵损失函数进行训练。此外,我们还实现了一个Web界面,该界面使用Flask框架开发的Python后端API端点服务器,使用户能够上传图像并接收突出显示篡改区域的输出图像。这一Web界面简化了与模型的交互过程,提高了用户的使用体验。
2.ManTra-Net模型实现
ManTra-Net方法由两个子网络组成,即创建统一特征表示的图像处理-跟踪特征提取器和直接定位伪造区域的局部异常检测网络(LADN),从局部特征与其引用到伪造标签之间的差异中学习决策函数映射。从技术上来说,ManTraNet 由两个子网络组成,如下所示:
1. 图像处理轨迹特征提取器:用于图像处理分类任务的特征提取网络,对不同的处理类型敏感,并将补丁中的图像处理编码为固定维度的特征向量。
2. 局部异常检测网络:异常检测网络将局部特征与局部区域平均的主导特征进行比较,其激活取决于局部特征偏离参考特征的程度,而不是局部特征的绝对值。
ManTraNet
是一种端到端图像伪造检测和定位解决方案,通过识别局部异常特征来检测伪造像素,因此不限于特定的伪造或篡改类型,具有简单、快速和高鲁棒性,但是其局限性在于不能准确检测多篡改对象图像。
本文针对ManTraNet模型进行简单修改,其结构如下:
keras实现代码:
def create_manTraNet_model( Featex, pool_size_list=[7,15,31], is_dynamic_shape=True, apply_normalization=True ) :
img_in = Input(shape=(None,None,3), name='img_in' )
rf = Featex( img_in )
rf = Conv2D( 64, (1,1),
activation=None, # no need to use tanh if sf is L2normalized
use_bias=False,
kernel_constraint = unit_norm( axis=-2 ),
name='outlierTrans',
padding = 'same' )(rf)
bf = BatchNormalization( axis=-1, name='bnorm', center=False, scale=False )(rf)
devf5d = NestedWindowAverageFeatExtrator(window_size_list=pool_size_list,
output_mode='5d',
minus_original=True,
name='nestedAvgFeatex' )( bf )
if ( apply_normalization ) :
sigma = GlobalStd2D( name='glbStd' )( bf )
sigma5d = Lambda( lambda t : K.expand_dims( t, axis=1 ), name='expTime')( sigma )
devf5d = Lambda( lambda vs : K.abs(vs[0]/vs[1]), name='divStd' )([devf5d, sigma5d])
# convert back to 4d
devf = ConvLSTM2D( 8, (7,7),
activation='tanh',
recurrent_activation='hard_sigmoid',
padding='same',
name='cLSTM',
return_sequences=False )(devf5d)
pred_out = Conv2D(1, (7,7), padding='same', activation='sigmoid', name='pred')( devf )
return Model( inputs=img_in, outputs=pred_out, name='sigNet' )
为了提高模型的泛化能力,将图像篡改和定位检测定义为局部异常检测任务,而不是先前方法中的语义分割任务。为此,使用伪造特征与伪造标签之间的不相似性来学习一个决策函数。局部异常检测网络分为三个阶段:“适应”阶段处理从操纵痕迹检测中提取的特征,以便用于异常检测;“异常特征提取”阶段提取异常特征;最后是“决策”阶段,分类像素是否被篡改。其中最重要的阶段是异常特征提取阶段,在该阶段,模型首先识别出最显著的特征,然后将任何与显著特征足够不同的特征视为异常特征。这一直觉通过两种新颖的神经网络架构来实现:ZPool2D层,它标准化了上述不相似性(如Z分数),以及Conv2DLSTM层,用于处理从不同分辨率堆叠在一起的ZPool2D层输出。
3.实验测试
使用了NIST 2016、CASIA、COVERAGE和Columbia等部分数据集进行了测试,其实验结达到了80%作用(AUC得分)。如下:
篡改类型 | 拼接、复制-移动、增强 | 拼接 | 复制-移动 | 拼接、复制-移动、删除 |
模型ManTra-Net | 79.5% | 82.4% | 81.9% | 81.7% |
4.应用实现
设计了一个Web界面,该界面依托Flask框架构建的Python后端API端点服务器。用户则可以通过一个基于HTML、CSS和JavaScript开发的前端Web界面,上传想要检查是否存在篡改的图像。
实现界面如下:
实验环境:
Keras==2.2.4
tensorflow==1.14.0
numpy==1.19.5
matplotlib==3.3.4
opencv-python==4.1.0.25
Flask==1.0.2
typing==3.6.6
代码下载链接:
https://download.csdn.net/download/weixin_40651515/89876700
包含完整论文。