风格迁移:一文梳理经典方法发展脉络及原理

  • 1.Image Style Transfer Using Convolutional Neural Networks:Gram矩阵(CVPR2016)
  • 1.1.概述
  • 1.2.方法
  • 2.Deep Photo Style Transfer(CVPR2017)
  • 2.1.概述
  • 2.2.方法
  • 3.Universal Style Transfer via Feature Transform:WCT(whitening and coloring)(NIPS2017)
  • 3.1.概述
  • 3.2.方法
  • 4.A Closed-form Solution to Photorealistic Image Stylization:PhotoWCT(ECCV2018)
  • 4.1.概述
  • 4.2.方法
  • 5.Photorealistic Style Transfer via Wavelet Transforms:WCT^2^(ICCV2019)
  • 5.1.概述
  • 方法


1.Image Style Transfer Using Convolutional Neural Networks:Gram矩阵(CVPR2016)

原文下载译文参考:【读点论文】Image Style Transfer Using Convolutional Neural Networks

1.1.概述

本文展示了高性能卷积神经网络学习的通用特征表示如何用于独立处理和操作自然图像的内容和风格。本文介绍了一种艺术风格的神经算法,从概念上讲,它是一种纹理传递算法,通过来自最新卷积神经网络的特征表示来约束纹理合成方法。
由于纹理模型也基于深度图像表示,风格转移方法优雅地简化为单个神经网络内的优化问题。通过执行前图像搜索以匹配示例图像的特征表示来生成新图像。本文的风格迁移算法结合了基于卷积神经网络的参数纹理模型和反转其图像表示的方法。

1.2.方法

  • Content representation

通常,网络中的每一层都定义了一个非线性滤波器组,其复杂度随着该层在网络中的位置而增加。因此,给定的输入图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络,通过对该图像的滤波器响应而在卷积神经网络的每一层中被编码。具有风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_02个不同过滤器的图层具有风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_02个大小为风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_04 的特征图,其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_04是特征图的高度乘以宽度。第L层中的响应可以存储在矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_06中,其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_07是层l中位置j处的第i个滤波器的激活。
为了可视化在层级的不同层编码的图像信息,可以对白噪声图像执行梯度下降,以找到与原始图像的特征响应相匹配的另一个图像。设风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_08风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络是原始图像和生成的图像,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_10风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_11是它们在层l中各自的特征表示。然后定义两个特征表示之间的平方误差损失:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_12
这个损失相对于层l中的激活的导数等于:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_13 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_14
由此可以使用标准误差反向传播来计算相对于图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_15的梯度。因此,可以改变最初的随机图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_15 ,直到它在卷积神经网络的某一层中产生与原始图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_17
当卷积神经网络在对象识别上被训练时,它们开发了图像的表示,使得对象信息沿着处理层级越来越明显。因此,沿着网络的处理层次,输入图像被转换成对图像的实际内容越来越敏感的表示,但是对其精确的外观变得相对不变。
因此,网络中的较高层根据对象及其在输入图像中的排列来捕获高级内容,但是不太约束重建的精确像素值。相比之下,较低层的重建只是复制了原始图像的精确像素值。因此,将网络高层中的特征响应称为内容表示

  • Style representation

为了获得输入图像风格的表示,使用了一个被设计用来捕捉纹理信息的特征空间。这个特征空间可以建立在网络的任何层中的滤波器响应之上。它由不同滤波器响应之间的相关性组成,其中期望是在特征图的空间范围上获得的。这些特征相关性由Gram矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_18,其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_19是层l中的矢量化特征图i和j之间的内积:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_20
通过包括多层的特征相关性,获得了输入图像的静态、多尺度表示,其捕获了其纹理信息,但没有捕获全局排列。可以通过构建一个与给定输入图像的风格表示相匹配的图像,将这些建立在网络不同层上的风格特征空间捕获的信息可视化。这是通过使用来自白噪声图像的梯度下降来最小化来自原始图像的Gram矩阵和要生成的图像的Gram矩阵的条目之间的均方距离来实现的。
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_21风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络是原始图像和生成的图像,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_23风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_24 是它们在层l中各自的风格表示。则该层对总损失的贡献风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_25和总损失L如下风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_26风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_27
其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_28是每层对总损失的贡献的加权因子。风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_25相对于层l中激活的导数可以解析地计算:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_30风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_14
使用标准误差反向传播可以容易地计算风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_25相对于像素值风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络的梯度

  • Style transfer

为了将艺术作品风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_21的风格转移到照片风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_08上,合成了一个新的图像,它同时匹配风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_08的内容表示和风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_21的风格表示(见下图)。

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_38


