发明内容
为解决现有技术中存在的不足,本发明的目的在于,提供一种基于深度学习的鲁棒图像水印方法及系统,能够减缓传统基于分块嵌入的水印方法的块效应,利用神经网络端到端训练的优势实现嵌入过程最优化,利用噪声层的灵活性让模型对新型攻击具有更强的适应能力。
本发明采用如下的技术方案:
步骤1:采集图像数据,并将其分为训练集和测试集;
步骤2:对步骤1中训练集的图像进行重采样与封装,得到载体图像向量;
步骤3:随机生成0-1比特串向量作为待嵌入的水印向量并将其与步骤2得到的载体图像向量一起输入到水印嵌入网络中,实现水印的嵌入输出水印图像,并计算水印图像失真损失ImgLoss;
步骤4:将步骤3得到的水印图像经过噪声层模拟的水印攻击后转化为有损水印图像;
步骤5:将步骤4中的有损水印图像输入水印提取网络中,提取出水印信息;计算步骤3中待嵌入的水印向量和本步骤提取的水印信息之间的差异,记为水印信息提取损失MsgLoss;
步骤6:将步骤2的载体图像向量与步骤3得到的水印图像输入判别器,计算得到它们之间的差别DLoss;
步骤7:从测试集中随机抽选若干图像作为载体图像,使用步骤2至步骤5的水印嵌入与水印信息提取方法,生成测试集的待嵌入水印向量、载体图像向量、水印图像以及提取的水印信息后,计算测试集水印的鲁棒性以及测试集水印图像的不可感知性;
步骤8:利用ImgLoss,MsgLoss以及DLoss计算整体损失并调整水印嵌入网络、水印提取网络以及判别器的参数;重复步骤3至步骤8,直到步骤7中测试集水印的鲁棒性小于其相对应阈值以及水印图像的不可感知性大于其相应的阈值,完成训练;
步骤9:使用训练好的水印嵌入网络完成向载体图像中嵌入水印向量;使用训练好的水印提取网络完成对待提取水印图像水印信息的提取。
在步骤1中,训练集中数据的个数与测试集数据个数比值至少为7:3。
在步骤2中,从训练集中随机抽选batch_size张图像作为载体图像,将载体图像的尺寸重采样到vector_size*vector_size,将图像像素值从[0,255]等比例压缩到[0,1],再封装成维度为batch_size*vector_size*vector_size*3的载体图像向量。
步骤3包括以下内容:
步骤301:将待嵌入的水印向量通过一层全连接层变为长度为one_dim的一维向量,接着将该一维向量经过矩阵变换操作调整为reshape*reshape*3的向量,对该reshape*reshape*3向量经过上采样操作后维度变为vector_size*vector_size*3的水印向量;
步骤302:将输入的载体图像向量和步骤301中vector_size*vector_size*3的水印向量按最后一维拼接成维度为vector_size*vector_size*6的向量;
步骤303:将步骤302中vector_size*vector_size*6的向量经过水印嵌入网络处理后输出vector_size*vector_size*3的向量,代表残差图像;
步骤304:将步骤303得到的残差图像和载体图像向量相加后对各个通道的元素值截断于区间[0,1],截断后的vector_size*vector_size*3向量即为水印图像;通道元素值截断的方法是将所有在区间(-∞,0]的元素值算为0,所有在区间[1,∞)算为1;
步骤305:使用L2损失和LPIPS模型度量载体图像向量和步骤304生成的水印图像之间的相似性差异,ImgLoss即为L2损失和LPIPS值的和;
L2损失的计算公式如下:
其中,L2loss为L2损失,I是载体图像,I(i,j)是I在第(i,j)位置上的像素值,IW是水印图像,IW(i,j)是IW在第(i,j)位置上的像素值,W和H分别是图像的宽和高;
LPIPS是一种神经网络模型,用于计算两张图像的相似度。
水印嵌入网络是一种基于U-Net的自编码器,α为该基于U-Net自编码器隐藏层的权重;所述水印提取网络是一种卷积神经网络,该网络由7个连续的卷积层和紧接着的2个全连接层构成,这7个连续的卷积层和紧接着的2个全连接层构成本网络的隐藏层,β为隐藏层的权重;所述判别器为一个卷积神经网络,该网络由5个卷积层构成,γ为卷积层的权重。
在步骤4中,噪声层的表达公式如下:
其中,A(m,n)代表一副M×N的单通道图片,M表示单通道图片的长,N表示单通道图片的宽;C(m,n)是卷积后的图像,即模糊化后的图像;B(ii,jj)表示S×T的卷积核,S表示卷积核的宽,T表示卷积核的高,其中的参数由如下公式产生:
其中,σ是标准差;
步骤6包括以下内容:
步骤601:将载体图像向量和水印嵌入网络生成的对应的水印图像输入到判别器中,输出概率值P1和P2;
P1是指判别器将输入的载体图像向量归为载体图像的概率,P2是指判别器将输入的水印图像归为水印图像的概率;
步骤602:判别器以P1和P2的差值作为损失,采用梯度下降算法更新判别器中卷积核的参数,直到P1和P2之差的绝对值小于或等于0.005时,停止更新;
步骤603:将步骤601中的P1和P2之差记为载体图像向量与水印图像得差别DLoss。
步骤7中,水印的鲁棒性由水印的误码率决定,其误码率越低,鲁棒性越高,具体计算方法为:
其中,BER(SY(k),SY′(k))为嵌入的水印向量以及提取水印信息的误码率,SY(k)和SY′(k)分别是嵌入的水印向量和提取的水印信息,L是水印长度;
水印图像的不可感知性由载体图像向量和水印图像的峰值信噪比和结构相似性指标决定,峰值信噪比值越高,结构相似性指标的取值区间为[-1,1],其越接近1,说明水印图像的不可感知性越好。
步骤8中,整体损失为:
loss=α*ImgLoss+β*MsgLoss+γ*DLoss
其中,α,β,γ分别为水印嵌入网络隐藏层的权重、水印提取网络隐藏层的权重以及判别器卷积层的权重。
在步骤8中,测试集水印图像的鲁棒性由水印的误码率决定,其阈值为2%,测试集水印图像的误码率需小于2%;测试集水印图像的不可感知性由峰值信噪比以及结构相似性指标确定,峰值信噪比阈值为35dB,测试集水印图像的峰值信噪需大于35dB;结构相似性指标阈值为0.95,测试集水印图像的结构相似性指标需不低于0.95。
本发明还公开了一种利用权利要求1-11任意一项基于深度学习的鲁棒图像水印嵌入与提取方法的鲁棒图像水印系统,包括水印向量随机生成模块、预处理模块、水印嵌入模块、判别器、有损水印图像生成模块、水印信息提取模块、系统损失计算模块,其特征在于:
水印向量随机生成模块随机生成0-1比特串向量作为待嵌入的水印向量,并将水印向量以及载体图像输入至预处理模块,同时将水印向量输入至水印信息提取模块;
预处理模块将载体图像封装成batch_size*vector_size*vector_size*3的载体图像向量;将待嵌入的水印向量封装成reshape*reshape*3的向量,再将该向量经过上采样操作后维度变为vector_size*vector_size*3的水印向量;将vector_size*vector_size*3的水印向量与batch_size*vector_size*vector_size*3的载体图像向量拼接成维度为vector_size*vector_size*6的向量后输入至水印嵌入网络;
水印嵌入模块包含一个水印嵌入网络,其为一种基于U-Net的自编码器;在接收vector_size*vector_size*6的向量后,水印嵌入网络输出一个vector_size*vector_size*3的残差图像,并将残差图像和载体图像向量相加后对各个通道的元素值截断于区间[0,1],得到水印图像,将水印图像分别输入至判别器以及有损水印图像生成模块;水印图像生成模块还计算水印图像与载体图像之间的相似性差异ImgLoss,并将ImgLoss输入至系统损失计算模块;
判别器为一个卷积神经网络;根据水印图像以及残差图像计算DLoss,采用梯度下降算法更新判别器中卷积核的参数,直到DLoss小于或等于0.005时,停止更新,并将DLoss输入至系统损失计算模块;
有损水印图像生成模块利用噪声层模拟的水印攻击将水印图像转化为有损水印图像,并将其输入至水印信息提取模块;
水印信息提取模块包含一个水印提取网络,即一个卷积神经网络,其对输入的有损水印图像进行水印信息的提取,并使用交叉熵损失函数计算水印信息以及水印向量的差异,记作MsgLoss,并将MsgLoss输入至系统损失计算模块;
系统损失计算模块根据输入的ImgLoss、DLoss以及MsgLoss计算系统损失,调整各个模块所用神经网络的权重系数,直到水印信息提取模块提取的水印信息的鲁棒性以及不可感知性达到相对应的阈值。
本发明的有益效果在于,与现有技术相比,本发明的有益效果如下:
1)对目标攻击类型更鲁棒。本发明采用了噪声层模拟目标水印攻击类型,模型基于此进行训练的,因此模型对于该攻击的鲁棒性更好。
2)鲁棒性的泛化能力更强。针对新型水印攻击类型,本发明可以用噪声层去模拟该攻击来训练模型,使模型对新型攻击也具备鲁棒性,表现出极强的灵活性和适应性,而传统的鲁棒水印方法需要知道攻击类型才能去设计算法,无法满足此场景,因此本发明的模型的鲁棒性的泛化能力更强。
3)消除块效应。因为本发明是将整个图像作为嵌入域实现水印嵌入的,而不是基于分块嵌入的,因此不存在块效应,相较于基于块嵌入的传统水印方法而言可以提高水印的不可感知性。
具体实施方式
下面结合附图对本申请作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本申请的保护范围。
本发明采用的技术方案如下:
一种基于深度学习的鲁棒图像水印方法,训练流程图如图2所示,具体包括以下步骤:
步骤1:采集图像数据,并将其分为训练集和测试集;
本领域的技术人员在划分训练集和测试集时,训练集中数据的个数与测试集数据个数比值至少为7:3。
在本实施例中,从ImageNet图像数据集的训练集中随机采集50000张图像作为模型的训练集,从ImageNet图像数据集的测试集中随机采集3000张图像作为模型的测试集;
步骤2:对步骤1中训练集的图像进行重采样与封装得到载体图像向量;
从步骤1中的训练集中随机抽选batch_size张图像作为载体图像,将载体图像的尺寸重采样到vector_size*vector_size,为了加速模型训练,防止梯度爆炸,将图像像素值从[0,255]等比例压缩到[0,1],再封装成维度为batch_size*vector_size*vector_size*3的载体图像向量;
batch_size的大小可以根据训练速度进行任意选择。
在本实施例中载体图像的尺寸vector_size*vector_size为400*400,该大小可以根据实际训练速度进行调整;
步骤3:随机生成0-1比特串向量作为待嵌入的水印向量并将其与步骤2得到的载体图像向量一起输入到水印嵌入网络中,实现水印的嵌入输出水印图像,并计算水印图像失真损失ImgLoss;
比特串用概率分布服从二项分布且概率值设为0.5的随机函数生成,其个数与batch_size的大小相等,长度可根据不同需求进行调整。在本实施例中,比特串的长度取100。在生成比特串后,根据batch_size封装为batch_size*比特串长度的比特串向量。
水印嵌入网络是一种基于U-Net的自编码器,α为该基于U-Net自编码器隐藏层的权重;使用水印嵌入网络嵌入水印比特的过程如图3所示,其包括以下内容:
步骤301:将待嵌入的水印向量通过一层全连接层变为长度为one_dim的一维向量,接着将该一维向量经过矩阵变换操作调整为reshape*reshape*3的向量,对该reshape*reshape*3向量经过上采样操作后维度变为vector_size*vector_size*3的水印向量;
其中,本领域的技术人员需知晓,one_dim和reshape的值可以根据实际情况进行调整。在本实施例中,one_dim的值为7500,reshape的值为50,
步骤302:将输入的载体图像向量和步骤301中vector_size*vector_size*3的水印向量按最后一维拼接成维度为vector_size*vector_size*6的向量;
步骤303:将步骤302中vector_size*vector_size*6的向量经过水印嵌入网络处理后输出vector_size*vector_size*3的向量,代表残差图像;
步骤304:将步骤303得到的残差图像和载体图像向量相加后对各个通道的元素值截断于区间[0,1],截断后的vector_size*vector_size*3向量即为水印图像。通道元素值截断的方法是将所有在区间(-∞,0]的元素值算为0,所有在区间[1,∞)算为1;
步骤305:使用L2损失和LPIPS模型度量载体图像向量和步骤304生成的水印图像之间的相似性差异,ImgLoss即为L2损失和LPIPS值的和。
L2损失的计算公式如下:
其中,L2loss为L2损失,I是载体图像,I(i,j)是I在第(i,j)位置上的像素值,IW是水印图像,IW(i,j)是IW在第(i,j)位置上的像素值,W和H分别是图像的宽高。
LPIPS模型度量计算公式如下:
LPIPSmetric=LPIPS(I,IW)
其中,LPIPSmetric是利用LPIPS计算出的两张图像的相似度值,LPIPS是一种神经网络模型,用于计算两张图像的相似度。
水印图像失真损失ImgLoss的定义如下:
ImgLoss=L2loss+LPIPSmetric
步骤4:将步骤3得到的水印图像经过噪声层模拟的水印攻击后转化为有损水印图像;
噪声层的表达公式如下:
其中,A(m,n)代表一副M x N的单通道图片,M表示单通道图片的长,N表示单通道图片的宽;C(m,n)是卷积后M x N的图像,即模糊化后的图像;B(ii,jj)表示S x T的卷积核,S表示卷积核的宽,T表示卷积核的高,其中的参数由如下公式产生:
其中,σ是标准差;
若假设卷积核的尺寸为3x3,卷积核中每个位置的参数如图4所示,其中的每个数值代表对应位置像素的权重,图像的卷积操作就是用每个像素周围相邻像素值的加权平均值代替该像素值,因此卷积后原来中心像素值从2变为1。在训练模型时,将标准差σ设为2,卷积核B(ii,jj)尺寸大小设为7;
步骤5:将步骤4中的有损水印图像输入水印提取网络中,提取出长度与嵌入水印长度一样的0-1比特串,即提取的水印信息;使用交叉熵损失函数计算步骤3中待嵌入的水印向量和本步骤提取的水印信息之间的差异,记为水印信息提取损失MsgLoss;
水印提取网络,即解码器,是一种常规的卷积神经网络,该网络由7个连续的卷积层和紧接着的2个全连接层构成,这7个连续的卷积层和紧接着的2个全连接层构成本网络的隐藏层,β为隐藏层的权重;其中7个连续的卷积层中卷积核个数分别为32、32、64、64、64、128、128,卷积步长分别为2、1、2、1、2、2、2,激活函数都是ReLu函数,采用的填充皆为“same”模式,倒数第二个全连接层节点个数为512,激活函数是ReLu函数,最后的全连接层其节点个数为嵌入水印的长度,没有激活函数;
将步骤4中的有损水印图像输入到解码器中,用sigmoid函数将水印提取网络最后一层节点的输出值变为一个[0,1]内的概率值,具体方法为:将小于0的值变为0,将大于1的值变为1,并将落入(0,1)区间的值四舍五入变为0或1,作为提取到的水印比特;
步骤6:将步骤2生成的载体图像向量与步骤3得到的水印图像输入一个判别器,计算得到它们之间的差别DLoss;
为了增强水印的不可感知性,减少水印嵌入导致的图像失真,用一个卷积神经网络作为判别器,该网络由5个卷积层构成,γ为卷积层的权重,其中卷积核个数分别是8、16、32、64、1,卷积核尺寸皆为3x3,卷积步长皆为2,填充模式皆为“same”,激活函数除了最后的卷积层皆为ReLu函数,最后的卷积层没有激活函数。步骤3中的的水印嵌入网络作为编码器,两者构成一个对抗生成网络,将步骤3水印嵌入网络生成的水印图像和步骤2的载体图像向量输入到判别器中,让判别器判别输入图像是否为水印图像,将判别结果反馈给编码器和判别器,通过不断博弈学习,使得编码器生成的水印图像与载体图像尽可能相似,而判别器难以区分水印图像与载体图像;
步骤601:将载体图像向量和水印嵌入网络生成的对应的水印图像输入到判别器中,输出概率值P1和P2;
此处的P1是指判别器将输入的载体图像向量归为载体图像的概率,P2是指判别器将输入的水印图像归为水印图像的概率。
步骤602:判别器以P1和P2的差值作为损失,采用梯度下降算法更新判别器中卷积核的参数,直到P1和P2之差的绝对值小于或等于0.005时,停止更新;
步骤603:将步骤601中的P1和P2之差记为判别损失DLoss,作为模型整体损失的一部分反馈给水印嵌入网络。
训练时,对水印嵌入网络和判别器采用交叉训练的方式,先训练水印嵌入网络生成水印图像,再将载体图像向量和水印图像输入到判别器计算判别损失,判别器根据此损失即DLoss更新参数,水印嵌入网络和判别器通过不断地博弈学习提升各自性能,当训练次数后,判别器将无法区分水印嵌入网络生成的水印图像和载体图像,即此时的P1和P2之差的绝对值小于或等于0.005,意味着水印嵌入网络可以生成与载体图像更相似的水印图像。编码器,即水印嵌入网络和判别器的博弈过程如图5所示。
步骤7:从测试集中随机抽选若干图像作为载体图像,使用步骤2至步骤5的水印嵌入与水印信息提取方法,生成测试集的待嵌入水印向量、载体图像向量、水印图像以及提取的水印信息后,计算测试集水印的鲁棒性以及测试集水印图像的不可感知性;
水印的鲁棒性由水印的误码率决定,其误码率越低,鲁棒性越高。具体计算方法为:
其中,BER(SY(k),SY′(k))为嵌入的水印向量以及提取水印信息的误码率,SY(k)和SY′(k)分别是嵌入的水印向量和提取的水印信息,L是水印长度,k=1,2...1,,SY(k)表示第k个水印比特;
水印图像的不可感知性由载体图像向量和水印图像的峰值信噪比和结构相似性指标决定,峰值信噪比值越高,结构相似性指标的取值区间为[-1,1],其越接近1,说明水印图像的不可感知性越好。
峰值信噪比的计算方法为:
其中,n为表示一个像素值所需要的比特数,若一个像素值用一个字节表示,则n为8,I表示载体图像向量,IW表示水印图像;MSE(I,IW)的定义如下:
结构相似性指标的计算方法为:
SSIM(I,IW)=l(I,IW)·c(I,IW)·s(I,IW)
其中,l(I,IW),c(I,IW),s(I,IW)由定义如下:
其中,l(I,I
W),c(I,I
W),s(I,I
W)分别从亮度、对比度和结构三方面度量图像的相似性,μ
I与
分别是I和I
W的均值,σ
I与/>
分别是I和I
W的方差,/>
是I和I
W的协方差,C
1、C
2、C
3皆为常数,C
1=(0.01LL)
2,C
2=(0.03LL)
2,/>
LL为最大像素值,当一个像素占一个字节时,LL为255。
步骤8:将步骤3生成的训练集ImgLoss、步骤5生成的训练集MsgLoss以及步骤6生成的训练集DLoss分别乘以α、β与γ作为整体损失,调整α、β与γ的大小重复步骤3至步骤8并采用梯度下降算法和反向传播算法训练水印嵌入网络、水印提取网络以及判别器,直到整体损失可以使得步骤7中测试集水印的鲁棒性小于其相对应阈值以及水印图像的不可感知性大于其相应的阈值,完成训练;
整体损失为:
loss=α*ImgLoss+β*MsgLoss+γ*DLoss
其中,α,β,γ分别为水印嵌入网络隐藏层的权重、水印提取网络隐藏层的权重以及判别器卷积层的权重,可以调整它们的大小关系来平衡水印的鲁棒性和不可感知性;
测试集水印图像的鲁棒性由水印的误码率度量,误码率的阈值为2%,测试集水印图像的误码率需小于2%;测试集水印图像的不可感知性由峰值信噪比以及结构相似性指标确定,峰值信噪比的阈值为35dB,测试集水印图像的峰值信噪比需大于35dB,结构相似性指标的阈值为0.95,测试集水印图像的结构相似性指标需不低于0.95。
在本实施例中,在迭代160000次后,测试集水印的误码率小于2%,峰值信噪比为40.82dB,结构相似性指标为0.98;α,β,γ分别取1.5、1.5、0.5,且最终loss值小于10。
步骤9:使用训练好的水印嵌入网络完成向载体图像中嵌入水印向量;使用训练好的水印提取网络完成对待提取水印图像水印信息的提取。
为了演示水印的鲁棒性,结合附图6-7作进一步描述。以抗模糊化攻击的鲁棒水印模型为例,从测试集随机抽选了500张图像作为载体图像,分别输入到带噪声层训练得到的鲁棒水印模型和不带噪声层训练得到的基本水印模型的编码器中,嵌入100比特水印信息生成对应的水印图像,然后用matlab程序对这些水印图像进行了标准差为0.5、1、1.5、2、2.5、3、3.5、4、4.5、5,高斯核尺寸为7*7的高斯模糊化攻击,得到对应的有损水印图像,如图6所示。最后,再分别使用上述2个模型的解码器从有损水印图像中提取水印信息,计算平均误码率,实验结果如图7所示,实验表明,带噪声层训练得到的模型确实获得了鲁棒性,值得一提的是,想要获得对其他攻击的鲁棒性,通过噪声层合理模拟该攻击训练模型即可。
本发明还公开了一种基于深度学习的鲁棒图像水印方法的鲁棒图像水印系统,如图1所示,包括水印向量随机生成模块、预处理模块、水印嵌入模块、判别器、有损水印图像生成模块、水印信息提取模块、系统损失计算模块;
水印向量随机生成模块随机生成0-1比特串向量作为待嵌入的水印向量,并将水印向量以及载体图像输入至预处理模块,同时将水印向量输入至水印信息提取模块;
预处理模块将载体图像封装成batch_size*vector_size*vector_size*3的载体图像向量;将待嵌入的水印向量封装成reshape*reshape*3的向量,再将该向量经过上采样操作后维度变为vector_size*vector_size*3的水印向量;将vector_size*vector_size*3的水印向量与batch_size*vector_size*vector_size*3的载体图像向量拼接成维度为vector_size*vector_size*6的向量后输入至水印嵌入网络;
水印嵌入模块包含一个水印嵌入网络,其为一种基于U-Net的自编码器;在接收vector_size*vector_size*6的向量后,水印嵌入网络输出一个vector_size*vector_size*3的残差图像,并将残差图像和载体图像向量相加后对各个通道的元素值截断于区间[0,1],得到水印图像,将水印图像分别输入至判别器以及有损水印图像生成模块;水印图像生成模块还计算水印图像与载体图像之间的相似性差异ImgLoss,并将ImgLoss输入至系统损失计算模块;
判别器为一个卷积神经网络;根据水印图像以及残差图像计算DLoss,采用梯度下降算法更新判别器中卷积核的参数,直到DLoss小于或等于0.005时,停止更新,并将DLoss输入至系统损失计算模块;
有损水印图像生成模块利用噪声层模拟的水印攻击将水印图像转化为有损水印图像,并将其输入至水印信息提取模块;
水印信息提取模块包含一个水印提取网络,即一个卷积神经网络,其对输入的有损水印图像进行水印信息的提取,并使用交叉熵损失函数计算水印信息以及水印向量的差异,记作MsgLoss,并将MsgLoss输入至系统损失计算模块;
系统损失计算模块根据输入的ImgLoss、DLoss以及MsgLoss计算系统损失,调整各个模块所用神经网络的权重系数,直到水印信息提取模块提取的水印信息的鲁棒性以及不可感知性达到相对应的阈值。
本发明申请人结合说明书附图对本发明的实施示例做了详细的说明与描述,但是本领域技术人员应该理解,以上实施示例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。