信息隐藏| HiNet: Deep Image Hiding by Invertible Network

本文提出了一种基于可逆神经网络的图像隐藏方法HiNet,通过反向学习和小波域隐藏策略提高容量、不可见性和安全性。HiNet利用可逆网络结构实现隐藏与恢复的协同优化,显著提升性能。
摘要由CSDN通过智能技术生成

来源为ICCV2022


摘要&引言

容量、不可见性安全性是图像隐藏任务面临的三大挑战。本文提出了一种新的基于可逆神经网络(INN)的框架HiNet,以同时克服图像隐藏中的三个挑战。
对于大容量,提出了一种反向学习机制,通过同时学习图像隐藏和恢复过程,能够实现将全尺寸的秘密图像隐藏为相同尺寸的封面图像。为了提高隐蔽性,提出将秘密信息隐藏在小波域中,而不是像素域隐藏。此外,提出了一种新的低频小波损失来约束秘密信息隐藏在高频小波子带中,这大大提高了隐藏的安全性。

关键词:图像隐藏、可逆神经网络

一、传统隐藏方式与本文隐藏方式对比?

传统的隐写方法只能隐藏少量信息,且都是通过采用两个正向的子网络依次进行图像隐藏:一个是隐藏网络,一个是恢复网络,如图(a),隐藏和揭示网络有两组参数,他们通过简单连接连接起来,这种松散的连接可能导致颜色失真和纹理复制伪影。此外,他们很少考虑安全问题,使得隐藏的秘密信息很容易被发现。HiNet网络的隐藏与恢复过程共享同一组网络参数,如图(b)所示。
在这里插入图片描述
本文的工作是第一次尝试探索图像隐藏任务中的可逆网络。该方法的主要新颖之处在于将图像恢复建模为可逆网络结构中图像隐藏的反向过程,这意味着网络只需要训练一次就可以获得隐藏和恢复的所有网络参数。这与现有的方法有根本的区别,现有的方法分别处理隐藏和恢复过程。因此,我们的HiNet在恢复准确性,隐藏安全性和不可见性方面实现了最先进的性能。

二、可逆神经网络INN

1.INN简介

在这里插入图片描述

INN已经应用于:图像到图像的翻译任务;将条件INN引入到引导图像生成和着色中;使用INN来重新缩放图像,从而找到低分辨率和高分辨率图像之间的映射;通过INN对超分辨率进行归一化的基于流的方法,该方法试图直接解释超分辨率的不适定性,并学习预测各种照片逼真的高分辨率图像;最近,将INN应用于数字图像压缩任务。
本文是首次尝试在图像隐藏任务中探索可逆网络的工作。

2.为什么INN可以用于图像隐藏?

图像隐藏任务由两个相反的过程组成:隐藏过程的目的是将秘密图像X𝑠𝑒𝑐𝑟𝑒𝑡隐藏在载体图像X𝑐𝑜𝑣𝑒𝑟中,生成一个新的容器,称为隐写图像X𝑠𝑡𝑒𝑔𝑜;而恢复过程则试图从隐写图像中尽可能高保真地恢复秘密图像。在以往的研究中,隐藏和恢复过程是通过两个正向网络依次实现的,即一个用于隐藏,另一个用于恢复。
然而,为了达到完美的隐藏和恢复效果,这两个过程应该是完全可逆的。在此基础上,本文创新地将图像的隐藏和显示看作是同一INN的前向和后向过程,即它们是可逆的。因此,它们可以相互协调,同时提高隐藏和恢复性能。实验表明,采用INN架构的网络显著提高了最先进的图像隐藏性能。

三、网络结构

在这里插入图片描述
正反两个过程对应的公式表达:
在这里插入图片描述
在这里插入图片描述
总损失函数由三种不同的损失组成:保证隐藏性能的隐藏损失、保证恢复性能的恢复损失和增强隐藏安全性的新低频小波损失。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、实验

数据集采用DIV2K训练数据集来训练DeepMIH和DeepMIH-P。测试数据集包括分辨率为10241024的100幅图像的DIV2K、分辨率为256256的5000幅图像的COCO和分辨率为256*565的50000幅图像的ImageNet数据集。请注意,测试图像是使用中心裁剪策略裁剪的,以确保载体图像和秘密图像具有相同的分辨率。
评估指标用了四个指标来衡量覆盖/隐藏和秘密/恢复对的质量,包括峰值信噪比(PSNR)、结构相似性指数(SSIM)、均方根误差(RMSE)和平均绝对误差(MAE)。PSNR、SSIM的值越大,RMSE、MAE的值越小,表示图像质量越高。

