深度学习之图像隐写去除(DDSP模型SteganographyRemoval)

深度学习之图像隐写去除(DDSP模型SteganographyRemoval)
自助投币洗衣机
⽂章⽬录
⼀前⾔
⼆论⽂内容
2.1 Abstract
  作者提出了⼀个去隐写的模型 DDSP (Deep Digitial Steganagraphy Purifier),其本质是⼀个GAN⽹络,该⽹络能够很好的去除图像中的隐写内容同时保证了图像的质量 (destory staganographic content without compromising the perceptual quality of the original image)。最后测试了模型迁移学习的能⼒。
2.2 Introduction
  点出隐写分析⾯临的局限性,对图像的⼤⼩、编码格式、隐写嵌⼊⽐特率等都要求,并且只可以检测传统的隐写术,但很难检测出先进的隐写术 (Hower, these methods struggle to detect advanced steganography algorithms) ,隐写术和隐写分析的关系是⽭和盾的关系,作为防守⽅的隐写分析,其耳包
发展肯定是滞后于隐写分析的。既然隐写分析效果不好,不能有效的检测并阻⽌含密信图⽚的传播,不如换⼀个思路,使⽤⼀个filter去消除图⽚中的隐写内容 ,但是传统的⽅法虽然去除了隐写信息,但却降低了图像的质量。
  接着提出了⾃⼰的DDSP隐写去除模型,该模型在实现图像隐写去除的基础上可以保证隐写去除后图像依旧保持较⾼的视觉质量。这⾥⼩编需要强调的是:现阶段已经有⼀些办法能很好的实现隐写去除,但是这些办法对图像本⾝的内容同样破坏很⼤,⽆法保证图像的视觉质量,因此本⽂中如何很好的保证图像视觉质量不退化更是我们需要重点关注的。
  之后简单介绍了⽂章内容框架。
1. 第⼆部分:回顾了在steganography purification 领域中之前的研究成功,并介绍了GAN⽹络的⼀些背景信息。
保健油2. 第三部分:介绍模型使⽤的数据集。
3. 第四部分:详细介绍了⾃⼰的模型 DDSP。
4. 第五部分: 讨论和分析了实验结果
5. 最后⼀部分: conclusion 和 feature works
2.3 Background
2.3.1 Prior Work
  去除隐写内容有两个不同的⽬标:⼀个是完全的去除隐秘信息,另⼀个是轻微的模糊隐秘信息,使其⽆法被使⽤,这样还可以避免图像质量的退化。接着介绍了三种采⽤深度学习的⽹络结构 PixelCNN++、Deep Steganography、ISGAN。剩下的⽅法⼤多是基于⾮机器学习的传统⽅法,⽐如使⽤数字滤波核 digital filters和⼩波变换 wavelet transforms,这些⽅法实现较为简单也不需要在数据集上训练,这些⽅法的主旨就是过滤掉图⽚的⾼频部分,但是这样会降低图像的质量。
2.3.2 Super Resolution GAN 超分辨率GAN
  使⽤GAN⽹络去除隐写信息同时保证图⽚质量,其灵感来⾃于:将GAN⽹络应⽤于单图像超分辨率(single imgae super resolution),其实就是GAN领域中⼤名⿍⿍的SRGAN⽹络,SRGAN⽹络模型论⽂的地址如下:。
2.4 Data
  使⽤的数据集是BOSSBase,将原PGM格式的图⽚转为JPEG格式的图⽚,JPEG压缩因⼦为95%,再将图⽚缩⼩到256 x 256⼤⼩。选⽤了四种隐写术:HUGO、HILL、S-UNIWARD、WOW,每⼀种
隐写算法按照 10%、 20%、30%、 40%、 50% 五种嵌⼊率。最终得到 4 x 5 x 10000 = 200,000 张含密图⽚,10,000 张原始图⽚。训练集和测试集按照75 : 25的⽐例分配。
2.5 Deep Digital Steganography Puricication (重头戏)
  DDSP和SRGAN的结构很类似,但是DDSP并没有使⽤⼤型的ResNet作为generator,⽽是使⽤了⼀个预训练好的⾃编码器(pretrained autoencoder ), 去除图像中的秘密信息。DDSP⽹络结构和其中Generator的结构如下:
  ⾃编码器⾸先⽤ MSE Loss funcation进⾏训练,之后⽤GAN⽹络框架进⾏微调 fine tuned,这样的微调是很有必要的,因为使⽤MSE 进⾏训练会导致⽣成的图⽚质量低于原始图⽚的图⽚质量。其实⾃编码器本⾝就可以实现图像隐写去除,只所以在⾃编码器的外⾯再套⼀个GAN⽹络框架,其⽬的就是通过对抗训练增加去隐写后图像的视觉质量。
2.5.1 Autoencoder Architecture
  ⾃编码器分为Encoder和Decoder,其中Encoder 的作⽤就是进⾏特征提取,Decoder作⽤是将encoder提取压缩后的图⽚缩放为原来的⼤⼩,同时去除其中的含密信息。我们先来看Encoder编码器的⽹络结构。
  其中Down-sample模块和ResBlock模块的⽹络结构如下:
  ⽂字叙述整个⽹络操作过程如下:
