Perceptual losses for real-time style transfer and super-resolution(by_xiao jian)

Perceptual losses for real-time style transfer and super-resolution,2016 ECCV

https://cs.stanford.edu/people/jcjohns/eccv16/

官方源码Torch:https://github.com/jcjohnson/fast-neural-style

其他程序Tensorflow:https://github.com/lengstrom/fast-style-transfer,实现细节略有不同

这篇主要讲一下感知损失在图像变换问题(image transformation),如风格迁移和单幅图像超分辨率重建中的应用。感知损失是由预训练模型提取的高层图像特征之间的差异。

写在前面:

  2020年注定是不平凡的一年,希望能早日战胜病毒,早日返校继续科研。(其实是想出去玩,卷家里要疯啦!!!)

1.介绍:

  很多传统问题都可以归结为图像变换问题,解决该问题的一种方法是以有监督的方式训练一个前馈卷积神经网络,用像素损失度量输出与真实图像间的不同,在测试时很有效(速度快),但像素损失并没有捕捉两者间的感知属性。与此同时的一些工作表明,可以用感知损失生成高质量的图像,已经应用到多个领域,但是推理时速度慢(基于优化的方法)。
  也就是说像素损失在测试时有速度有效,感知损失在图像质量上有有效。本文即结合两者的优点,预训练的损失网络loss network提取图像高层特征计算感知损失函数,该损失训练变换网络transformation network执行图像变换任务。

2.方法:

  本文网络结构如下图所示,系统包含两部分:图像变换网络$f_{w}$和损失网络$\phi$, $\phi$在训练变换网络时是固定参数的。先前工作认为:针对图像分类的预训练CNN网络已经学会了对感知和语义信息进行编码,而这正是本文损失网络所要度量的。

  损失网络$\phi$定义特征重建损失$l_{feat}^{\phi}$和风格重建损失$l_{style}^\phi$,度量图像间内容和风格差异。对于每个输入图像$x$都有一个内容目标$y_{c}$和风格目标$y_{s}$。在风格转换中$x=y_{c}$。在超分中没有风格目标,输入图像为低分辨率图像,内容目标为真实的高分辨率图像。

2.1图像变换网络

  图像变换网络的结构大致遵循DCGAN提出的指导意见。没有使用任何池化层,而是使用步进(反)卷积执行下采样和上采样(程序中即是通过设置步长,同时进行卷积操作和特征图空间尺寸的变化)。网络主体使用文献44的结构,包含5个残差块。输出层用tanh使输出图像像素值为[0,255]。除第一层和最后一层使用9×9的卷积核,其他卷积层使用3×3。

  进行风格迁移的网络结构如下图。残差块中尺寸减少是因为残差块中的卷积去掉了零填充,恒定连接的时候以输入图谱的中心进行裁剪到相同尺寸。使用5个残差块,尺度减少了2×2×5=20,所以需要在网络输入时进行40×40的零填充,以使输入和输出尺寸都是256。图中的conv后接BN和ReLU。

  进行超分的的网络结构如下图。

  输入和输出。对于风格迁移3×256×256,超分输出为3×288×288,输入为$f$倍缩小。变换网络为全卷积,测试时可以为任意大小。

  下采样和上采样

  对于风格迁移,变换网络先使用两个步长为2的卷积进行下采样输入图像,然后经过几个残差块,再经过两个步长为1/2的步进卷积。使用先进行下采样再上采样结构的好处:1.计算方面,对于相同的计算代价,下采样后可以使用更大的网络(更多的卷积核)。例如,输入图像为C×H×W,一个核为3的卷积核就应该是C×3×3,其与输入图像进行一次计算时需要9C乘法和9C加法(对应通道数进行计算,每个通道上的滤波器上对应元素相乘再相加,即9次乘法,8次加法,C个通道即再乘以C。然后通道间相加,再加偏置,即又有C次加法)。为了得到同样大小的特征图谱(进行填充),即需要用上述过程计算HW个数,此时就9CHW次乘法和9CHW次加法。又有这样的卷积核C个,即最终需要9C2HW次乘法和9C2HW加法。而参数量为9C2,这里是输入和输出通道数均为C2.有效感受野大小,高质量的风格转换需要以连贯的方式更改图像的大部分,这就需要输出中的每个像素对于输入图像中更大的感受野。没有下采样,每个卷积操作以2倍的大小增加感受野范围,使用D因子的下采样时就以2D倍增加感受野。使用相同的层数可以获得更大的感受野。

  对于超分,假设上采样率是f,即尺寸扩大f倍,变换网络使用几个残差块,然后接log2f个步长为1/2的步进卷积(具体程序中应该是反卷积)。与文献1使用双线性插值上采样低分输入图像在送给网络不同。使用步进卷积的好处是可以和网络的其他部分联合训练,而使用固定的上采样函数就没有这样的作用。

  残差连接。本文方法所使用的残差块如下,去掉了resnet v1中加和后的ReLU激活。

