论文阅读 | HiDDeN网络架构

  • ECCV 2018 斯坦福-李飞飞团队


一、问题描述

受以下启发:

对抗性例子的发现:深度学习模型在图像识别任务中对微小的、难以察觉的输入扰动非常敏感,这些扰动可以导致模型错误分类图像。这一现象表明,神经网络可以在图像中编码信息,而这些信息对人类观察者来说是不可见的。

深度网络的表征能力:深度学习模型,尤其是卷积神经网络,已经证明在图像处理任务中非常有效,因为它们能够学习到复杂的图像特征。这种强大的特征提取能力可以用来开发更高级的数据隐藏技术。

二、解决方法

HiDDeN(Hiding Data with Deep Networks)方法的意义在于它提出了一种新颖的、基于深度学习的框架END,用于在数字图像中隐藏信息。这种方法在隐写术和数字水印领域具有重要意义。

2.1信息如何嵌入?

import torch
import torch.nn as nn
from options import HiDDenConfiguration
from model.conv_bn_relu import ConvBNReluclass Encoder(nn.Module):"""Inserts a watermark into an image."""def __init__(self, config: HiDDenConfiguration):super(Encoder, self).__init__()self.H = config.Hself.W = config.Wself.conv_channels = config.encoder_channelsself.num_blocks = config.encoder_blockslayers = [ConvBNRelu(3, self.conv_channels)]for _ in range(config.encoder_blocks-1):layer = ConvBNRelu(self.conv_channels, self.conv_channels)layers.append(layer)self.conv_layers = nn.Sequential(*layers)self.after_concat_layer = ConvBNRelu(self.conv_channels + 3 + config.message_length,self.conv_channels)self.final_layer = nn.Conv2d(self.conv_channels, 3, kernel_size=1)def forward(self, image, message):# First, add two dummy dimensions in the end of the message.# This is required for the .expand to work correctlyexpanded_message = message.unsqueeze(-1)expanded_message.unsqueeze_(-1)expanded_message = expanded_message.expand(-1,-1, self.H, self.W)encoded_image = self.conv_layers(image)# concatenate expanded message and imageconcat = torch.cat([expanded_message, encoded_image, image], dim=1)im_w = self.after_concat_layer(concat)im_w = self.final_layer(im_w)return im_w

2.2 噪声层怎么设计?

(1)噪声层类型

1)Identity Layer(身份层)
  • 功能:这是最基本的噪声层,它不改变编码图像 Ien​,即直接传递图像而不进行任何处理。
  • 应用:作为基准,用于比较其他噪声层的效果。
2) Dropout Layer(随机丢弃层)
  • 功能:随机将图像中的一部分像素置为零,这部分像素是从原始载体图像 Ico中保留的,其余像素则从编码图像 Ien中保留。
  • 控制参数:保留像素的比例 p。
3)Cropout Layer(裁剪失活层)
  • 功能:与 Dropout 类似,但以块的方式进行,随机选择图像的一部分(如一个方块区域)进行保留,其余部分用原始图像的相应部分替换。
  • 控制参数:保留区域的比例p。
4)Gaussian Layer(高斯模糊层)
  • 功能:使用高斯核对编码图像进行模糊处理。
  • 控制参数:高斯核的宽度 σ。
5)Crop Layer(裁剪层)
  • 功能:随机裁剪编码图像的一个区域,可能包含图像的部分内容。
  • 控制参数:裁剪后图像与原图像的大小比例 p。
6)JPEG Layer(JPEG压缩层)
  • 功能:模拟 JPEG 压缩对图像的影响。
  • 控制参数:JPEG 压缩的质量因子 Q。在JPEG压缩中,质量因子 Q 是一个重要的参数,它决定了图像的压缩比率和图像质量之间的平衡:
  • 高质量 Q:较低的压缩率,保留更多的图像细节,文件大小较大。
  • 低质量 Q:较高的压缩率,丢失更多的图像细节,文件大小较小。

(2)JPEG压缩模拟

JPEG 压缩通过执行离散余弦变换(DCT)将图像分解为 8x8 的频率组件网格,然后对这些频率组件进行量化。高频组件的量化更激进,即在压缩过程中丢失更多细节。

1)JPEG压缩原理

JPEG压缩通过以下步骤实现:

  • 离散余弦变换(DCT):将图像分割成8x8的块,并为每个块进行DCT变换,将空间域数据转换为频率域数据。
  • 量化:对DCT系数进行量化,高频部分的量化步长较大,导致高频信息丢失较多,这部分是压缩过程中的主要信息损失来源。

2)非可微分问题

