图像处理之《生成隐写流》论文阅读

一、文章摘要

生成隐写术(GS)是一种新的数据隐藏方式,其特点是直接从秘密数据生成隐写介质。现有的GS方法通常因性能差而受到批评。本文提出了一种新的基于流的GS方法——生成隐写流(GSF),该方法可以直接生成隐写图像而不需要封面图像。我们将隐写图像生成和秘密数据恢复过程作为一个可逆变换,在输入的秘密数据和生成的隐写图像之间建立可逆的双客观映射。在前向映射中,将秘密数据隐藏在Glow模型的输入潜变量中,生成隐写图像。通过反向映射,可以从生成的隐写图像中准确地提取隐藏数据。此外,我们提出了一种新的潜变量优化策略来提高隐写图像的保真度。实验结果表明,本文提出的GSF算法的性能远远优于SOTA算法。
在这里插入图片描述

二、提出的方法

拟建GSF的管道如图2所示,包括两个阶段:1.潜变量优化阶段;2.隐藏和提取秘密的阶段。在第一阶段,对潜变量Z进行优化,旨在提高生成的隐写图像的质量。如图2顶部所示,采用质量评估器对图像保真度进行评估,根据每个输入图像的保真度输出一个分数。将生成图像与真实图像之间的分数差(Diff)作为后向损失进行优化;在第二阶段,建立从输入秘密数据到输出隐写图像的可逆双射映射,通过该映射可以将秘密数据转换为隐写图像,反之亦然。数据隐藏过程如图2底部所示。首先,将第一阶段优化后的潜变量Z编码为二进制序列,并将每个序列中的一些可隐藏位替换为输入的秘密数据。其次,将这些修改后的序列转换为与Z中的张量具有相同大小的L个浮点张量,称为隐写潜变量Zs。最后,Zs被发送到一个预训练的Glow模型,用于生成隐写图像。相反,可以通过反转上述过程来检索隐藏的秘密数据。
在这里插入图片描述

图2 我们建议的GSF的整体结构。潜变量Z与向后损失Diff循环更新,该Diff由图像质量评估器计算。将秘密数据隐藏在优化后的Z二值化序列中,然后将修改后的序列转换为Zs,然后发送给Glow模型进行隐写图像生成。隐藏的秘密数据可以通过反转隐藏过程来提取

2.1 模型训练

我们的方案建立在基于流的生成模型Glow[12]的基础上,通过该模型,输入潜变量Z和生成图像I几乎可以在没有信息损失的情况下相互转换,即Glow(I) = Z和Glow−1(Z) = I。Glow由一系列可逆函数Glow = f1×f2···×fn组成。Glow的变换可以表示为:I f1→h1 f2→h2···fn→Z;zf−1 n→hn−1···f−1 2→h1 f−1 1→I;这里,fi是可逆变换函数,hi是fi的输出。Glow由三种类型的模块组成,包括挤压模块、流动模块和分割模块。挤压模块用于特征映射的下采样,流模块用于特征处理。分割模块将图像特征沿通道侧分成两半,其中一半作为潜变量张量Zi输出,其大小为:
在这里插入图片描述
其中H/W为生成图像的高度/宽度,L为Zi的个数。然后,另一半功能循环到挤压模块中。在我们的方案中,将Z =∑Li=1Zi作为Glow的整体输入潜变量。Glow模型的损失函数定义为:
在这里插入图片描述
式中,log|det (dhi/dhi−1)|为雅可比矩阵行列式dhi/dhi−1的绝对值的对数。

2.2 潜变量优化策略

Glow的初始输入潜变量服从如下分布:Z ~ N(0;1) × δ,但只能生成低质量的图像。因此,我们提出了一种潜变量优化策略来提高生成图像的质量。所提出的策略如图2顶部所示,在算法1中进行了描述。我们不使用随机正态分布,而是用映射潜变量的平均值初始化Z,其中n个随机采样的真实图像In使用Glow模型转换为潜变量值,即Z = 1/n ∑Glow(In)。接下来,将初始化的Z与向后损失Diff循环更新,以进一步提高图像质量。

在这里插入图片描述

在该策略中,我们使用质量评估器(QA)来评估图像的保真度。使用预训练的分类器Resnet50[13]作为QA,对真实图像和Glow生成的图像进行训练。QA将为真实输入图像输出正分数,为生成图像输出负分数。Diff是QA输出的n张真实图像的平均得分与生成图像的得分之差,可以计算为:
在这里插入图片描述

式中,scoreireal为QA对第i张实数图像的输出得分,scoregen为生成图像的得分。每一步只生成一个图像。在每一步优化中,Z的更新如下:
在这里插入图片描述

其中,ε为控制变化水平的超参数,∇zDiff为潜变量z的梯度。优化过程将继续进行,直到达到最大训练步长或Diff值低于阈值。

2.3 秘密隐藏与提取

秘密数据隐藏在优化后的潜变量二值化序列中,如图2和图3所示。采用IEEE 754标准进行基数变换,将Z的每个浮点数编码为32位二进制序列