2.2感知损失函数

  损失网络$\phi$是在ImageNet上预训练的VGG16。

  特征重建损失。$\phi_{j}(x)$表示损失网络第j层的激活,如果j是卷积层,那么$\phi_{j}(x)$是形状为Cj×Hj×Wj的特征图谱,特征重建损失为特征表示间的欧式距离:$l_{feat}^{\phi,j}(\hat y,y)=$ $\frac {1}{C_{j}H_{j}W_{j}}$ $\Vert \phi_{j}(\hat y)-\phi_{j}(y) \Vert _{2}^{2}$

  如下图,实验发现使用浅层的特征构造特征重建损失往往会产生于目标相似的图像。当使用更高层特征进行重建时,图像内容和整体空间结构得以保留,但颜色、纹理和精确形状却未被保留。使用特征重建损失可以是生成图像与目标感知上相似,但不必要求完全匹配。

  风格重建损失。当内容出现偏差时特征重建损失进行惩罚,当样式如颜色、纹理和图案出现不同时,使用风格重建损失,格拉姆矩阵可以计算两两特征之间的相关性,所有它可以把握图像的大体风格。定义一个大小为Cj×Cj的格拉姆矩阵$G_j^\phi(x)$,其中每个原始值由如下公式给出:

$G_{j}^{\phi}(x)_{c,{c‘}}=$ $\frac {1}{C_{j}H_{j}W_{j}}$ $\sum_{h=1}^{H_j} \sum_{w=1}^{W_j}\phi_j(x)_{h,w,c}\phi_j(x)_{h,w,{c‘}}$

如果将特征图谱$\phi_j(x)$视为一个C维的向量,其中每个元素是Hj×Wj中每个值组成的一个行向量,即将$\phi_j(x)$转换为一个Cj×HjWj的二维矩阵$\psi$,再计算与其自身转置就内积,即为格拉姆矩阵:$G_j^\phi(x)=\psi\psi^T/C_jH_jW_j$。

  风格重建损失由输出和目标图像格拉姆矩阵差异的F范数的平方表示,如下式$l_{style}^{\phi,j}(\hat y,y)=$ $\Vert G_j^\phi(\hat y)-G_j^\phi(y) \Vert _{F}^{2}$ 。即使两者的尺寸不一样,也可以计算,因为格拉姆矩阵的维度至于通道数相关。

  如下图,使用样式重建损失生成的图像保留了目标图像的样式特点,但是没有保留空间结构。利用越高层的特征构造样式损失,与目标图像的结构变化就越大。最终样式损失由每一层的损失之和组成。

参考文献:

[1] Dong, C., Loy, C.C., He, K., Tang, X.: Image super-resolution using deep convolutional networks. (2015)

[44] Gross, S., Wilber, M.: Training and investigating residual nets. http://torch.ch/blog/2016/02/04/resnets.html (2016)

原文地址:https://www.cnblogs.com/lab210/p/12386320.html

时间: 2024-11-08 23:58:05

Perceptual losses for real-time style transfer and super-resolution(by_xiao jian)的相关文章

谈谈图像的style transfer(二)

总说 主要从几个方面来进行说明吧 - 加快transfer的速度 - 让transfer的效果看起来更加visual-pleasing - 其他的一些方面 - 用GAN来做 加快style stransfer 谈谈图像的Style Transfer(一) 这里写了 Neural style以及fast neural style. 在超越fast style transfer--任意风格图和内容图0.1秒出结果已经可以将转换做到实时.这篇的一个主要的问题是耗费的大部分时间是在提取隐藏层的patch

