Hiding Images within Images[精读]

news/2024/7/21 6:27:11 标签: 人工智能, 深度学习, python, 图像处理

Hiding Images within Images

第一次阅读时间:2023/9/15-2023/9/20

这里写目录标题

  • Hiding Images within Images
    • 1 背景介绍
    • 2 论文摘要
    • 3 相关工作
      • 3.1 隐藏信息的目的
      • 3.2 隐藏信息面临的挑战
      • 3.3 常见的隐藏技术
      • 3.4 和隐写术(steganography)的区别
    • 4 提出方法
      • 4.1 学习图像的隐藏和发现[自动编码网络]
      • 4.2 隐藏图像的编码在哪里?
        • 4.2.1 是否将隐藏图像的信息藏在host image的LSBs中呢?
        • 4.2.2 隐藏内容的可发现性
      • 4.3 使隐藏的图像的变模糊
      • 4.4 隐藏多个图片
      • 4.5 图片退化对检索的影响
    • 5 未来展望/总结
    • 6 过程

1 背景介绍

论文链接:https://ieeexplore.ieee.org/abstract/document/8654686

代码链接:

录用信息:IEEE Transactions on Pattern Analysis and Machine Intelligence

论文标题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2 论文摘要

提出问题:

  1. 如何将一张全彩色图像嵌入到另一张相同大小的图像中,同时尽量减小两张图像的质量损失?
  2. 如何通过各种转换来分析和验证隐藏和宿主图像的质量是否可以得到保持?
  3. 如何提供系统的两个扩展,以减小发现隐藏图像内容的可能性?(隐藏图像的存在很难不被发现,我们要做的就是使隐藏图像的内容不被发现)

提出解决方案:

  1. 使用深度神经网络同时训练隐藏和揭示过程,确保它们有效配对,以实现图像的有效隐藏和揭示。
  2. 实施各种转换和分析,包括简单的图像处理和复杂的基于机器学习的对抗性方法,以评估隐藏和宿主图像的质量保持。
  3. 提供两个系统扩展,以增加隐藏图像内容的安全性,允许系统隐藏多个图像。

优势&实验结果:

  1. 成功应用深度学习技术来隐藏图像,实现了高质量的隐藏和揭示。
  2. 系统在各种自然图像上表现良好,具有广泛的适用性。
  3. 可以用于图像认证、数字水印、检测图像篡改的确切区域以及存储有关图像渲染和内容的元信息等应用。
  4. 通过两个系统扩展,增强了隐藏图像内容的安全性,提高了系统的功能,并且可以隐藏俩张甚至更多的图片。

3 相关工作

3.1 隐藏信息的目的

  • watermarks embed authorship and copyright infomation

3.2 隐藏信息面临的挑战

  • 嵌入信息会改变host Image的外观和潜在的底层统计信息。
    • 载体信息改变的数量取决于2个因素
      • 需要 隐藏信息的数量(最常见的信息隐藏形式是隐藏相对较少的比特—例如文本信息,信息越长,潜在的破坏就越大)
      • 取决与载体图片本身(如果载体图片信息本身处于噪声高频的区域,比处于平坦区域产生更少的可被人为检测的扰动)

3.3 常见的隐藏技术

  • 常见的隐藏技术是对图像的最小意义位LSB进行操作,无论是否是相同的还是自适应的。尽管我们在视觉上没办法察觉出来,但是图片的统计分析可以察觉出图片是否被改动过。另一种解决方法就是通过创建和匹配显式的或者通过深度学习的模型保持host Image的统计。

3.4 和隐写术(steganography)的区别

  • 隐藏的信息不需要完美的编码,在隐藏图像中的小错误也是可以接受的
  • 可见信息不需要被完美的传输,在隐写术中,对可见图像的微小修改可能会对隐藏信息造成较大的错误,在这个系统中,对可见图像的局部变化只会对隐藏图像局部发生改变
  • 被隐藏的信息量的数量级—隐藏信息与主机信息的比例为1:1,对每像素的位而言,我们试图编码24bpp(bit per pixel 每个像素的尾数)
  • 我们隐式地对自然图像的统计数据的分布进行建模,而不是创建显式的模型。这是通过使用一个由大量主机和隐藏图像训练的深度神经网络来实现的。(所谓隐式就是使用深度神经网络进行大量数据的训练进行建模)
  • 鉴于我们所隐藏的信息量,我们并不试图隐藏所隐藏的信息的存在。然而,我们确切提出了混淆隐藏消息内容的方法。

