风格迁移:一文梳理经典方法发展脉络及原理:Gram矩阵、WCT、WCT2

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

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

1.1.概述

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

1.2.方法

  • Content representation

通常,网络中的每一层都定义了一个非线性滤波器组,其复杂度随着该层在网络中的位置而增加。因此,给定的输入图像 x ⃗ \vec{x} x ,通过对该图像的滤波器响应而在卷积神经网络的每一层中被编码。具有 N l N_l Nl个不同过滤器的图层具有 N l N_l Nl个大小为 M l M_l Ml 的特征图,其中 M l M_l Ml是特征图的高度乘以宽度。第L层中的响应可以存储在矩阵 F l ∈ R N l × M l F_l∈R^{N_l×M _l} FlRNl×Ml中,其中 F i j l F^l_{ij} Fijl是层l中位置j处的第i个滤波器的激活。
为了可视化在层级的不同层编码的图像信息,可以对白噪声图像执行梯度下降,以找到与原始图像的特征响应相匹配的另一个图像。设 p ⃗ \vec{p} p x ⃗ \vec{x} x 是原始图像和生成的图像, P 1 P_1 P1 F 1 F_1 F1是它们在层l中各自的特征表示。然后定义两个特征表示之间的平方误差损失: L c o n t e n t ( p ⃗ , x ⃗ , 1 ) = 1 2 ∑ i , j ( F i j l − P i j l ) 2 L_{content}(\vec{p},\vec{x},1)=\frac{1}{2}\sum_{i,j}(F^l_{ij}-P^l_{ij})^2 Lcontent(p ,x ,1)=21i,j(FijlPijl)2
这个损失相对于层l中的激活的导数等于: ∂ L c o n t e n t ∂ F i j l = ( F l − P l ) i j , i f F i j l > 0 \frac{\partial{L_{content}}}{\partial{F^l_{ij}}}=(F^l-P^l)_{ij},if F^l_{ij}>0 FijlLcontent=(FlPl)ijifFijl>0 = 0 , i f F i j l < 0 =0,if F^l_{ij}<0 =0ifFijl<0
由此可以使用标准误差反向传播来计算相对于图像 x ⃗ \vec{x} x 的梯度。因此,可以改变最初的随机图像 x ⃗ \vec{x} x ,直到它在卷积神经网络的某一层中产生与原始图像 p ⃗ \vec{p} p 相同的响应
当卷积神经网络在对象识别上被训练时,它们开发了图像的表示,使得对象信息沿着处理层级越来越明显。因此,沿着网络的处理层次,输入图像被转换成对图像的实际内容越来越敏感的表示,但是对其精确的外观变得相对不变。
因此,网络中的较高层根据对象及其在输入图像中的排列来捕获高级内容,但是不太约束重建的精确像素值。相比之下,较低层的重建只是复制了原始图像的精确像素值。因此,将网络高层中的特征响应称为内容表示

  • Style representation

为了获得输入图像风格的表示,使用了一个被设计用来捕捉纹理信息的特征空间。这个特征空间可以建立在网络的任何层中的滤波器响应之上。它由不同滤波器响应之间的相关性组成,其中期望是在特征图的空间范围上获得的。这些特征相关性由Gram矩阵 G 1 ∈ R N l × N l G_1∈R^{N_l×N _l} G1RNl×Nl 给出,其中 G i j l G^l_{ij} Gijl是层l中的矢量化特征图i和j之间的内积: G i j l = ∑ k ( F i k l F j k l ) G^l_{ij}=\sum_k(F^l_{ik}F^l_{jk}) Gijl=k(FiklFjkl)
通过包括多层的特征相关性,获得了输入图像的静态、多尺度表示,其捕获了其纹理信息,但没有捕获全局排列。可以通过构建一个与给定输入图像的风格表示相匹配的图像,将这些建立在网络不同层上的风格特征空间捕获的信息可视化。这是通过使用来自白噪声图像的梯度下降来最小化来自原始图像的Gram矩阵和要生成的图像的Gram矩阵的条目之间的均方距离来实现的。
a ⃗ \vec{a} a x ⃗ \vec{x} x 是原始图像和生成的图像, A 1 A_1 A1 G 1 G_1 G1 是它们在层l中各自的风格表示。则该层对总损失的贡献 E l E_l El和总损失L如下 E l = 1 4 N l 2 M l 2 ∑ i , j ( G i j l − A i j l ) 2 E_l=\frac{1}{4N_l^2M_l^2}\sum_{i,j}(G^l_{ij}-A^l_{ij})^2 El=4Nl2Ml21i,j(GijlAijl)2 L s t y l e ( a ⃗ , x ⃗ ) = ∑ i = 0 L w l E l L_{style}(\vec{a},\vec{x})=\sum_{i=0}^Lw_lE_l Lstyle(a ,x )=i=0LwlEl
其中 w l w_l wl是每层对总损失的贡献的加权因子。 E l E_l El相对于层l中激活的导数可以解析地计算: ∂ E l ∂ F i j l = 1 N 1 2 M 1 2 ( ( F l ) T − ( G l − A L ) ) i j , i f F i j l > 0 \frac{\partial{E_l}}{\partial{F^l_{ij}}}=\frac{1}{N_1^2M_1^2}((F^l)^T-(G^l-A^L))_{ij},if F^l_{ij}>0 FijlEl=N12M121((Fl)T(GlAL))ijifFijl>0 = 0 , i f F i j l < 0 =0,if F^l_{ij}<0 =0ifFijl<0
使用标准误差反向传播可以容易地计算 E l E_l El相对于像素值 x ⃗ \vec{x} x 的梯度

  • Style transfer