图像风格转换(Image style transfer)

图像风格转换是最近新兴起的一种基于深度学习的技术,它的出现一方面是占了卷积神经网络的天时,卷积神经网络所带来的对图像特征的高层特征的抽取使得风格和内容的分离成为了可能.另一方面则可能是作者的灵感,内容的表示是卷积神经网络所擅长,但风格却不是,如何保持内容而转换风格则是本文所要讲述的. 本篇属于论文阅读笔记系列.论文即[1]. 引入 风格转换属于纹理转换问题,纹理转换问题在之前采用的是一些非参方法,通过一些专有的固定的方法来渲染. 传统的方法的问题在于只能提取底层特征而非高层抽象特征.随着CNN的

风格迁移(2)-Fast Style Transfer

X为输入图片 fw 风格迁移的网络 yc就是X ys是风格后的图片 y帽为输入图片X经过fw 风格迁移的网络生成的图片 y帽在内容上与yc相类似,在风格上与ys相类似. Fast Style Transfer的训练步骤如下: 1 输入一张图片x到fw中得到结果y帽 2 将y帽与yc输入到loss network(VGG-16)中,计算它的relu3_3的输出,并计算它们的均方误差作为content loss 3 将y帽与ys输入到loss network(VGG-16)中,计算它的relu1_2

CS231n assignment3 Q4 Style Transfer

"Image Style Transfer Using Convolutional Neural Networks" (Gatys et al., CVPR 2015). 复现这一篇论文中的代码 loss由三部分组成,内容loss,风格loss,正则化loss,其中风格loss使用gram矩阵. Content loss def content_loss(content_weight, content_current, content_original): ""&q

OpenCv dnn模块扩展研究(1)--style transfer

一.opencv的示例模型文件 使用Torch模型[OpenCV对各种模型兼容并包,起到胶水作用], 下载地址: fast_neural_style_eccv16_starry_night.t7 http://cs.stanford.edu/people/jcjohns/fast-neural-style/models/eccv16/starry_night.t7 和 fast_neural_style_instance_norm_feathers.t7 http://cs.stanford.e

Neural Style Transfer

风格转移 这几天看了一篇风格转移的论文,这里大致介绍下论文的内容,并且推到下论文中出现的公式. 基本思想 有两张图片,我们关注一张图片的内容(Content)记为C,一张图片的风格(Style)记为S,想要生成一张图片包含C的内容和S的风格,记为G. 那么如何获取图片的C和S那?论文使用训练好的VGG net解决这一问题. 文中使用VGG net的中间层来表示C:对于一张input_image,中间某一输出层shape为$heighttimes width times channel$,将其re

(Android Studio)ActionBar's Theme/Style [ActionBar主题风格修改]

默认theme代码如下: 运行结果: 视觉效果:ActionBar为Dark,其余文本为Light. 将theme改为Light: 运行结果: 视觉效果:ActionBar和文本都为Light. (Android Studio)ActionBar's Theme/Style [ActionBar主题风格修改]

第5章分布式系统模式 Data Transfer Object(数据传输对象)

正在设计一个分布式应用程序,为了满足单个客户端请求,您发现自己对一个远程接口发出了多个调用,而这些调用所增加的响应时间超出了可接受的程度. 影响因素 在与远程对象通信时,请考虑下列需要权衡的因素: 远程调用(那些必须跨越网络的调用)速度缓慢.虽然许多远程调用框架可以隐藏进行远程调用的复杂性,但是它们不能消除发生通信所需的步骤.例如,必须先找到 远程对象位置,而且建立与远程计算机的连接,然后才能将数据串行化为字节流,然后可能进行加密,最后才能将其传输到远程计算机. 在 考虑网络性能时,必须同时考虑

IDEA学习系列之剖析IDEA里的Code Style(适合各种语言)(不断更新)(图文详解)

不多说,直接上干货! File  -> Settings ->  Editor  ->   Code Style   (1)HOCON 分为: Tabs  and Indents . Spaces . Wrapping and Braces 和  Blank Lines (2)Scala 分为:Tabs and Indents.Spaces.Wrapping and Braces.Blank Lines.ScalaDoc.Imports.Multi-line strings.Type A