在不同数据集上进行基准比较,最佳结果为红色,次佳结果为蓝色:
在这里插入图片描述
HiNet和4bit LSB、HiDDeN、Baluja和Weng等的隐写和恢复图像的视觉比较。上三行显示放大的stego(隐写)图像,而下三行显示不同方法的放大恢复图像:
在这里插入图片描述
隐写性能分析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、总结

本文提出了一种新的可逆隐藏分级网络,称为HiNet,以实现大容量、高安全性和高不可见性的图像隐藏。
HiNet将图像隐藏和恢复建模为可逆网络的前向和后向过程,这意味着它们共享相同的网络参数。因此,网络只需要训练一次,就可以获得图像隐藏和恢复过程的所有网络参数。在网络训练中,为了提高图像隐藏的安全性,提出了一种新的低频小波损失算法。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在易语言中发送HTTP请求可以使用Wininet.dll库来实现。下面是一个基本的示例代码: ``` // 导入Wininet.dll库 import "wininet.dll" // 定义常量 const INTERNET_OPEN_TYPE_DIRECT = 1 INTERNET_SERVICE_HTTP = 3 INTERNET_FLAG_RELOAD = 0x80000000 HTTP_VERSION = "HTTP/1.1" HTTP_ACCEPT_TYPE = "*/*" HTTP_USER_AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" HTTP_ACCEPT_LANGUAGE = "zh-cn" HTTP_ACCEPT_ENCODING = "gzip, deflate" HTTP_CONTENT_TYPE = "application/x-www-form-urlencoded" // 定义函数 func InternetOpenA(lpszAgent: string, dwAccessType: int, lpszProxy: string, lpszProxyBypass: string, dwFlags: int) as int32 from wininet.dll func InternetConnectA(hInet: int32, lpszServerName: string, nServerPort: int, lpszUserName: string, lpszPassword: string, dwService: int, dwFlags: int, dwContext: int) as int32 from wininet.dll func HttpOpenRequestA(hConnect: int32, lpszVerb: string, lpszObjectName: string, lpszVersion: string, lpszReferrer: string, lplpszAcceptTypes: int, dwFlags: int, dwContext: int) as int32 from wininet.dll func HttpSendRequestA(hRequest: int32, lpszHeaders: string, dwHeadersLength: int, lpOptional: int, dwOptionalLength: int) as int from wininet.dll func InternetReadFile(hFile: int32, lpBuffer: int, dwNumberOfBytesToRead: int, lpNumberOfBytesRead: int) as int from wininet.dll func InternetCloseHandle(hInet: int32) as int from wininet.dll // 发送HTTP请求 func SendHttpPostRequest(url: string, postData: string) as string // 初始化Wininet.dll var hInternet = InternetOpenA(HTTP_USER_AGENT, INTERNET_OPEN_TYPE_DIRECT, "", "", 0) if hInternet = 0 then return "" end if // 连接服务器 var hConnect = InternetConnectA(hInternet, url, 80, "", "", INTERNET_SERVICE_HTTP, 0, 0) if hConnect = 0 then InternetCloseHandle(hInternet) return "" end if // 打开请求 var hRequest = HttpOpenRequestA(hConnect, "POST", "/", HTTP_VERSION, "", 0, INTERNET_FLAG_RELOAD, 0) if hRequest = 0 then InternetCloseHandle(hConnect) InternetCloseHandle(hInternet) return "" end if // 添加请求头 var headers = "Content-Type: " + HTTP_CONTENT_TYPE + "\r\n" headers = headers + "Accept: " + HTTP_ACCEPT_TYPE + "\r\n" headers = headers + "Accept-Language: " + HTTP_ACCEPT_LANGUAGE + "\r\n" headers = headers + "Accept-Encoding: " + HTTP_ACCEPT_ENCODING + "\r\n" headers = headers + "User-Agent: " + HTTP_USER_AGENT + "\r\n" headers = headers + "Content-Length: " + str(len(postData)) + "\r\n\r\n" // 发送请求头和数据 var ret = HttpSendRequestA(hRequest, headers, len(headers), postData, len(postData)) if ret = 0 then InternetCloseHandle(hRequest) InternetCloseHandle(hConnect) InternetCloseHandle(hInternet) return "" end if // 读取响应数据 var buffer = string(1024 * 1024) var bytesRead = 0 var response = "" while InternetReadFile(hRequest, addr(buffer), len(buffer), addr(bytesRead)) > 0 and bytesRead > 0 response = response + left(buffer, bytesRead) end while // 关闭句柄 InternetCloseHandle(hRequest) InternetCloseHandle(hConnect) InternetCloseHandle(hInternet) // 返回响应数据 return response end func ``` 使用示例: ``` // 发送POST请求 var url = "http://www.example.com" var postData = "name=John&age=30" var response = SendHttpPostRequest(url, postData) print(response) ``` 注意:这是一个简单的示例,实际使用中还需要添加异常处理、编码转换等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值