在这里插入图片描述
图3 秘密隐藏示意图。在将Z转换为二值化序列之后,输入的秘密数据隐藏在这些序列的可隐藏位中。然后,将修改后的序列转换为称为Zs的浮点张量

在这里插入图片描述

这里,(n)10表示十进制浮点数。sign是取值为0或1的符号位。(exponent)10表示十进制指数乘数,在我们的方案中通常等于125、126或127。(fraction)10表示浮点数的小数部分。然后,将sign位、(exponent)10和(fraction)10的值依次转换为二进制数,形成32位二进制序列

详细的数据隐藏过程如图3所示。首先,使用公式4中定义的函数将Z的所有浮点数编码为32位二进制序列。除了对图像质量影响较大的指数位外,这些二值化序列的符号位和小数部分(第0 ~ 22位)可以用来隐藏秘密数据,称为可隐藏位。其中,只有分数部分的αth ~ βth(0≤α≤β≤22,[α: β])位进行数据隐藏。在我们的方案中,我们改变α的值来传递不同的秘密有效载荷,β固定为22。然后将包含秘密数据的修改序列再次转换为浮点数,然后重构为隐写潜变量z。

我们可以逆数据隐藏过程来提取秘密数据。首先,将接收到的隐写图像发送到Glow模型中,恢复隐写潜变量;然后,将恢复的隐写潜变量Z*s转换为二值序列。最后,可以从这些序列的Sign位和[α:β]位中检索隐藏的秘密数据。综上所述,秘密数据的隐藏和提取过程可以描述为:
在这里插入图片描述

式中,bin(·)表示将潜变量张量中的浮点数转换为二进制序列。Secret是输入的秘密数据,它隐藏在bin(Z)的Sign位和α - β位中,即[S,α:β]。Secret 是从bin(Zs)的相同位置检索到的提取的秘密数据。

三、实现细节

我们的方案是在带有4个Nvidia 1080Ti的CentOS 7上使用PyTorch实现的。CelebA[14]用于评估我们的模型的性能。Adam是优化器,学习率是1e-3。训练Glow模型生成L = 5的128×128图像。公式3中的参数“ε”设置为1e-3, 公式2中的n设置为3,算法1设置为3。算法1中的thresh设置为0.1,max-step设置为100。

在隐写术中,bpp是用来衡量隐写图像有效载荷的度量,bpp = len(Secret)/( H×W)。这里,bpp表示每个像素携带的秘密比特数(比特每像素),len(·)表示隐藏的秘密数据的长度,H/W为隐写图像的高度/宽度。Acc用于度量秘密数据的提取精度:Acc = secret∗⊙Secret/(len(secret));这里,secret∗和secret分别表示提取的和输入的秘密数据。⊙表示XNOR操作。隐写安全性用度量PE来评价,定义为:PE = minPFA 1/2 (PFA + PMD);其中,PFA和PMD分别为隐写图像的虚警率和漏检率。PE范围为[0,1.0], PE的最优值为0.5。此时,隐写分析器无法区分图像的来源,只能随机猜测。预训练的Resnet50作为质量评估器。它是在20k张CelebA的真实图像和20k张Glow的生成图像上进行训练的。原始未修改的Z生成的图像称为明文图像,其中没有隐藏秘密数据。隐写潜变量Zs生成的图像称为隐写图像,隐写图像中包含了秘密数据。

论文地址:Generative Steganographic Flow

没有公布源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单实验 spring cloud gateWay 路由实验 实验

1.概要 1.1 说明 微服务统一网关实验&#xff0c;这里简单实验一下路由的功能 1.2 实验步骤&#xff0c;使用下面这个工程作为基础工程添加了一个gateWay做如下使用 简单实践 spring cloud nacos nacos-server-2.3.0-CSDN博客 2 代码 2.1 工程文件 <?xml version&quo…

Qt程序设计-导出PDF

本文讲解如何实现导出PDF,包含如何使用HTML格式和添加图片。 实例如下: 创建项目,添加两个按钮,并在D盘提前准备好图片。 窗体的头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include <QPrinter> #include <QPainter> #i…

泰雷兹和Quantinuum推出入门套件,帮助企业为未来的后量子加密变革做好准备

•新的解决方案——PQC入门套件(PQC Starter Kit)为用户提供了一种快速、简便的方法&#xff0c;用于测试和衡量其在后量子时代防范量子计算攻击的准备情况 •随着量子计算逐渐成熟&#xff0c;企业为后量子时代做好准备并培养加密灵活性&#xff0c;对于降低数据泄露风险至关重…

Win32 SDK Gui编程系列之--ListView自绘OwnerDraw

ListView自绘OwnerDraw 1.ListView自绘OwnerDraw 正在试错是否使用了列表视图,尽量制作出智能的表格编辑器。本页显示了业主抽签的表格数据(二维数组数据)的显示方法。 显示画面和整个程序如下所示。使用ListView_GetSubItemRect宏的话,就不需要getRect函数了。 当nCol的…

10-树-从中序与后序遍历序列构造二叉树

这是树的第10篇算法&#xff0c;力扣链接。 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], po…