Style transfer algorithm:

  1. 首先提取并存储内容和风格特征。样式图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_39通过网络传递,并且计算和存储它在包括的所有层上的样式表示风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_40(左图)。内容图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_17 通过网络传递,存储一层中的内容表示风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_42(右图)。
  2. 然后,使随机白噪声图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_15通过网络,并计算其风格特征风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_44和内容特征风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_45。在包括在样式表示中的每个层上,计算风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_44风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_40之间的元素方式均方差,以给出样式损失风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_48(左图)。此外,计算风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_45风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_42之间的均方差,以给出内容损失风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_51((右图)。
  3. 总损失风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_52(是内容和风格损失之间的线性组合。它相对于像素值的导数可以使用误差反向传播来计算(中间)。这个梯度用于迭代更新图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_15,直到它同时匹配样式图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_39的样式特征和内容图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_17的内容特征(中间,底部)。

联合最小化白噪声图像的特征表示与卷积神经网络的一层中的照片的内容表示和多层上定义的绘画的风格表示之间的距离。最小化的损失函数是:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_56
其中α和β分别是内容和风格重建的加权因子。相对于像素值风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_57的梯度可以用作一些数值优化策略的输入。这里我们使用L-BFGS [32],发现它最适合图像合成。
为了在可比较的尺度上提取图像信息,在计算其特征表示之前,总是将样式图像调整到与内容图像相同的大小。最后,注意与[Understanding Deep Image Representations by Inverting Them.]不同的是,没有用图像先验来正则化合成结果。然而,来自网络中较低层的纹理特征充当风格图像的特定图像先验。此外,由于本文使用不同的网络架构和优化算法,预计图像合成会有一些差异。

关于GramMatrix
Gram Matrix实际上可看做是feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每一个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字就代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可

2.Deep Photo Style Transfer(CVPR2017)

论文下载开源代码翻译参考:深度学习(10)——Deep Photo Style Transfer翻译参考:Style Transfer——Deep Photo Style Transfer

2.1.概述

本文基于深度学习进行照片的风格迁移,可以更好的保留参考图片的风格信息而不引入变形导致的失真。Gatys借助神经网络不同层完成风格迁移,但却并不完全适合照片的风格迁移,因为即使选择的content image和style image都是照片,还是会产生变形,本文的主要贡献在于将输出限定在一定色彩空间中来抑制变形,保留照片的写实性,这项约束是完全可微的。目前成功应用于延时变换、天气、季节、艺术风格的个应用场景下

2.2.方法

主要改进在以下两个方面:

  • 加入图像写实正则化参数项,约束重构图像用内容图像的局部仿射色彩变幻防止扭曲
  • 基于内容图像的语义分割,增强结果的图像写实性

NST(Imagestyle transfer using convolutional neural networks)的基本算法如下:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_58 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_59风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_60
其中,L是卷积层数量,l表示网络中第l层。每一层都有风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_02个卷积核,每个卷积核生成大小为 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_62的feature map, 其中 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_62是高度乘以特征图的宽度。风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_64为特征矩阵,(i,j)表示其坐标,矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_65定义为向量化特征图之间的内积,即Gram矩阵。α和 β的配置层预设的权重, 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_66是用来平衡内容(Eq. 2)和样式(Eq. 3)权重的参数。
无论是NST还是这篇文章提到的方法,都是使用预训练的VGG19模型,关于内容重建部分,都选择conv4_2(这一层的 αl = 1,其他层的 αl= 0 )的内容表示,所以Eq. 1可以重写为风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_67
Eq. 2重写为风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_68
在NST论文中,关于Ltotal的表示如Eq .6,其与Eq .4 只是符号表示上不同风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_69风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_70
以上NST算法原始公式,下面是这篇文章的创新之处:

  • 写实正则化项:最大程度保留内容图像的结构,从而避免产生空间扭曲。

对内容图像的变换添加约束。虽然我们使用VGG19中较低层重建图像内容,但在该过程中不可避免会产生信息丢失,反映在输出图像上就是图像失真。因此我们添加惩罚图像失真的项来保证这一过程。
我们在输入图像RGB通道的局部仿射合并上构建拉普拉斯抠图算法。它们描述了一个最小二乘惩罚函数,该函数可以用一个只依赖于输入图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_71 的矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_72表示的标准线性系统最小化。(如需更详细的推导,请参阅原文。注意, 给定一个输入图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_71风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_74 个像素,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_75 )。我们将Vc[O]命名为通道c 中输出图像O的矢量化版本 ( N × 1 ) ,并定义了以下正则项。
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_76 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_77

  • 语义分割增强风格损失函数

使用类似遮罩的方法
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_78 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_79
其中c为语义分割掩码中的通道数,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_80为层风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_81中分割掩码的通道,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_82为对应于风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_83的Gram矩阵。我们对掩码进行下采样,使之与卷积神经网络每一层的feature map的大小相等。

此处的语义分割掩码(semantic segmentation mask)是指对style中的不同标签做分割,每个通道表示一个标签的掩码,标签部位表示为白色,背景部分表示黑色。
例如,style图中有车和楼房,则通道1表示车的掩码,车部位是白色,其余部位是黑色,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_84则只有车部位,其余部位全是黑色,;通道2表示楼房的掩码,楼房部位是白色,其余部位是黑色,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_85只有楼房信息,其余部位是黑色 。

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_86风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_87的通道数c应该相同,并且由于最终的输出收到我们正则化项的约束,所以分割不需要像素级精确,例如,“湖”和“海” 是等价的。

  • 损失

将这三个要素结合在一起,形成了照片级风格转换:
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_88

  • 实现细节

使用预训练的VGG19模型,选择conv4_2(这一层的 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_89, 其他层的风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_90)的内容表示,和conv1_1 conv2_1, conv3_1, conv4_1 conv5_1(这些层的风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_91 , 其他层的风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_92)的方式表示,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_93

3.Universal Style Transfer via Feature Transform:WCT(whitening and coloring)(NIPS2017)

论文下载开源代码翻译参考:【翻译】Universal Style Transfer via Feature Transforms

3.1.概述

同时实现generalization , quality ,efficiency的任意风格转换时一个挑战性的任务。
我们提出使用特征变换,即白化和着色(whitening and coloring),来直接将内容特征统计与深层特征空间中的风格图像的特征统计相匹配。
我们将特征变换与预先训练好的通用编码器-解码器网络结合起来,这样,转移过程就可以通过简单的前馈操作来实现。

3.2.方法

  • 重构解码器

采用VGG-19[26]作为编码器,固定它并训练一个简单的解码器网络,用于将VGG特征反转到原始图像,解码器被设计为与VGG-19网络对称(直到Relu_X_1层),最近的邻居上采样层用于放大特征图。为了评估在不同层提取的特征,我们在VGG-19的五个层,即Relu_X_1(X=1,2,3,4,5)选择特征图,并相应训练五个解码器。采用像素重建损失(即生成图片与输入图片的均方误差)和特征损失(即生成图与输入图在VGG-19的特征空间中的特征的均方误差)来重建输入图像
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_94
其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_95, 风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_96是输入图像和重建输出,Φ是提取Relu_X_1特征的VGG编码器。此外,λ是平衡两种损失的权重。训练结束后,解码器是固定的(即不会被微调),并作为一个特征反转器使用

  • 白化和着色WCT(whitening and coloring)

给定一对内容图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_97和风格图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_98,我们首先在某一层(如Relu_4_1)提取它们的矢量VGG特征图风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_99风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_100,其中Hc、Wc(Hs、Ws)是内容(风格)特征的高度和宽度,C是通道的数量。如果风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_101直接被送入解码器,解码器将重建原始图像风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_97。我们接下来建议使用白化和着色变换来调整风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_101风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_104的统计数据。WCT的目标是直接转换风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_105以匹配风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_106的协方差矩阵。它由两个步骤组成,即白化和着色变换。
白化变换
在白化之前,我们首先通过减去风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_101的平均矢量风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_108来居中。然后,我们对风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_101进行线性变换,如下所示,这样我们就得到了风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_110,使特征图不相关(风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_111):
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_112
其中,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_113是具有协方差矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_114特征值的对角矩阵,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_115是相应的特征向量的正交矩阵,满足风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_116。(先计算出内容图c的协方差矩阵的对角矩阵D、协方差矩阵的正交矩阵E,然后计算内容提取结果)
白化的特征仍然保持着图像内容的全局结构,但大大有助于去除与风格有关的其他信息。
换句话说,白化步骤有助于从输入图像中剥离出风格,同时保留全局内容结构。
着色变换
我们首先通过减去风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_104的平均矢量风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_118使其居中,然后进行着色变换[14],这实质上是反白化步骤,对风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_110进行线性变换,如,这样我们得到的风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_120在其特征图之间具有理想的相关性(风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_121 ):
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_122
其中,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_123是具有协方差矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_124特征值的对角矩阵,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_125是相应的特征向量的正交矩阵。最后,我们用风格的平均向量风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_118来重新定位风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_120,即风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_128。(计算风格图特征风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_104的协方差矩阵的对角矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_123、协方差矩阵的正交矩阵风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_125,参与计算进行还原,这样相当于在恢复原图时把风格图的风格融合到其中)
在WCT之后,我们可以将风格迁移gram矩阵代码 pytorch 风格迁移算法原理_深度学习_120与内容特征风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_101混合,然后再将其送入解码器,以便为用户提供对风格化效应强度的控制:
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_134

4.A Closed-form Solution to Photorealistic Image Stylization:PhotoWCT(ECCV2018)

论文下载开源代码翻译参考:简书:A Closed-form Solution to Photorealistic Image Stylization翻译参考:A Closed-form Solution to Photorealistic Image Stylization快速真实图片风格化

4.1.概述

本文提出的方法主要包括两个步骤:stylization step和smoothing step, 而且每个step都有closed-form solution。其中stylization step是基于WCT(whitening and coloring transform)算法改进后的PhotoWCT,主要解决了WCT算法的输出中存在structral artifacts的问题。同时,仅仅是PhotoWCT并不能保证结果的空间一致性,这一问题在smoothing step中作为流行规划问题解决。

4.2.方法

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_135


整体的映射函数可以表示为:

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_136

  • stylization step

与WCT算法相比,PhotoWCT的改进主要在于在WCT中用Unpooling代替Upsampling,并添加了MaxPooling mask来提取特征提取时造成的细节损失。因为最大池化减小了特征图的信息空间,仅仅在编码器上采样很难重构输入图片的结构。

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_137

  • smoothing step

主要目标有两个。一是在局部邻域中具有相似内容的像素应该被相似的风格化,二是平滑的结果不能显著的远离PhotoWCT的结果(听起来就是正则化啦)。为了实现这两个目标,文中首先建立了一个affinity matrix:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_138,相似性矩阵是在一个局部patch,比如3x3的区域里,计算像素之间两两的相似度,一般选用GaussianAffinity:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_139
然后建立了下述优化问题来获得同时满足这两个条件的解:风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_140
其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_141是W的度矩阵(degree matrix)D的对角元素,整个smoothing step可表示为:
风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_142
其中风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_71是单位矩阵,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_144,S是根据风格迁移gram矩阵代码 pytorch 风格迁移算法原理_计算机视觉_145计算的归一化拉普拉斯矩阵,风格迁移gram矩阵代码 pytorch 风格迁移算法原理_卷积神经网络_146

5.Photorealistic Style Transfer via Wavelet Transforms:WCT2(ICCV2019)

论文下载开源代码翻译参考:风格迁移论文"Photorealistic Style Transfer via Wavelet Transforms"

5.1.概述

基于Whitening and Coloring Transform(WCT)的方法由于其抽象能力强,会出现空间扭曲或者不真实的伪影的情况。作者基于WCT的方法将小波变换嵌入神经网络中,使特征能够保留结构信息以及VGG空间的统计学特性。此外,作者认为基于WCT2的方法可以提高风格化的时域稳定性。

方法

  • 小波变换

Haar小波池化有4个卷积核,由风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_147组成,低通滤波器L和高通滤波器H分别为风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_148低通滤波器用于获得光滑的表面特征和纹理特征,而高通滤波器可以从垂直、水平和对角线方向获得边缘信息

Haar小波变换并不是唯一可以对信号进行恢复的方法,选择Haar小波是因为这种方法将原始信号分解为可捕获不同分量的通道,导致风格化结果更好。

只有低频特征LL被传到下一个编码器中,高频信息(HH,HL,LH)被直接送到decoder里

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_图像处理_149

  • 渐进式的风格化

我们没有使用在WCT和PhotoWCT中使用的多级风格化,而是在一个单一的正向传递中逐步转换特征,如图所示。在单个编码器-解码器网络中,我们依次在每个尺度(conv1X,conv2_X,conv3Xandconv4X)上应用WCT。注意,我们模型的svd计算数量保持不变。我们可以在跳过连接和解码层上添加更多的WCT,以进一步加强程式化效果,但要以消耗时间为代价。我们提出的渐进式物化与多层次物化相比有几个优点。首先,多层策略需要在不共享参数的情况下为每一层训练一个解码器,这是低效的。另一方面,我们的训练过程很简单,因为我们只有一对编码器和解码器,这在推理时间上也很有利。其次,用VGG网络结构递归编码和解码信号会放大错误,导致输出中出现不现实的工件。

风格迁移gram矩阵代码 pytorch 风格迁移算法原理_迁移学习_150

拟议的渐进风格化概述。对于编码器,我们对convx_1层的输出执行WCT并跳过连接。对于解码器,我们在convx_2层的输出上应用WCT,这是可选的