GAN网络清晰化游戏视频

一. 研究背景

为了能够流畅运行游戏,我们除了在视频流上面进行编码,也可以通过压缩画面的大小,以1/4或者1/8的画质进行传输。

在客户端使用超分辨率重建技术得到清晰化的画面。

模型解释:从上到下分别为生成器和判别器,生成器通过Resnet Block块和Deconv(转置卷积)来获得对应的高分辨率图像。

判别器通过输入清晰图像和生成图像,通过卷积层+Leaky ReLU+BN来提取图像特征,并通过全连接层+Leaky ReLU激活函数,全连接层+sigmoid函数来获取输出,通过sigmoid层的输出来判别是不是真实的。通过生成器与判别器的对抗训练得到一个清晰化的超分辨率结果。

效果图如下所示:

二 .项目难点

项目难点在于不同于以前的超分任务,游戏图片经过下采样即在文字区域和一些边缘表现出失真。与上采样的振铃模糊累加,项目难度较大,而在一些文字区域不能精细还原势必影响游戏体验。由于GAN网络的一些特点,在实际应用中也会出现各式各样的问题,需要针对应用场景对GAN网络进行调整。

但是正如很多GAN网络的通性,在反卷积过程中会出现严重的振铃模糊。

其中比较典型的有一些技巧,比如卷积核大小能够被步长整除等(抗混叠),插值+卷积代替转置卷积等操作。此外我们还可以参考图像分割算法对网络模型进行优化:

1.空洞卷积

没有下采样过程,而且能增大感受野,但是参数多,计算量大。

2.

U-net结构,可以将未产生混叠失真的图片直接copy到失真之后的特征图。

在取得较好复原效果之后,我们致力于网络裁剪与加速。

我们可以保持GAN的整体结构,因为在实际应用中只需用到生成器,我们采用参数更少的MobileNet、ShuffleNet结构、ESPCN框架代替原来的生成器能做到减少网络参数。同时有了生成器的模型,我们可以基于TensorRT在数据中心、GPU甚至嵌入式平台上面部署应用,TensorRT有网络结构合并与压缩功能,并能执行归一化与转换操作,能按照制定精度优化矩阵计算,从而减少延迟,提高吞吐量与数据,

 

三 .项目总结

1.本地化FSRCNN、ESPCN、VDSR、DRCN、SRGAN等图像清晰化项目,最终选定SRGAN作为优化目标,在原来的网络框架上引入了Unet、RefineNet、插值+卷积代替转置卷积等操作,进一步提升了超分辨率重建的功能。

2.针对StarCraft II 游戏视频制作了1080P降低9倍和4倍的数据集,通过训练达到清晰化的效果。超分后的图像与1080P图像之间:平均PSNR达到27.25db,平均SSIM达到0.8447.
3.对生成网络进行修改,将ESPCN与SRGAN进行结合,替换SRGAN的生成模型未ESPCN的PixelShuffler模块进一步提高了实时性。
4.进一步探索与VESPCN的结合,通过时间冗余性来提高压缩的效率与超分辨率重建的性能。

效果图:

 

频谱归一化是一种用于改善生成对抗网络GAN)性能的技术。它通过减少权重矩阵的分层频谱范数来提高网络的Lipschitzness,从而简化训练并提高鲁棒性。频谱归一化的一种常见方法是使用谱归一化(spectral normalization)。 谱归一化通过对权重矩阵的每一行进行归一化来实现。具体而言,它通过计算权重矩阵的奇异值分解(SVD),并将奇异值除以其最大值来归一化每一行的权重。这样可以确保权重矩阵的每一行都具有相同的范数,从而提高网络的稳定性和收敛性。 下面是一个使用谱归一化的GAN网络的示例代码: ```python import torch import torch.nn as nn # 定义生成器网络 class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.fc = nn.Linear(100, 256) self.relu = nn.ReLU() self.fc2 = nn.Linear(256, 784) self.tanh = nn.Tanh() def forward(self, x): x = self.fc(x) x = self.relu(x) x = self.fc2(x) x = self.tanh(x) return x # 定义判别器网络 class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() self.fc = nn.Linear(784, 256) self.relu = nn.ReLU() self.fc2 = nn.Linear(256, 1) self.sigmoid = nn.Sigmoid() def forward(self, x): x = self.fc(x) x = self.relu(x) x = self.fc2(x) x = self.sigmoid(x) return x # 对生成器和判别器的权重进行谱归一化 generator = Generator() discriminator = Discriminator() generator = nn.utils.spectral_norm(generator) discriminator = nn.utils.spectral_norm(discriminator) # 训练GAN网络... ``` 这是一个简单的示例,展示了如何在生成器和判别器网络中使用谱归一化。通过对权重进行谱归一化,可以提高GAN网络的稳定性和生成样本的质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值