量化步骤是非线性的,且不可微分,这意味着我们不能使用传统的梯度下降法来优化涉及JPEG压缩的网络。为了解决这个问题,论文中提出了两种可微分的近似方法:

①JPEG-Mask

目的:模拟JPEG压缩中的量化过程,通过保留低频DCT系数,将高频系数置零。

操作步骤

  1. 保留低频系数:低频DCT系数通常包含了图像的主要信息,如图像的整体结构和平滑区域。在JPEG-Mask操作中,这些系数被保留(不被置零),因为它们对图像的重建质量至关重要。

  2. 置零高频系数:高频DCT系数通常包含图像的细节信息,如边缘和纹理。在JPEG-Mask操作中,这些系数被置零,模拟了JPEG压缩中高频系数的丢失。这种操作有助于压缩图像,因为人眼对这些细节的敏感度较低。

效果:通过这种方式,图像的大致轮廓和平滑区域得以保留,而一些细微的特征可能会丢失。这有助于减小文件大小,同时对视觉质量的影响较小。

②JPEG-Drop

目的:通过随机丢弃高频DCT系数,模拟JPEG压缩中的量化不确定性。

操作步骤

  1. 随机丢弃:根据预定的概率模型,每个高频DCT系数有一定概率被置零。这种操作模拟了JPEG压缩中高频系数的量化丢失。

  2. 保留低频系数:与JPEG-Mask类似,JPEG-Drop操作通常也会保留低频系数,因为它们包含了图像的主要信息。

效果JPEG-Drop提供了一种更为灵活的模拟方式,因为它引入了随机性。这意味着不是所有的高频系数都会被丢弃,而是根据一定的概率进行。这可以更好地模拟真实世界中的JPEG压缩效果,其中不同图像的压缩结果可能会有所不同。

③留下的信息如何操作

JPEG-MaskJPEG-Drop操作之后,留下的信息(主要是低频系数)将用于图像的重建:

  1. 逆DCT变换:使用留下的DCT系数进行逆DCT变换,从频率域转换回空间域。

  2. 图像重建:重建的图像保留了主要的结构信息,但可能会丢失一些细节。这种权衡是JPEG压缩的关键,它允许在显著减小文件大小的同时保持可接受的图像质量。

  3. 训练深度学习模型:在模拟JPEG压缩的深度学习模型中,这些操作使得模型能够学习到如何在压缩和重建过程中保持图像的重要特征。

通过这两种方法,可以在深度学习模型中有效地模拟JPEG压缩的效果,从而训练出对JPEG压缩具有鲁棒性的模型。

2.3 信息如何提取?

import torch.nn as nn
from options import HiDDenConfiguration
from model.conv_bn_relu import ConvBNReluclass Decoder(nn.Module):def __init__(self, config: HiDDenConfiguration):super(Decoder, self).__init__()self.channels = config.decoder_channels# 创建包含7个Conv-BN-ReLU块的网络结构layers = [ConvBNRelu(3, self.channels)]for _ in range(config.decoder_blocks - 1):layers.append(ConvBNRelu(self.channels, self.channels))# 最后一个Conv-BN-ReLU块将通道数从self.channels转换为消息长度Llayers.append(ConvBNRelu(self.channels, config.message_length))# 添加全局平均池化层layers.append(nn.AdaptiveAvgPool2d(output_size=(1, 1)))self.layers = nn.Sequential(*layers)# 线性层将池化后的输出映射到消息空间self.linear = nn.Linear(config.message_length, config.message_length)def forward(self, image_with_wm):x = self.layers(image_with_wm)# 压缩维度以匹配线性层的输入要求x.squeeze_(3).squeeze_(2)x = self.linear(x)return x

2.4 损失函数设计

在训练过程中,模型通过最小化综合损失函数来优化编码器、解码器和鉴别器的参数。这包括:

  • 使用随机梯度下降(SGD)或其变体(如Adam优化器)来更新参数。
  • 通过计算损失函数的梯度并应用这些梯度来调整参数,以减少损失。

(1)消息失真损失:用于衡量解码后的消息与原始消息之间的差异。其目的是确保解码器能准确地从编码图像中恢复出原始消息。

(2)图像失真损失:用于衡量编码图像与原始载体图像之间的视觉差异。目的是使编码图像在视觉上与原始图像尽可能相似,以避免引起观察者的注意。

(3)对抗损失(损失函数使用了二元交叉熵损失(Binary Cross-Entropy Loss),它是分类问题中常用的损失函数,特别是当输出是一个概率值时。):对抗损失用于训练编码器以生成能够欺骗鉴别器的编码图像。鉴别器的目标是区分编码图像和原始载体图像,而编码器的目标是使鉴别器难以进行这种区分。