为了将艺术作品 a ⃗ \vec{a} a 的风格转移到照片 p ⃗ \vec{p} p 上,合成了一个新的图像,它同时匹配 p ⃗ \vec{p} p 的内容表示和 a ⃗ \vec{a} a 的风格表示(见下图)。
在这里插入图片描述
Style transfer algorithm:

  1. 首先提取并存储内容和风格特征。样式图像 a ⃗ \vec{a} a 通过网络传递,并且计算和存储它在包括的所有层上的样式表示 A l A^l Al(左图)。内容图像 p ⃗ \vec{p} p 通过网络传递,存储一层中的内容表示 P l P^l Pl(右图)。
  2. 然后,使随机白噪声图像 x ⃗ \vec{x} x 通过网络,并计算其风格特征 G l G^l Gl和内容特征 F l F^l Fl。在包括在样式表示中的每个层上,计算 G l G^l Gl A l A^l Al之间的元素方式均方差,以给出样式损失 L s t y l e L_{style} Lstyle(左图)。此外,计算 F l F^l Fl P l P^l Pl之间的均方差,以给出内容损失 L c o n t e n t L_{content} Lcontent((右图)。
  3. 总损失 L t o t a l L_{total} Ltotal(是内容和风格损失之间的线性组合。它相对于像素值的导数可以使用误差反向传播来计算(中间)。这个梯度用于迭代更新图像 x ⃗ \vec{x} x ,直到它同时匹配样式图像 a ⃗ \vec{a} a 的样式特征和内容图像 p ⃗ \vec{p} p 的内容特征(中间,底部)。

联合最小化白噪声图像的特征表示与卷积神经网络的一层中的照片的内容表示和多层上定义的绘画的风格表示之间的距离。最小化的损失函数是: L t o t a l ( p ⃗ , a ⃗ , x ⃗ ) = α L c o n t e n t ( p ⃗ , x ⃗ ) + β L s t y l e ( a ⃗ , x ⃗ ) L_{total}(\vec{p},\vec{a},\vec{x})=\alpha{L_{content}(\vec{p},\vec{x})}+\beta{L_{style}(\vec{a},\vec{x})} Ltotal(p ,a ,x )=αLcontent(p ,x )+βLstyle(a ,x )
其中α和β分别是内容和风格重建的加权因子。相对于像素值 ∂ L t o t a l ∂ x ⃗ \frac{\partial{L_{total}}}{\partial{\vec{x}}} x Ltotal的梯度可以用作一些数值优化策略的输入。这里我们使用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)的基本算法如下: L t o t a l = ∑ l = 1 L α L c l + Γ ∑ l = 1 L β L c l L_{total}=\sum ^L_{l=1}\alpha{L^l_c}+\Gamma{\sum ^L_{l=1}\beta{L^l_c}} Ltotal=l=1LαLcl+Γl=1LβLcl L c l = 1 2 N l D l ∑ i , j ( F l [ O ] − F l [ I ] ) i , j 2 L^l_c=\frac{1}{2N_lD_l}\sum_{i,j}(F_l[O]-F_l[I])^2_{i,j} Lcl=2NlDl1i,j(Fl[O]Fl[I])i,j2 L s l = 1 2 N l 2 l ∑ i , j ( G l [ O ] − G l [ S ] ) i , j 2 L^l_s=\frac{1}{2N_l^2l}\sum_{i,j}(G_l[O]-G_l[S])^2_{i,j} Lsl=2Nl2l1i,j(Gl[O]Gl[S])i,j2
其中,L是卷积层数量,l表示网络中第l层。每一层都有 N l N_l Nl个卷积核,每个卷积核生成大小为 D l D_l Dl的feature map, 其中 D l D_l Dl是高度乘以特征图的宽度。 F l [ ⋅ ] ∈ R N l × D l F_l[·]\in{R^{N_l\times{D_l}}} Fl[]RNl×Dl为特征矩阵,(i,j)表示其坐标,矩阵 G l [ ⋅ ] = F l [ ⋅ ] F l [ ⋅ ] T ∈ R N l × D l G_l[·]=F_l[·]F_l[·]^T\in{R^{N_l\times{D_l}}} Gl[]=Fl[]Fl[]TRNl×Dl定义为向量化特征图之间的内积,即Gram矩阵。α和 β的配置层预设的权重, Γ \Gamma Γ是用来平衡内容(Eq. 2)和样式(Eq. 3)权重的参数。
无论是NST还是这篇文章提到的方法,都是使用预训练的VGG19模型,关于内容重建部分,都选择conv4_2(这一层的 αl = 1,其他层的 αl= 0 )的内容表示,所以Eq. 1可以重写为 L t o t a l = L c + Γ ∑ l = 1 L β l L s l L_{total}=L_c+\Gamma{\sum^L_{l=1}\beta_lL^l_s} Ltotal=Lc+Γl=1LβlLsl
Eq. 2重写为 L c = 1 2 N D ∑ i , j ( F [ O ] − F [ I ] ) i , j 2 L_c=\frac{1}{2ND}\sum_{i,j}(F[O]-F[I])^2_{i,j} Lc=2ND1i,j(F[O]F[I])i,j2
在NST论文中,关于Ltotal的表示如Eq .6,其与Eq .4 只是符号表示上不同 L t o t a l = α L c o n t e n t + β L s t y l e L_{total}=\alpha{L_{content}}+\beta{L_{style}} Ltotal=αLcontent+βLstyle L s t y l e ( a ⃗ , x ⃗ ) = ∑ l = 0 L w l E l L_{style}(\vec{a},\vec{x})=\sum^L_{l=0}w_lE_l Lstyle(a ,x )=l=0LwlEl
以上NST算法原始公式,下面是这篇文章的创新之处:

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

对内容图像的变换添加约束。虽然我们使用VGG19中较低层重建图像内容,但在该过程中不可避免会产生信息丢失,反映在输出图像上就是图像失真。因此我们添加惩罚图像失真的项来保证这一过程。
我们在输入图像RGB通道的局部仿射合并上构建拉普拉斯抠图算法。它们描述了一个最小二乘惩罚函数,该函数可以用一个只依赖于输入图像 I I I 的矩阵 M I M_I MI表示的标准线性系统最小化。(如需更详细的推导,请参阅原文。注意, 给定一个输入图像 I I I N N N 个像素, M I = N × N M_I=N\times{N} MI=N×N )。我们将Vc[O]命名为通道c 中输出图像O的矢量化版本 ( N × 1 ) ,并定义了以下正则项。
L m = ∑ c = 1 3 V C [ O ] M I V C [ O ] L_m=\sum^3_{c=1}V_C[O]M_IV_C[O] Lm=c=13VC[O]MIVC[O] ∂ L m ∂ V C [ O ] = 2 M I V c [ O ] \frac{\partial L_m}{\partial V_C[O]}=2M_IV_c[O] VC[O]Lm=2MIVc[O]

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

使用类似遮罩的方法
L s + l = ∑ c = 1 C 1 2 N l , c 2 ∑ i , j ( G l , c [ O ] − G l , c [ s ] ) i , j 2 L^l_{s+}=\sum^C_{c=1}\frac{1}{2N^2_{l,c}}\sum_{i,j}(G_{l,c}[O]-G_{l,c}[s])^2_{i,j} Ls+l=c=1C2Nl,c21i,j(Gl,c[O]Gl,c[s])i,j2 F l , c [ O ] = F l [ O ] M l , c [ I ] , F l , c [ S ] = F l [ S ] M l , c [ S ] F_{l,c}[O]=F_{l}[O]M_{l,c}[I],F_{l,c}[S]=F_{l}[S]M_{l,c}[S] Fl,c[O]=Fl[O]Ml,c[I]Fl,c[S]=Fl[S]Ml,c[S]
其中c为语义分割掩码中的通道数, M l , c [ ⋅ ] M_{l,c}[·] Ml,c[]为层 I I I中分割掩码的通道, G l , c [ ⋅ ] G_{l,c}[·] Gl,c[]为对应于 F l , c [ ⋅ ] F_{l,c}[·] Fl,c[]的Gram矩阵。我们对掩码进行下采样,使之与卷积神经网络每一层的feature map的大小相等。

此处的语义分割掩码(semantic segmentation mask)是指对style中的不同标签做分割,每个通道表示一个标签的掩码,标签部位表示为白色,背景部分表示黑色。
例如,style图中有车和楼房,则通道1表示车的掩码,车部位是白色,其余部位是黑色, F l , 1 F_{l,1} Fl,1则只有车部位,其余部位全是黑色,;通道2表示楼房的掩码,楼房部位是白色,其余部位是黑色, F l , 2 F_{l,2} Fl,2只有楼房信息,其余部位是黑色 。

M l , c [ I ] M_{l,c}[I] Ml,c[I] M l , c [ S ] M_{l,c}[S] Ml,c[S]的通道数c应该相同,并且由于最终的输出收到我们正则化项的约束,所以分割不需要像素级精确,例如,“湖”和“海” 是等价的。

  • 损失

将这三个要素结合在一起,形成了照片级风格转换:
L t o t a l = ∑ l = 1 L α l L c l + Γ ∑ l = 1 L β l L s + l + λ L m L_{total}=\sum^L_{l=1}\alpha _lL^l_c+\Gamma \sum^L_{l=1}\beta _lL^l_{s+}+\lambda L_m Ltotal=l=1LαlLcl+Γl=1LβlLs+l+λLm

  • 实现细节

使用预训练的VGG19模型,选择conv4_2(这一层的 α l = 1 \alpha _l=1 αl=1, 其他层的 α l = 0 \alpha _l=0 αl=0)的内容表示,和conv1_1 conv2_1, conv3_1, conv4_1 conv5_1(这些层的 β l = 1 5 \beta _l=\frac{1}{5} βl=51 , 其他层的 β l = 0 \beta _l=0 βl=0)的方式表示, Γ = 1 0 2 , λ = 1 0 4 \Gamma =10^2,\lambda =10^4 Γ=102,λ=104

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的特征空间中的特征的均方误差)来重建输入图像
L = ∣ ∣ I o − I i ∣ ∣ 2 2 + λ ∣ ∣ Φ ( I o ) − Φ ( I i ) ∣ ∣ 2 2 L=||I_o-I_i||^2_2+\lambda ||\Phi (I_o)-\Phi (I_i)||^2_2 L=∣∣IoIi22+λ∣∣Φ(Io)Φ(Ii)22
其中 I i I_i Ii, I o I_o Io是输入图像和重建输出,Φ是提取Relu_X_1特征的VGG编码器。此外,λ是平衡两种损失的权重。训练结束后,解码器是固定的(即不会被微调),并作为一个特征反转器使用

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