4 提出方法

尽管将深度神经网络整合进发现存在的隐藏信息在最近给人留下了一个令人印象深刻的结果。但是将深度神经网络整合进隐藏过程本身的尝试却很少。在这篇文章中,一些使用深度神经网络DNN去选择哪一个LSB去代替信息的二进制,一些人使用DNN去决定从container images提取哪一个bits,也有一些人使用GAN去训练一个判别器返回一些隐藏信息被发现可能性的信号。

在这个工作中,神经网络决定将隐藏信息放置到哪,如何去压缩,如何去代表。将隐藏的信息扩散到环绕像素的所有bit和所有颜色通道中。解码网络和编码网络同时训练,解码网络被用于揭露隐藏的图片。

4.1 学习图像的隐藏和发现[自动编码网络]

该训练系统学会将隐藏图片压缩和放置到host Image最不容易注意到的部分。

在这里插入图片描述

分为3个部分,第一个部分是Prep Network,第二个部分为Hiding Network,第三个部分为Reveal Network,Reveal Network虽然是被接受者所使用的,但是其是同时和Prep Network和Hiding Network同时训练的。

  1. Prep Network
  • 将隐藏图片的RGB像素点转换为Hiding Network能使用的特征,这些特征并不是优先定义的,而是学习得到的。
    在这里插入图片描述
  1. Hiding Network
  • Hiding Network做的工作是将隐藏的图像嵌入到主图像中,Hiding Network的输入为Prep Network提取到的特征和Host Image,输入为N×N的图像,输出也是N×N的Container image,Container image尽可能的和Host Imagee图像相同,但是又隐藏着可以重建Hidden Image的信息。
  1. Reveal Network
  • 负责将container Image中的hideen Image重建

Error term1 并没有改变 Reveal Network的权重,Reveal Network不需要重建主机映像,只需要恢复隐藏图像,相比之下,所有网络都使用来自Error term 2的信号进行训练,因为每个网络都负责保存和转发关于隐藏图像的信息。

在这里插入图片描述

在这里插入图片描述


以下是30个神经网络中最佳的网络结构和超参数,所有输入和输出的图片都是200×200的像素,3通道RGB,网络被ADAM所训练,并且权重被初始化为(0,1),并没有使用Batch_Normalization,所有实验都使用了Tensor-Flow的默认参数,除了指定的以外。β=0.75的时候展现出了少量的数量好处,在数量上,每个RGB通道的平均颜色损失,对于Host Image来说是2.4,对于hidden Image来说是3.4。

在这里插入图片描述

4.2 隐藏图像的编码在哪里?

本文的主要工作是明确的证明在有限的视觉可察觉伪影上的图片编码大量的信息是可能的,但是这仅仅是视觉上的,并没有明显的尝试主动的对机器检测隐藏信息的存在,换言之,机器检测还是可以检测出图片中编码着隐藏信息的。

4.2.1 是否将隐藏图像的信息藏在host image的LSBs中呢?

现已存在发现LSBs中的隐藏信息的攻击,stegExpose

我们可以看到在container image的一个通道上翻转一位bit,只会影响该通道。

而对reconstruction hidden image,我们可以看到,在容器图像的任何颜色通道中,任何位位置的位翻转,在隐藏图像的重建中对所有颜色通道都有影响。换句话说,隐藏图像的信息分布在各个通道上,这也是它为什么不同通过简单的查看LSB来检测到的原因。