1. 输⼊含密图像,⾸先经过Min-Max Norm标准化,将每个pixel的值变换到 [0-1]之间。
2. 经历⼀个Conv2d 卷积 filters=64, kernel_size=9,后接ReLU激活函数。
3. 进⾏Down-sample模块 进⾏下采样,Down-sample模块结构如上图5,包含两层卷积和⼀个ReLU激活函数, 第⼀次卷积移动的步长
为2。这⾥采⽤卷积⽽不是池化进⾏下采样只要是处于对图像质量的考虑,下采样后的输出有两个流向。
4. 下采样的后的⼀个输出作为接下来 16个残差模块的输⼊,不细说。
5. 经历过残差模块后再经历⼀次Conv2d 和 BN,将BN后的结果和之前Down-sample后的另⼀个结果相加得到最后的Encoder输出。  接下来我们说说解码器Decoder的⽹络结构,其⽹络结构如下:
  其中Decoder将Encoder的输出作为输⼊,⾸先进⾏upsample,上采样的⽅法为 临近插⼊法 nearest interpolation with a factor of 2,这样得到的结果和原始encoder 输⼊的图⽚⼤⼩相同,之后经历 Conv2d、ReLU、Conv2d、Tanh 层, Tanh输⼊的结果在 [-1, 1]之间,之后通过 Tanh Denorm 将像素值还原到 [0, 255]之间即得到最终的输出,也就是去除秘密信息后的图像。
  这⾥的最后两层是Tanh和Tanh Denormalization,其作⽤是将每个像素点的值的范围重新变换为[0, 255],但是在代码复现的时候,这⼀部分出现了BUG,⼩编⼀时⽆法解决(还是太菜,pytorch还是不够了解),于是将最后两层替换为Sigmoid激活函数。Generator部分代码实现如下:
import torch
as nn
from.utils import ResBlock_Encoder, DownSample_Encoder, MinMax_Norm
class Encoder(nn.Module):
def__init__(self, in_channels=1, n_residual_blocks=16):
super(Encoder, self).__init__()
# encoder的第⼀层是Min-Max Normalization, 此处舍去在forward中实现
# 公式为: x = (x - x_min) / (x_max - x_min), sklearn.preprocess 模块实现
nn.Conv2d(in_channels, out_channels=64, kernel_size=9, stride=1, padding=4),
nn.ReLU(inplace=True),
)
self.down_sample_block = DownSample_Encoder(in_channels=64)
# 16个残差模块
res_blocks =[]
高放废液
for _ in range(n_residual_blocks):
res_blocks.append(ResBlock_Encoder(in_channels=64))
nn.Conv2d(64, out_channels=64, kernel_size=3, stride=1, padding=1),
nn.BatchNorm2d(64)
)
def forward(self, x):
# print('Encoder input shape: ', x.shape)  # [n, 1, 256, 256]
x = MinMax_Norm(x)
# print('encoder min_max_scale: ', x)
# print('encoder min_max_scale shape: ', x.shape)
x = v1(x)
down_sample = self.down_sample_block(x)
x = sidual_blocks(down_sample)
x = v2(x)
ret = x + down_sample
# print('Encoder output shape: ', ret.shape)  # [n, 64, 128, 128]
return ret
# model = Encoder(1, 16)
abaqus后处理
# print(model)
class Decoder(nn.Module):
def__init__(self, in_channels=64):
super(Decoder, self).__init__()
'''
self.block1 = nn.Sequential(
nn.Upsample(scale_factor=2),
nn.Conv2d(in_channels, out_channels=256, kernel_size=3, stride=1, padding=1),
nn.ReLU(),
nn.Conv2d(256, out_channels=1, kernel_size=9, stride=1, padding=4),
nn.Tanh(),
# 最后还需要将图⽚从[-1, 1] 转换成为 [0, 255], 在forward()中实现
# 计划先⽤minmax_scale将数据范围转换到[0, 1] 之后乘以255 转换为[0, 255]
)
'''
# 将上⾯的tanh()输出的值域[-1, 1]变成[0, 1] 出现了问题,故将⽂章使⽤的tanh()函数修改为sigmoid()函数        self.block2 = nn.Sequential(
nn.Upsample(scale_factor=2),
nn.Conv2d(in_channels, out_channels=256, kernel_size=3, stride=1, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(256, out_channels=1, kernel_size=9, stride=1, padding=4),
nn.Sigmoid(),
# 最后还需要将图⽚从[0, 1] 转换成为 [0, 255], 在forward()中实现
# 计划先⽤minmax_scale将数据范围转换到[0, 1] 之后乘以255 转换为[0, 255]
)
def forward(self, x):
# print('Decoder input shape: ', x.shape)  # [n, 64, 128, 128]
# ret = self.block1(x)
# ret = MinMax_Norm(ret, require_grad=True).mul(255.0).add(0.5).clamp(0, 255)
ret = self.block2(x)
ret = ret.mul(255.0).add(0.5).clamp(0,255)# 将sigmoid函数输出值域从[0, 1] -> [0, 255] # print('Encoder output shape: ', ret.shape)  # [n, 1, 256, 256]
return ret
class Generator(nn.Module):
def__init__(self, init_weights=True):
super(Generator, self).__init__()
self.decoder = Decoder(64)
if init_weights:
self._init_weights()
def forward(self, x):
破窗器encoder_output = der(x)
decoder_output = self.decoder(encoder_output)
return decoder_output
def_init_weights(self):
for m dules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
if m.bias is not None:
stant_(m.bias,0)
if isinstance(m, nn.BatchNorm2d):
stant_(m.weight,1)
stant_(m.bias,0)
if isinstance(m, nn.Linear):
al_(m.weight,0,0.01)
stant_(m.bias,0)
2.5.1 GAN Training
  和SRGAN⽹络结构很类似,我们使⽤预训练好的模型去初始化 Generator Network (就是我们之前的autoencoder)
,Descriminator 和 SRGAN的Descriminator 也很相似,只是Descriminator Blocks 的结构有⼀些变化。其⽹络结构如下:
  其中Discriminator Block模块的⽹络结构如下:
  Discriminator部分代码实现如下:

本文发布于:2024-09-21 21:51:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/294816.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:隐写   图像   去除   质量   模型   分析   实现   部分
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议