WebAssembly002 FFmpegWasmLocalServer项目

项目介绍 https://github.com/incubated-geek-cc/FFmpegWasmLocalServer.git可将音频或视频文件转换为其他可选的多媒体格式&#xff0c;并导出转码的结果 $ bash run.sh FFmpeg App is listening on port 3000!运行效果 相关依赖 Error: Cannot find module ‘express’ …

由vscode自动升级导致的“终端可以ssh服务器,但是vscode无法连接服务器”

问题描述 简单来说就是&#xff0c;ssh配置没动&#xff0c;前两天还可以用vscode连接服务器&#xff0c;今天突然就连不上了&#xff0c;但是用本地终端ssh可以顺利连接。 连接情况 我的ssh配置如下&#xff1a; Host gpu3HostName aaaUser zwx现在直接在终端中进行ssh&am…

ElastAlert 错误日志告警

文章目录 前言一、ElastAlert 概览1.1 简介1.2 ElastAlert 特性 二、ElastAlert 下载部署2.1 安装 Python3 环境2.2 下载 ElastAlert2.3 部署 ElastAlert 三、接入平台3.1 对外接口层3.2 服务层 前言 ElastAlert 是 Yelp 公司基于 python 开发的 ELK 日志告警插件&#xff0c;…

Stata学习(1)

一、五大窗口 Command窗口&#xff1a;实现人机交互 来导入一个自带数据&#xff1a; sysuse是导入系统自带的数据&#xff0c;auto导入该数据的名称&#xff0c;后面的clear是清除之前的数据 结果窗口&#xff1a;展示计算结果、查找功能 在Edit的find可以实现查找功能&#…

Nacos安装,服务注册,负载均衡配置,权重配置以及环境隔离

1. 安装 首先从官网下载 nacos 安装包&#xff0c;注意是下载 nacos-server Nacos官网 | Nacos 官方社区 | Nacos 下载 | Nacos 下载完毕后&#xff0c;解压找到文件夹bin&#xff0c;文本打开startup.cmd 修改配置如下 然后双击 startup.cmd 启动 nacos服务&#xff0c;默认…

【经验分享】如何高效管理Jmeter的接口测试用例?

Test Fragment 测试片段元素是控制器上的一个种特殊的线程组&#xff0c;它在测试树上与线程组处于一个层级。它与线程组有所不同&#xff0c;它不被执行&#xff0c;当它是一个模块控制器或者是被控制器所引用时才会被执行 添加Test Fragment的步骤&#xff1a; 目前接口的组…

微信小程序的图片色彩分析,窃取主色调,调色板

1、在微信小程序中创建包管理器 package.json npm init -y 2、安装 Mini App Color Thief 包 npm i --save miniapp-color-thief 3、构建 npm 4、wxml <canvas canvas-id"myCanvas"></canvas> <button bindtap"chooseImage">chooseIm…

MATLAB语音去噪系统

目录 一、背景 二、GUI页面 三、程序 3.1 LMS滤波程序 3.2 GUI程序 四、附录 一、背景 本文介绍了一种最佳的自适应滤波器结构&#xff0c;该结构采用最小均方差&#xff08;LMS&#xff09;作为判据&#xff0c;通过不断迭代自适应结构来调整得到最佳滤波器…

前端常用代码整理(不断更新中)— js,jquery篇

1.随机函数代码 function getRandom(min, max) {return Math.floor(Math.random() * (max - min 1)) min}2.倒计时代码 let now new Date()// 2. 得到指定时间的时间戳let last new Date(这里写想要达到的时间)// 3. &#xff08;计算剩余的毫秒数&#xff09; / 1000 剩余…

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…

Linux操作系统运维-Docker的基础知识梳理总结

Linux操作系统运维-Docker的基础知识梳理总结 docker用来解决不同开发人员软件调试时环境不统一的问题&#xff0c;保证了程序调试时运行环境的一致性。docker的设计理念便是一处镜像&#xff0c;处处运行&#xff0c;即通过产生用户软件&#xff0c;运行环境及其运行配置的统一…

回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测&#x…

Linux下centos操作系统安装Mysql8.0过程及踩坑填补

我自己有一台服务器&#xff0c;之前安装的是MySQL5.5&#xff0c;现在我想升级为MySQL8.0&#xff0c;于是我干了以下操作,既有踩坑又有干货&#xff1a; 1.先卸载MySQL&#xff1b; 2.删除跟MySQL相关文件&#xff1b; 3.安装新的MySQL8.0版本&#xff08;这里踩了一个坑&…

Spring- FactoryBean接口中的getObject()方法

目录 一、Spring框架介绍 二、FactoryBean接口是什么 三、getObject()方法如何使用 一、Spring框架介绍 Spring框架是一个轻量级的、非侵入式的Java企业级应用开发框架&#xff0c;以IoC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;为核心思…

springboot集成easypoi导出多sheet页

pom文件 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version> </dependency> 导出模板&#xff1a; 后端代码示例&#xff1a; /*** 导出加油卡进便利店大额审批列…