并且在空间维度上也影响。平均而言,对隐藏图像的每个像素的编码分布在与容器图像中对应像素的距离为7的像素中。因为由图7可看出更改container像素点距离为7以内的隐藏像素的Loss都比较大。其次,空间分布的数量与神经网络的结构和卷积的大小直接相关。上面提到隐藏像素的Loss,设S‘为正常通过隐藏揭示网络得到的隐藏图像,S’'为修改了一个bit后通过隐藏揭示得到的隐藏图像,我们对S’和S’‘做L2距离,发现L2距离的大小和被改动像素点的距离有关系。

在这里插入图片描述
在这里插入图片描述

​ 在高检出率的条件下,这种技术并不适合需要隐藏信息的应用程序,现在我们需要将注意力转向隐藏图像内容的可发现性,而不仅仅是隐藏图像的存在。

4.2.2 隐藏内容的可发现性

假设对手获得了Host Image,这个Host Image是未经过改变的,对手可以放大original host和container的像素级差异,来得到隐藏图像的痕迹,因为隐藏的图像是未经过安全加密的,视觉识别特征是可见的。

隐藏图像在包含大的均匀颜色斑块的主机图像中最容易看到(图8-A、B、C和G)。

在这里插入图片描述


如果发送方小心地只使用高熵图像呢?这些隐藏的信息还能被识别出来吗?为了从攻击者的角度来回答这个问题,我们假设对手无法访问发送者所使用的确切网络。然而,攻击者可以成功地训练他们自己的深度图像隐藏网络。有了这种能力,他们就能为我们的网络创造一个对手吗?回想一下,对手的隐藏网络开发的表示将与我们的不同(如前所述,每个网络的编码器和解码器配对后只能一起工作)。对手并不是试图模拟我们的系统,而是可以通过训练许多随机初始化的隐藏系统的变体来收集关于隐藏过程的大规模统计数据。

我们再往下看

之前我们使用了30个不同的网络和结构来找到最佳的网络架构,现在我们重新返回到被丢弃的网络中,我们从被丢弃的网络中获得那些被训练了的样本,组成3元组<cover, hidden, container>,每一个三元组都被添加到“阳性”组中。我们创建了一组“负的”的例子,其中,对于每个这些三联体,隐藏的图像被替换为一个随机选择的图像。这些新的识别网络的任务是正确地识别负集中的隐藏图像没有嵌入到容器图像中,而正集中的隐藏图像嵌入到容器中。该过程如图9所示。我们为什么要这样做?如果能够准确地训练这个识别网络,那么它将确认在容器图像中有足够的可发现的信息,以便外部攻击者获得关于隐藏图像的信息。

按照我的理解,使用多种网络和结构训练出来的图片组成三元组,作为隐藏了图片的标签,对其中隐藏图片随机修改作为没隐藏的图片的标签,即前者为阳性,后者作为阴性来训练一个二分类器,对该二分类器输入Host Image和Container Image,即可得到是否隐藏了图片。

这意味着,如果隐藏的图像是已知的,那么验证其存在的证据就可以可靠地从容器中提取出来,而无需访问特定的解码网络。此攻击假定对手可以访问未更改的主机映像。现在让我们让攻击更广泛:当未改变的主机不可用时,会发生什么?我们试图在没有得到未改变的主机的情况下重新训练歧视网络。令人惊讶的是,检测的准确率仍然很高,达到了94.5%。

在这里插入图片描述


作为最后的攻击,如果攻击者没有办法获得Host Image,使用最简单的攻击,通过一系列的模糊操作来只转换container image,从而产生容易模糊,然后计算这和容器图像之间的差值,并加强结果,我们可以从图10中看到,仍然存在对嵌入图像的内容的提示,这并没有使用到host Image和hidden Image。

在这里插入图片描述

4.3 使隐藏的图像的变模糊

模糊技术的要求是即使未被改动的host Image被获取了,隐藏图片的内容也很难被确定。模糊技术的错误必须保持局部性,无可加性和可乘性,并且不会传播。

