基于数字水印与卷积神经网络的图像攻击识别系统
相关机构公布某些重要信息之后,难免会有一些不法分子别有用心,通过技术手段恶意篡改、攻击一些特殊意义的信息。如果相关人员没有识别出伪造的信息,选择信任了这些虚假的信息,就会造成难以估量的损失。
密码学手段是一种保护信息的方法,但密码学更适合端对端通讯,不适合作为一种面向大众的公开信息真实性的验证方式。而数字水印作为信息发布者认证信息的一种方式,提取数字水印更加适合让公众去检验信息来源的可靠性。
假设信息发布机构将水印嵌入在面向公众的信息中,公开的信息在人们拿到之后,如果需要对信息的真实性验证,就可以使用本产品的水印提取验证功能,了解信息是否真实是原机构发布的。根据提取水印的形变情况,消息的可靠性就可以辨识。获取到真实有效的信息,才能切实为生活带来便利,提高信息传播的水平。
本项目结合数字水印技术与卷积神经网络技术,通过向图片中嵌入水印以及从图片中提取水印并加以识别判断的方法,构造一套效率较高的图像攻击识别系统。该系统可大致分为发送端与接收端两部分。发送端可对官方机构等组织提供水印嵌入功能的支持,而接收端可供普通用户使用,内置功能函数自动提取官方机构发布图片中的水印信息并进行识别。对于攻击者来说,其可以通过添加滤镜、图片涂抹、图片剪切与图片缩放等手段实现图片信息的篡改与破坏,而本产品通过提取图片中的数字水印技术并结合机器学习实现对该类修改的检测,确保图片信息的可信度。
本方案开创性地将图像攻击检测与数字水印、神经网络图像识别结合,通过神经网络检测载体图像经过不同变化之后水印的形变情况来判断原图受到哪种类型的改变,可以对像素点集的篡改做出反应,对于原图的敏感性非常强,精度可以达到相当高的水平;同时本作品采用了迁移学习的方案,大大提升了模型训练效率,同时减少了投入的算力成本。
结合大量水印数据集的支持,我们的模型可以直接在没有原图的情况下检测水印,精确检测出原图所受过的攻击类型,在实际场景之下更具有使用价值。
本作品通过自己制作的大量水印数据集结合深层卷积神经网络,在经过训练之后,将图像攻击种类的分类精度提高到 94%以上。
本作品的检测基于数字盲水印而不依赖于图像本身,对图像数据进行的任何改动都会影响到水印,以此达到对肉眼不可视攻击的检测。机器学习的数据集本身也是攻击者攻击的目标,现在的攻击者往往通过肉眼不可视的攻击方法攻击图像数据集,虽然本水印也会对图像造成一定影响,但水印的影响是可以预知并用相应手段消除的,如果可以通过相关验证,那么本作品在未来也可能成为图像数据集保护的新思路。
本项目流程共分为两个模块:中央机构使用的嵌入模块和用户端使用的提取识别模块。下面分别进行简要介绍。
读取载体图像后提取其中需要操作的数据层,对该数据层进行快速傅立叶变换,取结果后进行水印图像插入,再通过快速傅立叶逆变换实现还原后的图像。
-
水印预处理
攻击者可以伪造中心机构进行水印添加,从而发布不具有官方效应的假信息。为了预防这种情况,本项目在水印添加之前对其进行预处理。Arnold 变换具有良好的周期性、编码与解码的特点,在图像传输中可以随机控制变换的次数。利用 Arnold 变换的特性,在图像的置乱处理中已取得有良好的效果,而且在数字水印方面也得到了很好的应用,故选择它作为预处理的方法。
Arnold变换需要用到的三个参数置乱次数、a、b 参数作为信息发布者的专属消息封入黑盒,必须三个参数全部正确才能认证为消息来源是公开信息发布者。对于需要伪造信息的人来说,同时攻破 3 个参数是很难的。这三个参数内置于用户端,从而保证置乱水印的正确还原。
-
水印嵌入
-
Step1: 读取想要在载体图像中嵌入水印的 RGB 通道中的一层,本作品读取 G 通道数据进行操作
-
Step2: 对该层数据进行二维快速傅里叶变换
-
Step3: 读取二值水印,在二值水印对应的矩阵上记录黑色像素块或白色像素块的位置信息
-
Step4: 选取图像频域图中高频区域的一块位置,将该位置与二值水印对应的矩阵创立映射,将作为代表黑色或白色的像素点的数字信息嵌入到对应的高频区域中,具体嵌入算法为乘性相加。本作品将黑色像素点对应的位置识别为 1,即在该位置数据的实部上进行乘性相加,如果取 N=10000,则加入的数据为a*N+b(即 10001)
-
Step5: 以中心点为对称点,在与这块区域相对称的位置以同样的方式嵌入信息使傅里叶变换后的矩阵数值依然为中心对称
-
Step6: 对加入水印信息的频域矩阵做二维快速傅里叶逆变换,就生成了嵌入水印信息之后的图像
-
用户端输入需要识别的图像,该系统读取图像后进行快速傅立叶变换,按照特定算法进行水印提取过程,再通过已经预训练好的模型进行验证分类,输出用户图像相应的信息,判断是否被攻击过,如有则判断受过何种类型的攻击。
-
水印提取
- Step1: 选取需要提取图像对应的 RGB 通道并进行数据分离
- Step2: 对嵌入水印的图像做二维快速傅里叶变换
- Step3: 找到嵌入的高频位置块
- Step4: 根据嵌入时选择的黑色像素点与白色像素点对应的嵌入信息做数值相关性检测,按照一定的阈值进行数据提取,将提取的二值数据绘制进入新的图像中,从而实现嵌入水印的恢复过程
-
CNN识别模型构建
该模块为使用python语言实现的水印嵌入和提取模块,具体包括以下内容:
该部分实现图片预处理,数据的傅里叶变换及傅里叶逆变换,矩阵数据插入,水印插入与水印提取功能。
该部分实现对水印图片的处理,包括Arnold置换及其逆过程,矩阵数据置乱与矩阵数据还原的函数实现。
该部分实现对图片完整性的判断以及将png转换成jpg这两个功能函数。
该部分模拟水印的处理、水印插入与水印提取过程,并实现与用户的简单交互,为生成训练集做准备。
该模块为使用matlab语言实现的水印嵌入和提取模块,具体包括以下内容:
该部分实现Arnold置换的具体细节。
该部分完成水印提取与保存过程的函数实现。
该部分实现Arnold置换逆过程的具体细节。
该部分完成水印嵌入过程的函数实现。
该模块内置于用户端中,调用训练成功的模型,实现对官方发布图片信息完整性与真实性的鉴别,具有基础用户交互系统。
该模块为本项目使用的神经网络相关算法,用于中心机构训练可发行模型。
本项目未提供内置模型与相关训练集,需要使用者根据需要构造自己的训练集并进行模型训练。
本项目用到的具体的算法和技术如下:
- 数字水印技术
- 快速傅里叶变换
- Arnold置乱
- 卷积神经网络
- 水印隐蔽性评估
以上技术实现细节在项目内附报告中均有说明。
Image-attack-detection-system-based-on-watermark-and-convolutional-neural-networks



