Perceptual Losses for Real-Time Style Transfer and Super-Resolution理解

引入
最近新出的图像风格转换算法,虽然效果好,但对于每一张要生成的图片,都需要初始化,然后保持CNN的参数不变,反向传播更新图像,得到最后的结果。性能问题堪忧。

但是图像风格转换算法的成功,在生成图像领域,产生了一个非常重要的idea,那就是可以将卷积神经网络提取出的feature,作为目标函数的一部分,通过比较待生成的图片经过CNN的feature值与目标图片经过CNN的feature值,使得待生成的图片与目标图片在语义上更加相似(相对于Pixel级别的损失函数)。

图像风格转换算法将图片生成以生成的方式进行处理,如风格转换,是从一张噪音图(相当于白板)中得到一张结果图,具有图片A的内容和图片B的风格。而Perceptual Losses则是将生成问题看做是变换问题。即生成图像是从内容图中变化得到。

图像风格转换是针对待生成的图像进行求导,CNN的反向传播由于参数众多,是非常慢的,同样利用卷积神经网络的feature产生的loss,训练了一个神经网络,将内容图片输入进去,可以直接输出转换风格后的图像。而将低分辨率的图像输入进去,可以得到高分辨率的图像。因为只进行一次网络的前向计算,速度非常快,可以达到实时的效果。
架构
下面这个网络图是论文的精华所在。图中将网络分为Transform网络和Loss网络两种,在使用中,Transform网络用来对图像进行转换,它的参数是变化的,而Loss网络,则保持参数不变,Transform的结果图,风格图和内容图都通过Loss Net得到每一层的feature激活值,并以之进行Loss计算。

在这里插入图片描述
在风格转换上,输入x=yc是内容图片。而在图片超分辨上,x是低分辨率图片,内容图片是高分辨率图片,风格图片未使用。
网络细节
1、不使用pooling层,而是使用strided和fractionally strided卷积来做downsampling和upsampling,
2、使用了五个residual blocks
3、除了输出层之外的所有的非residual blocks后面都跟着spatial batch normalization和ReLU的非线性激活函数。
4、输出层使用一个scaled tanh来保证输出值在[0, 255]内。
5、第一个和最后一个卷积层使用9×9的核,其他卷积层使用3×3的核。
详细的网络参数如下:
图像变换网络:
1)进行风格迁移的网络
在这里插入图片描述
2)超分辨图像的网络(超分4倍和8倍)
在这里插入图片描述
使用的残差结构:
在这里插入图片描述
输入输出
对于风格转换来说,输入和输出的大小都是256×256×3。
对于图片清晰化来说,输出是288×288×3,而输入是288/f×288/f×3,f是缩放比例,因为Transform Net是全卷积的,所以可以支持任意的尺寸。

Downsampling and Upsampling
对于图像超分辨来说,当upsampling factor是f的时候,使用后面接着log2f(log 2为底,f的对数)个stride为1/2卷积层的residual blocks.
fractionally-strided卷积允许网络自己学习一个upsampling函数出来。
对于风格转换来说,使用2个stride=2的卷积层来做downsample,每个卷积层后面跟着若干个residual blocks。然后跟着两个stride=1/2的卷积层来做upsample。虽然输入和输出相同,但是这样有两个优点:
1、提高性能,减少了参数
2、大的感受野,风格转换会导致物体变形,因而,结果图像中的每个像素对应着的初始图像中的感受野越大越好,这样能捕获更多的上下文信息。

Residual Connections
残差连接可以帮助网络学习到identify function,而生成模型也要求结果图像和输入图像共享某些结构(某些结构是相同的,拿超分辨来说,输出的高分辨图像和输入的低分辨图像,结构上几乎是一样的),因而,残差连接对生成模型正好对应得上。

损失函数
损失网络使用在ImageNet上训练好的VGG net,使用φ来表示损失网络。
Feature Reconstruction Loss
在这里插入图片描述
其中,j表示网络的第j层,CjHjWj表示第j层的feature_map的size
使用不同层的重建效果如下(超分辨):
在这里插入图片描述
Style Reconstruction Loss
对于风格重建的损失函数,首先要先计算Gram矩阵
在这里插入图片描述
产生的feature_map的大小为CjHjWj,可以看成是Cj维的特征(原文是这样说明的,但是还不是太明白,有明白的朋友还请告知,我个人理解的是两个特征图之间各个元素对应相乘求和再取均值),这些特征两两之间的内积的计算方式如上。

在这里插入图片描述
两张图片(一个是生成的,一个是GT),在loss网络的每一层都求出Gram矩阵,然后对应层之间计算欧式距离(如上图所示公式),最后将不同层的欧氏距离相加,得到最后的风格损失。

不同层的风格重建效果如下:
在这里插入图片描述
Simple Loss Function
1、Pixel Loss,像素级的欧氏距离。
2、Total Variation Regularization,是之前feature inversion和super resolution工作中使用的损失。
Loss对比
在这里插入图片描述
在图像风格转换任务上,针对不同分辨率的图像,Loss值在Perceptual Loss(ours)和图像风格转换([10])以及内容图片上的对比。可以看到,使用Perceptual Loss相当于原始算法迭代50到100次。

而就时间来看:
在这里插入图片描述
可以提升几百倍,在GPU上0.015s可以达到相当的效果,在CPU上更具实用性。

参考
https://blog.csdn.net/stdcoutzyx/article/details/54025243

Real-ESRGAN是一种超分辨率网络,全称为Enhanced Super-Resolution Generative Adversarial Networks。该网络通过训练以PSNR为导向的Real-ESRNet模型,然后以Real-ESRNet的网络参数进行初始化,同时使用L1 loss、perceptual loss和GAN loss作为损失函数来训练最终的Real-ESRGAN网络。 Real-ESRGAN被用作一种图像分辨率修复工具,可以提升照片和动画图片的分辨率。它内置了一个预训练模型,能够将分辨率提高到原来的4倍。虽然Real-ESRGAN是一个命令行工具,但使用起来非常简单,而且效果也非常好。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Real-ESRGAN超分辨网络](https://blog.csdn.net/weixin_46515047/article/details/119829454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Real-ESRGAN 深度学习超分辨率重建工具](https://download.csdn.net/download/hq10086/79831404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值