模糊隐藏图像的一个简单方法是在像素被传送到隐藏网络之前对他们进行排列,图像的接收器将容器图像通过解码网络,该网络显示了一个混乱的隐藏图像,然后“不排列”。这个过程有一个重要的特性,即每个像素重建中的误差是严格的局部的(不影响其他像素),即使没有任何重建误差,排列后的图像也无法识别。

在一个独立的测试集上评估的最佳网络的结果如图11所示。中间排列的图像也显示出来。请注意,在排列中缺乏空间结构,而潜在的隐藏物的颜色分布是可识别的(第3列,标记为“Shuffled-1”)。最重要的是,即使在主机图像的重建过程中,误差被放大,隐藏的图像也没有可识别的痕迹(图11,第7列)。表2给出了该系统(第1行)与不使用排列的系统(第4行)的平均误差。第3行显示了使用之前训练过的网络进行排列的结果(不使用排列)。

在这里插入图片描述

在这里插入图片描述

4.4 隐藏多个图片

将同样大小的多个图片嵌入到另一个相同大小的图像中,隐藏的图像可以排列,也可以不排列。这也是一种混淆方法

具体的说,我们试图隐藏两个完整大小的N×N图像在Host Image,训练方式和隐藏一个图像的时候类型,如图12,在我们的实验中,每幅图像的l2损失是相等的。与以前一样,这个系统需要对所有这三个组成部分进行再培训。样本结果如图13所示,测试集的定量误差比较见表3。正如预期的那样,误差增加了,但重建结果在视觉上仍然很好。

在上面的过程中,我们训练了识别网络来确定一个特定的隐藏图像是否被嵌入到一个容器图像中。我们用这个双图像隐藏系统测试了这些相同的网络。在单个图像隐藏任务中,检测网络的准确率为94%。当使用本节中描述的网络对多个图像进行编码时,准确率下降到73百分比。正如我们所希望的那样,隐藏更多信息的过程进一步混淆了隐藏的图像。

两个图像分别排列并隐藏在单个主机图像中。与只使用单一的隐藏图像和非排列的双隐藏图像系统相比,重建误差显著增加。尽管这些网络的训练时间要长得多:在一个GPU上使用30天,但误差仍有所增加。表3提供了定量结果。隐藏图像和重建图像的实例如图14所示。尽管噪声和重建误差增加,但图像的内容,包括边缘和梯度,仍然基本保持完整和容易识别。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.5 图片退化对检索的影响

我们使用一个查询系统来对original host, hidden-1,hidden-2 image 进行检索,检索的数据库包含了ImageNet images, randomly selected iamges from photography sites on the web, and publicly available images from the Corel Database. 总共265万图像,我们测试了准确率,每次实验都进行了1000次检查,如table 4 所示,大多数实验的得分都是完美的,1000次检索中只有一个没有工作。

在这里插入图片描述

5 未来展望/总结

文中创建了一个由三个深度神经网络组成的系统来隐藏图像中的图像。在另一个相同大小的图像中嵌入一个全彩图像,需要为隐藏的图像投入很大比例的比特。但是,通过深度神经网络的压缩,得到隐藏图像的解码结果,以及包含隐藏图像的主机图像的外观,分别与原始隐藏图像和主机图像非常接近。在大多数被检查的案例中,没有看到视觉上可识别的伪影。

然而,当隐藏这么多的信息时(被隐藏信息与被隐藏信息的比例为1:1),对隐藏信息的检测可能是不可避免的。更有问题的问题是,如第3节所示,即使没有访问未改变的主机映像,也可以识别出隐藏映像内容的痕迹。此外,这可以通过各种技术来实现,从简单的容器图像转换到更复杂的基于机器学习的对手,这些对手使用从许多相似(虽然不一定相同)的)深度神经网络嵌入系统中收集的统计数据。为了进行水印和图像更改检测和认证,了解隐藏信息的内容,使得在进行修改时更容易删除和/或复制它。文中提出了通过训练一个检测网络来判别是否隐藏了图片,该检测网络使用了被丢弃的网络和架构训练得到的三元组<Host Image, Hidden Image, Container Image> 作为阳性标签,随机改变Hidden Image作为阴性标签,通过监督学习来训练出一个可检测是否藏了图片的判别器。即使没有使用Host Image作为输入,检测的准确率仍然很高,达到了94.5%。