三、实验部分

数字水印技术无开放源代码的实现。作为基线,论文与Digimarc进行了比较,这是一个用于数字水印的闭源商业软件包。实验中将容量、保密性、鲁棒性作为评估标准。隐写术方面侧重于嵌入的容量与保密性,水印方面侧重鲁棒性。

为了有效检测隐写图像,隐写分析器通常需要一个训练过程,这个过程需要大量的标记数据,即已知含有隐藏信息的图像(载密图像)和不含有隐藏信息的图像(载体图像)。然而,在实际操作中,获取大量准确标记的载密图像是比较困难的,因为这些图像中隐藏的信息是未知的。

隐蔽性测试实验步骤:

1、未标记的测试数据集:ATS从一个包含未知是否含有隐藏信息的图像集合开始。

2、反复应用隐写算法:ATS对这些未标记的图像反复应用隐写算法,将随机生成的信息隐藏进去。

3、生成人工训练集:通过上述过程,ATS能够创建出一组新的图像,其中一半理论上含有隐藏信息(因为算法被应用了),另一半理论上没有(因为没有应用算法或信息被隐藏得当,使得算法检测不出来)。

4、训练监督分类器:使用这个人工生成的训练集,ATS训练出一个分类器,这个分类器的目标是学会区分哪些图像是载体图像,哪些是载密图像。

5、评估模型:最后,这个训练好的分类器被用来测试其在实际未知图像上的检测能力。

顶部:展示了Digimarc和HiDDeN模型在不同噪声层训练下,编码图像与封面图像之间的平均PSNR。 底部:展示了原始封面图像和使用Digimarc以及HiDDeN模型(经过Crop, Gaussian, 和Combined噪声层训练)编码的图像。 底部右侧:展示了一个使用组合噪声层训练但没有对抗性训练的模型生成的编码图像,显示了明显的伪影。

对比实验的实验流程:

(1)估算Digimarc的容量:首先估计Digimarc能处理的信息量。

(2)应用纠错代码:将HiDDeN的比特率与Digimarc的容量匹配,使用纠错代码来比较两者的性能。

(3)性能比较:研究者们将HiDDeN的比特准确率转换成解码成功率,并与Digimarc的解码成功率进行比较。

(4)性能评估:如果HiDDeN的比特准确率是95%或更高,就认为等同于Digimarc的成功解码;如果比特准确率是90%或更低,则认为是解码失败。

实验结果:在图中,研究者们展示了在不同噪声干扰和强度下HiDDeN模型的性能,并与Digimarc进行比较。图中展示了没有经过噪声处理训练的模型(蓝色)、专门针对特定噪声训练的模型(橙色)以及对所有噪声类型都训练过的综合模型(绿色)的性能。同时,还展示了Digimarc在256x256图像上的解码成功率(紫色)。

 四、后续更多的工作

这篇论文比较经典,对比实验少,具有一定的意义。后续研究者开展了很多工作。END、MBRS、De-END、FIN.....

 付章杰, 王帆, 孙星明, 等. 基于深度学习的图像隐写方法研究[J]. 计算机学报, 2020, 43(9): 1656-1672.

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

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

相关文章

Python或R时偏移算法实现

🎯要点 计算单变量或多变量时序距离,使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法,绘制步进模式的图形表示。其他语言包算法实现。 &…

IP协议讲解

IP协议 IP协议的本质:提供一种能力,将数据跨网络从A主机传输到B主机 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因…

【数据结构初阶】排序算法(下)冒泡排序与归并排序

文章目录 4. 交换排序4. 1 冒泡排序 5. 归并排序6. 非比较排序6. 1 计数排序 5. 排序性能分析6. 排序算法复杂度及稳定度分析 4. 交换排序 交换排序基本思想: 所谓交换**,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置**。 交换排序的特点是…

归并排序【C语言版-笔记】

目录 一、概念二、排序流程理解三、代码实现3.1主调函数3.2 merge函数 四、性能分析 一、概念 归并是一种算法思想,是将两个或两个一上的有序表合并成一个长度较大的有序表。若一开始无序表中有n个元素,可以把n个元素看作n个有序表,把它们两…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…

java中的强软弱虚

在java中对象的引用有强、软、弱、虚四种,这些引用级别的区别主要体现在对象的生命周期、回收时机的不同。 文章目录 准备工作1. 设置内存2. 内存检测 强引用软引用弱引用虚引用 准备工作 1. 设置内存 为方便调试,将内存设置为16MB 依次点击菜单栏的R…

