概述
此论文标题是《PRIS: Practical robust invertible network forimage steganography》,意为PRIS:用于图像隐写的实用鲁棒可逆网络。
论文摘要
图像隐写术是一种将秘密信息隐藏在另一幅图像中的技术,使得秘密信息对人眼不可见,并且在需要时可以恢复。然而,现有的大多数图像隐写方法在容器图像受到失真(如高斯噪声和有损压缩)影响时,隐藏的鲁棒性较低。本文提出了PRIS,以提高图像隐写的鲁棒性。PRIS基于可逆神经网络,在提取过程的前后分别加入了两个增强模块,并采用三步训练策略。此外,PRIS还考虑了通常被现有方法忽略但在实际中不可避免的舍入误差,并提出了梯度近似函数(GAF)来解决舍入失真的不可微问题。实验结果表明,PRIS在鲁棒性和实用性方面均优于现有的最先进的鲁棒图像隐写方法。代码已开放,地址为:https://github.com/yanghangAI/PRIS。
创新点
-
本文提出了一种用于应对多样化攻击的图像隐写的实用鲁棒可逆网络。
-
我们在训练过程中引入了三步训练策略,以实现更好的鲁棒性。
-
提出了一种梯度近似函数,用于解决由舍入操作引起的不可微问题,并考虑了舍入误差。
-
实验结果表明,我们提出的PRIS在鲁棒性和实用性方面均优于现有的最先进的RIIS方法。
核心方法
论文思路
PRIS是论文提出的核心方法,以提高图像隐写的鲁棒性。
我们提出了PRIS模型,引入了两个新模块:前置增强模块(pre-enhance)和后置增强模块(post-enhance),分别添加在提取过程的前后。通过采用三步训练策略,我们将模型的鲁棒性提升到了最先进的水平。PRIS框架包含两个主要部分:可逆模块和增强模块。DWT和IWT分别表示离散小波变换和逆小波变换。左侧模块是嵌入过程,右侧模块是提取过程。其中,( z ) 是遵循正态分布的随机噪声,如图1所示。
可逆模块如图2所示。
增强模块
pre-enhance 和 post-enhance这两个模块都采用了与DenseNet 相同的架构。前置增强模块以失真的容器图像作为输入,并输出一个增强后的容器图像,以便于可逆模块进行提取。后置增强模块以提取出的图像作为输入,并输出一个增强后的提取图像,使其更接近原始秘密图像。
三步策略
通过采用三步训练策略,我们将模型的鲁棒性提升到了最先进的水平。
模型表现
表4展示了PRIS和其他几种方法在1级任务中的性能结果。与最新的方法相比,我们的PRIS表现出卓越的性能,确立了其作为最鲁棒模型的地位。图7是PRIS在1级不同类型的攻击下的视觉结果,在不同失真下,封面图像对和秘密图像对对人眼来说难以区分。
表6展示了HiNet、RIIS和PRIS在4级任务中的结果。PRIS在平均PSNR-S(秘密图像的峰值信噪比)上比RIIS高出0.74 dB,表现出更优的性能。HiNet的PSNR-C(容器图像的峰值信噪比)最高,因为它在训练过程中没有考虑攻击,而攻击发生在嵌入过程之后,因此没有影响PSNR-C。然而,HiNet的PSNR-S表现不佳,尤其是在高斯噪声(σ = 10)和JPEG失真下,这表明HiNet对攻击较为脆弱。
代码复现
核心模型代码
在根目录中demo.py的定义:
class PRIS(nn.Module): def __init__(self, in_1=3, in_2=3): super(PRIS, self).__init__() self.inbs = Hinet(in_1=in_1, in_2=in_2) self.pre_enhance = modules.rrdb_denselayer.ResidualDenseBlock_out(3, 3) self.post_enhance = modules.rrdb_denselayer.ResidualDenseBlock_out(3, 3) def load_hinet(self, path): state_dicts = torch.load(path) network_state_dict = {k: v for k, v in state_dicts['net'].items() if 'tmp_var' not in k} self.inbs.load_state_dict(network_state_dict) def forward(self, x, rev=False): if not rev: out = self.inbs(x) else: out = self.inbs(x, rev=True) return out
训练代码和推理代码的详细操作步骤,代码讲解可移步:PRIS代码讲解_哔哩哔哩_bilibili。