为了解决这个问题,我们对隐藏系统扩展了俩个方向。

首先,我们证明了系统编码乱码图片的能力。因为神经网络不再可以探索空间相关性,这需要重新训练隐藏系统的所有部分。并且网络对隐藏图像需要投入更多的表征能力。虽然重建后的hidden image和host image的损失都增加了,但是重建的host和hidden图片仍然保持比较好的质量,更重要的是,没有排列值,没有隐藏图像的可见痕迹被发现。==即将Hidden Image进行重排列,视觉上看到的是模糊的图片,但是颜色还是能看出来的。==对模型进行重训练,使它具有重新排列的能力,在解码的时候恢复隐藏图像的能力。即可达到即使将误差放大,也无法看到隐藏图像痕迹,这在没有使用重排列的时候,对containner 进行放大误差,是可以看到隐藏图像的痕迹的。

6 过程

  1. 综述
  2. 学习图像的隐藏和发现
  3. 隐藏的信息可以被基于训练的检测器所发现
  4. 提出2种方法掩盖隐藏的信息,即使当原始的、未改变的、覆盖的图像是公开可用的
  5. 除了使隐藏的图像更难被发现以外,提出了如何隐藏更多的图像,而不只是一个

http://www.niftyadmin.cn/n/5038638.html

相关文章

创建环境时提示:ERROR conda.core.link:_execute(502)

创建环境时提示&#xff1a;ERROR conda.core.link:_execute(502) 创建环境最后Executing transaction&#xff0c;失败&#xff0c;提示如下&#xff1a; Preparing transaction: done Verifying transaction: done Executing transaction: failed ERROR conda.core.link:_e…

代码随想录算法训练营19期第58天

739. 每日温度 代码随想录 初步思路&#xff1a;暴力解法&#xff0c;两层循环 总结&#xff1a; 单调栈通常是一维数组&#xff0c;要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置 使用单调栈主要有三个判断条件。 当前遍历的元素T[i]小于栈顶元素T…

Centos下安装 oracle11g 博客2

[oraclewangmengyuan database]$ ./runInstaller -silent -responseFile /home/oracle/database/response/db_install.rsp -ignorePrereq ./runInstaller -silent -responseFile /home/oracle/database/response/db_install.rsp -ignorePrereq 正在启动 Oracle Universal Insta…

Js 防止空指针调用的优雅写法

在 JavaScript 中&#xff0c;空指针调用通常指的是对一个值为 null 或 undefined 的变量进行属性或方法访问时出现的错误&#xff0c;比如&#xff1a; let obj null;// 这里会抛出 TypeError: Cannot read property name of null let name obj.name;为了避免这种错误&…

用于设计 CNN 的 7 种不同卷积

一 说明 最近对CNN架构的研究包括许多不同的卷积变体&#xff0c;这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义&#xff0c;效果和用例&#xff08;在计算机视觉和深度学习中&#xff09;是值得的。这些变体旨在保存参数计数、增强推理并利用目标…

ortools在idea中导入失败解决方案

这里写目录标题 错误描述解决方案 <dependencies><!-- https://mvnrepository.com/artifact/com.google.ortools/ortools-java --><dependency><groupId>com.google.ortools</groupId><artifactId>ortools-java</artifactId><ver…

Java 调用 GitLabAPI 获取仓库里的文件件 提交记录

1. 需求 项目组 需要做统计&#xff0c;获取每个开发人员的代码提交次数&#xff0c;提交时间&#xff0c;提交人等等&#xff0c;因代码在GitLab上管理&#xff0c;所以需要调用GitLabAPI来获取。 2. 开发 API官网&#xff1a;https://docs.gitlab.com/ee/api/ 2.1 创建自…

Qt(day4)

思维导图 QT连接TCP网络通信 服务器 ser.h #ifndef SER_H #define SER_H#include <QWidget> #include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件 #include<QMessageBox> //消息对话框 #include<QList> …