0
点赞
收藏
分享

微信扫一扫

InnoDB索引结构

转角一扇门 2024-09-29 阅读 37
  • 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 ConvBNRelu


class Encoder(nn.Module):
    """
    Inserts a watermark into an image.
    """
    def __init__(self, config: HiDDenConfiguration):
        super(Encoder, self).__init__()
        self.H = config.H
        self.W = config.W
        self.conv_channels = config.encoder_channels
        self.num_blocks = config.encoder_blocks

        layers = [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 correctly
        expanded_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 image
        concat = 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)噪声层类型

(2)JPEG压缩模拟

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

1)JPEG压缩原理

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

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

2)非可微分问题

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

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

2.3 信息如何提取?

import torch.nn as nn
from options import HiDDenConfiguration
from model.conv_bn_relu import ConvBNRelu


class 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转换为消息长度L
        layers.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进行了比较,这是一个用于数字水印的闭源商业软件包。实验中将容量、保密性、鲁棒性作为评估标准。隐写术方面侧重于嵌入的容量与保密性,水印方面侧重鲁棒性。

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

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

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

 四、后续更多的工作

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

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

举报

相关推荐

0 条评论