给定一对内容图像 I c I_c Ic和风格图像 I s I_s Is,我们首先在某一层(如Relu_4_1)提取它们的矢量VGG特征图 f c ∈ R H × H c × W c f_c\in R^{H\times H_c\times W_c} fcRH×Hc×Wc f s ∈ R H × H s × W s f_s\in R^{H\times H_s\times W_s} fsRH×Hs×Ws,其中Hc、Wc(Hs、Ws)是内容(风格)特征的高度和宽度,C是通道的数量。如果 f c f_c fc直接被送入解码器,解码器将重建原始图像 I c I_c Ic。我们接下来建议使用白化和着色变换来调整 f c f_c fc f s f_s fs的统计数据。WCT的目标是直接转换 f c f_c fc以匹配 f s f_s fs的协方差矩阵。它由两个步骤组成,即白化和着色变换。
白化变换
在白化之前,我们首先通过减去 f c f_c fc的平均矢量 m c m_c mc来居中。然后,我们对 f c f_c fc进行线性变换,如下所示,这样我们就得到了 f ^ c \hat{f}_c f^c,使特征图不相关( f ^ c f ^ c T = I \hat{f}_c\hat{f}_c^T=I f^cf^cT=I):
f ^ c = E c D c − 1 2 E c T f c \hat{f}_c=E_cD_c^{-\frac{1}{2}}E^T_cf_c f^c=EcDc21EcTfc
其中, D c D_c Dc是具有协方差矩阵 f ^ c f ^ c T ∈ R C × C \hat{f}_c\hat{f}_c^T\in R^{C\times C} f^cf^cTRC×C特征值的对角矩阵, E c E_c Ec是相应的特征向量的正交矩阵,满足 f ^ c f ^ c T = E c D c E c T \hat{f}_c\hat{f}_c^T=E_cD_cE_c^T f^cf^cT=EcDcEcT。(先计算出内容图c的协方差矩阵的对角矩阵D、协方差矩阵的正交矩阵E,然后计算内容提取结果)
白化的特征仍然保持着图像内容的全局结构,但大大有助于去除与风格有关的其他信息。
换句话说,白化步骤有助于从输入图像中剥离出风格,同时保留全局内容结构。
着色变换
我们首先通过减去 f s f_s fs的平均矢量 m s m_s ms使其居中,然后进行着色变换[14],这实质上是反白化步骤,对 f ^ c \hat{f}_c f^c进行线性变换,如,这样我们得到的 f ^ c s \hat{f}_{cs} f^cs在其特征图之间具有理想的相关性( f ^ c s f ^ c s T = f ^ s f ^ s T \hat{f}_{cs}\hat{f}_{cs}^T=\hat{f}_s\hat{f}_s^T f^csf^csT=f^sf^sT ):
f ^ c s = E s D s − 1 2 E s T f ^ c \hat{f}_{cs}=E_sD_s^{-\frac{1}{2}}E^T_s\hat{f}_c f^cs=EsDs21EsTf^c
其中, D s D_s Ds是具有协方差矩阵 f ^ s f ^ s T ∈ R C × C \hat{f}_s\hat{f}_s^T\in R^{C\times C} f^sf^sTRC×C特征值的对角矩阵, E s E_s Es是相应的特征向量的正交矩阵。最后,我们用风格的平均向量 m s m_s ms来重新定位 f ^ c s \hat{f}_{cs} f^cs,即 f ^ c s = f ^ c s + m s \hat{f}_{cs}=\hat{f}_{cs}+m_s f^cs=f^cs+ms。(计算风格图特征 f s f_s fs的协方差矩阵的对角矩阵 D s D_s Ds、协方差矩阵的正交矩阵 E s E_s Es,参与计算进行还原,这样相当于在恢复原图时把风格图的风格融合到其中)
在WCT之后,我们可以将 f ^ c s \hat{f}_{cs} f^cs与内容特征 f c f_c fc混合,然后再将其送入解码器,以便为用户提供对风格化效应强度的控制:
f ^ c s = α f ^ c s + ( 1 − α ) m s \hat{f}_{cs}=\alpha \hat{f}_{cs}+(1-\alpha)m_s f^cs=αf^cs+(1α)ms

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.方法