初识算法 · 双指针(1)

目录 前言: 双指针算法 题目一: ​编辑 题目二: 前言: 本文作为算法部分的第一篇文章,自然是少不了简单叭叭两句,对于算法部分,多刷是少不了,我们刷题从暴力过度到算法解法,自…

【Linux】进程概念-2

文章目录 1.环境变量1.1 基本概念1.2 常见环境变量1.3 查看环境变量方法1.4 测试PATH1.5 测试HOME1.6 和环境变量相关的命令1.7 环境变量的组织方式1.8 通过代码如何获取环境变量1.9 通过系统调用获取或设置环境变量1.10 环境变量通常是具有全局属性的1.11 实验 2. 程序地址空间…

安全中心 (SOC) 与 网络运营中心 (NOC)

NOC 和 SOC 之间的区别 网络运营中心 (NOC) 负责维护公司计算机系统的技术基础设施,而安全运营中心 (SOC) 则负责保护组织免受网络威胁。 NOC 专注于防止自然灾害、停电和互联网中断等自然原因造成的网络干扰,而 SOC 则从事监控、管理和保护。 NOC 提…

微信小程序 图片的上传

错误示范 /*从相册中选择文件 微信小程序*/chooseImage(){wx.chooseMedia({count: 9,mediaType: [image],sourceType: [album],success(res) {wx.request({url:"发送的端口占位符",data:res.tempFiles[0].tempFilePath,method:POST,success(res){//请求成功后应该返…

Java在用增强for循环遍历集合时删除元素,抛出java.util.ConcurrentModificationException异常

文章目录 0. 前言1. 问题产生的背景2. Java中增强for循环的底层原理3. 为什么增强for循环不支持在遍历集合时删除元素3.1 问题排查3.2 modCount 变量的来源3.3 expectedModCount 变量的来源3.4 导致modCount变量和expectedModCount不相等的原因3.5 为什么用迭代器遍历元素时删除…

【Nacos架构 原理】内核设计之Nacos通信通道

文章目录 Nacos通信通道 (长链接)现状背景场景分析配置服务 长链接核心诉求功能性诉求负载均衡连接生命周期 Nacos通信通道 (长链接) 现状背景 Nacos 1.X 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的…

仪器数码管数字识别系统源码分享

仪器数码管数字识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Glide基本用法及With方法源码解析

文章目录 引入优点 使用步骤导入依赖权限使用 其他用法占位符错误图片后备回调符圆角过渡动画大小调整gif缩略图 使用RequestOptions缓存机制设置缓存策略清理缓存 使用集成库OkHttpVolley with源码解析getRetrieverGlide.getinitializeGlide getRequestManagerRetriever Reque…

【Spine】引入PhotoshopToSpine脚本

引入 右键Photoshop图标,选择属性 打开文件所在位置 找到目录下的\Presets\Scripts文件夹。 找到Spine目录下的\scripts\photoshop文件夹下的PhotoshopToSpine.jsx 复制它,丢到Photoshop刚才找的那个目录下。 使用 打开.psd文件,检查不要…

ubuntu 安装harbor

#安装包 wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz.asc#导入签名公钥 gpg --keyserver hkps://ke…

文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题

一、在图 24-2上运行Dijkstra算法,第一次使用结点 s s s作为源结点,第二次使用结点 z z z作为源结点。以类似于图 24-6 的风格,给出每次while循环后的 d d d值和 π π π值,以及集合 S S S中的所有结点。如果要写代码&#xff0c…

计算机毕业设计Spark+PyTorch股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

《SparkPyTorch股票预测系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和全球金融市场的日益繁荣,股票投资已成为广大投资者的重要选择之一。然而,股票市场的复杂性和不确定性使得投资者在做出投资决策时面临巨大的挑战。传统的股票分析方…

Python空间地表联动贝叶斯地震风险计算模型

🎯要点 使用贝叶斯推断模型兼顾路径和场地效应,量化传统地理统计曲线拟合技术。使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型模型使用欧几里得距离度量、角距离度量和土壤差异性度量确定贝叶斯先验分布和后验分布参数&#xff…

CTMO时代下的营销新力量:2+1链动模式AI智能名片商城小程序

在当今这个瞬息万变的商业世界里,营销领域正经历着一场深刻的变革。传统的CMO岗位似乎在时代的浪潮中逐渐失去了它的光芒,CTMO正在悄然取代传统CMO的岗位。 随着营销丛林现象的出现,企业面临着前所未有的挑战。许多企业发现,那些传…