在这里插入图片描述
整体的映射函数可以表示为:
F 2 ( F 1 ( I C , I S ) , I C ) F_2(F_1(I_C,I_S),I_C) F2(F1(IC,IS),IC)

  • stylization step

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

  • smoothing step

主要目标有两个。一是在局部邻域中具有相似内容的像素应该被相似的风格化,二是平滑的结果不能显著的远离PhotoWCT的结果(听起来就是正则化啦)。为了实现这两个目标,文中首先建立了一个affinity matrix: W = { w i j } ∈ R N × N W=\{w_{ij}\}\in R^{N\times N} W={wij}RN×N,相似性矩阵是在一个局部patch,比如3x3的区域里,计算像素之间两两的相似度,一般选用GaussianAffinity: w i j = e − ∣ ∣ I i − I j ∣ ∣ 2 σ 2 w_{ij}=e^{\frac{-||I_i-I_j||^2}{\sigma^2}} wij=eσ2∣∣IiIj2
然后建立了下述优化问题来获得同时满足这两个条件的解: a r g m i n r 1 2 ( ∑ i , j = 1 N w i g ∣ ∣ r i d j j ∣ ∣ 2 + λ ∑ i = 1 N ∣ ∣ r i − y i ∣ ∣ 2 ) argmin_r\frac{1}{2}(\sum^N_{i,j=1}w_{ig}||\frac{r_i}{\sqrt{d_{jj}}}||^2+\lambda\sum^N_{i=1}||r_i-y_i||^2) argminr21(i,j=1Nwig∣∣djj ri2+λi=1N∣∣riyi2)
其中 d i i d_{ii} dii是W的度矩阵(degree matrix)D的对角元素,整个smoothing step可表示为:
R ∗ = F 2 ( Y , I C ) = ( 1 − α ) ( I − α S ) − 1 Y R^*=F_2(Y,I_C)=(1-\alpha)(I-\alpha S)^{-1}Y R=F2(Y,IC)=(1α)(IαS)1Y
其中 I I I是单位矩阵, α = 1 1 + λ \alpha=\frac{1}{1+\lambda} α=1+λ1,S是根据 I C I_C IC计算的归一化拉普拉斯矩阵, S = D − 1 2 W D − 1 2 S=D^{-\frac{1}{2}}WD^{-\frac{1}{2}} S=D21WD21

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个卷积核,由 { L L T L H T H L T H H T } \{LL^TLH^THL^THH^T\} {LLTLHTHLTHHT}组成,低通滤波器L和高通滤波器H分别为 L T = 1 2 [ 1 , 1 ] , H T = 1 2 [ − 1 , 1 ] L^T=\frac{1}{\sqrt2}[1,1],H^T=\frac{1}{\sqrt2}[-1,1] LT=2 1[1,1],HT=2 1[1,1]低通滤波器用于获得光滑的表面特征和纹理特征,而高通滤波器可以从垂直、水平和对角线方向获得边缘信息
Haar小波变换并不是唯一可以对信号进行恢复的方法,选择Haar小波是因为这种方法将原始信号分解为可捕获不同分量的通道,导致风格化结果更好。
只有低频特征LL被传到下一个编码器中,高频信息(HH,HL,LH)被直接送到decoder里
在这里插入图片描述

  • 渐进式的风格化

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

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

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gram矩阵风格迁移中一个非常重要的概念,用于描述图片的纹理特征。下面是使用Python代码计算Gram矩阵的示例: ``` python import tensorflow as tf import numpy as np import PIL.Image # 加载图片并进行预处理 image_path = 'path/to/image.jpg' image = np.array(PIL.Image.open(image_path)) image = tf.keras.applications.vgg19.preprocess_input(image) # 加载VGG19模型,提取卷积层特征 model = tf.keras.applications.VGG19(include_top=False, weights='imagenet') model.trainable = False outputs = [layer.output for layer in model.layers] feature_extractor = tf.keras.Model(inputs=model.inputs, outputs=outputs) features = feature_extractor(image) # 计算Gram矩阵 def gram_matrix(input_tensor): result = tf.linalg.einsum('bijc,bijd->bcd', input_tensor, input_tensor) input_shape = tf.shape(input_tensor) num_locations = tf.cast(input_shape[1]*input_shape[2], tf.float32) return result/(num_locations) style_features = features[2:] style_gram_matrices = [gram_matrix(feature) for feature in style_features] ``` 在上面的示例代码中,我们首先加载了一张图片,并使用VGG19模型对其进行预处理和特征提取。然后,我们定义了一个函数 `gram_matrix` 来计算输入张量的Gram矩阵。最后,我们计算了图片的卷积层特征,并使用 `gram_matrix` 函数计算了每个特征的Gram矩阵。 需要注意的是,上面的示例代码中使用了TensorFlow 2.x版本的API,如果您使用的是TensorFlow 1.x版本,请将 `tf.linalg.einsum` 改为 `tf.einsum`,并将 `tf.keras.Model` 改为 `tf.compat.v1.keras.Model`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值