Style Transfer 相关论文工作(近期阅读整理)

考完了本学期的最棘手课程,整理下前一阵子看的有关Style Transfer文章…

A Neural Algorithm of Artistic Style


在本文之前,Gatys在Texture Synthesis Using Convolutional Neural Networks中提出了使用Gram矩阵在深层特征中进行约束可以生成不错的纹理图片(协方差的方式去除掉了位置信息)。协方差矩阵可以用来反映不同kernel获取的feature是否存在相关关系,Gram作为一个特殊形式协方差矩阵,通过不减去均值来降低计算开销。

利用公式 Jcontent(C,G)=12(a(C)a(G))2 J c o n t e n t ( C , G ) = 1 2 ∑ ( a ( C ) − a ( G ) ) 2 来计算Content Loss,这里的矩阵C、G都是中间浅层的feature map,而不是pixel。

利用公式 J[l]style(S,G)=1(2×nC×nH×nW)2nCi=1nCj=1(G(S)ijG(G)ij)2 J s t y l e [ l ] ( S , G ) = 1 ( 2 × n C × n H × n W ) 2 ∑ i = 1 n C ∑ j = 1 n C ( G i j ( S ) − G i j ( G ) ) 2 来计算单层不带权重的Style Loss。这里的S,G都取深层的feature map。

这里的G(Gram矩阵)即 Gij=vTivj G i j = v i T v j v v 是中间层feature map)

利用公式 J(C,S,G)=αJstyle(S,G)+βJcontent(C,G) J ( C , S , G ) = α ∗ J s t y l e ( S , G ) + β ∗ J c o n t e n t ( C , G ) 作为loss func来进行梯度下降更新G图中的像素(C为内容图,S为风格图,G为生成图)。最后的style loss是多个深层的style loss合起来加权的。

这个方法把style transfer的任务转化为一个优化问题,时空开销都比较大,512*512的图片甚至需要3G+的显存。

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


本文在上面的前提上,加了一个前置的生成网络,用前置网络来做图片生成,再利用同样的方式(pretrained VGG-16)来计算Loss,梯度更新生成网络的参数。最后就会得到一个深度学习“滤镜”网络,不同的是这个“滤镜”甚至可以适用于超清化。只需要一次向前传播就可以生成要的图片。

训练的时候,风格转移的loss和Gatys.相同通过和C, G来计算,超清化任务的loss就是一张低清图和高清图的Content Loss。

这个前置网络的设置用了不少流行的技巧。取消池化,用3x3的小kernel(除第一层和最后一层),先使用stride 2 downsample,然后是五个残差块(这里的残差块好像不是He的版本),再用stride 1/2 upsample(fractionally convolution)。因为增大了感受野,在相同计算代价的前提下可以做一个更深的网络,获得更强的描述能力。最后一层用tanh来缩放到0-255。

最后的Loss函数还加了一个一个Total Variation Regularization(相邻像素的差值),用来平滑优化视觉结果。(Pixel Loss不表)

最后的loss:
l=λc×lC,Gfeat(C,G)+λs×lS,Gstyle(S,G)+λTV×lTV(G) l = λ c × l f e a t C , G ( C , G ) + λ s × l s t y l e S , G ( S , G ) + λ T V × l T V ( G )

(这个网络里用的是批归一化,后来作者有一篇Instance Normalization: The Missing Ingredient for Fast Stylization,论述IN比BN更适合图像生成任务。)

在Style Transfer的任务上,把优化过程,变成一个单次的生成过程。据原论文来说,在生成效果类似的前提下,有三个数量级的提速。

前置网络模型如下图:
网络模型

Texture Networks: Feed-forward Synthesis of Textures and Stylized Images


这里不提太多关于这篇的内容,这个工作其实和上文异曲同工,生成网络上用的是一个多尺度的金字塔(下图)。
Style Transfer 相关论文工作(近期阅读整理)_第1张图片

这篇文章里有一个有意思的东西。在前面提到,loss的制定时,我们确定了一套 α,β α , β … 超参来调节风格和内容的倾向,也就是相当于定死了这个比例,这篇文章给了一个等效于动态调节的方法:
训练的时候,噪音 Z Z 被加在每层金字塔的z卷积块后,Join前的激活值上,用这样的input 获得一张output生成图片。当然,loss的计算和前面相同,也是设定死了一个loss的比例。

在生成测试的时候,我们就可以通过一个权重 k k 来调节input的噪声的幅度来影响最后生成图的style或content的偏向。
Style Transfer 相关论文工作(近期阅读整理)_第2张图片

Deep Photo Style Transfer


这篇文章的工作集中于:第一,风格迁移的范围扩展到转移照片的风格,抑制图片的扭曲,把transfer的过程变成颜色空间的局部仿射变换。第二:通过语义分割来解决风格溢出的问题。

作者在原来的Loss中再添加了一项Photorealism regularization: Lm=3c=1Vc[O]TMIVv[O] L m = ∑ c = 1 3 V c [ O ] T M I V v [ O ] (这里的 MI M I 是一个只依赖于最后生成结果的Matting Laplacian N×N N × N 矩阵, Vc V c 是每个channel的激活压成 N×1 N × 1 ),通过这项loss来惩罚非颜色仿射变换。(Matting Laplacian相关之后补充

最后增强的style loss: Lls+=Cc=112N2l,cij(Gl,c[O]Gl,c[S])2ij 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 (C个mask,每个块内自主计算gram,也就是说需要识别出大致的类别label)

最后的Loss : Ltotal=Ll=1αlLlc+ΓLl=1βlLls++λLm L t o t a l = ∑ l = 1 L α l L c l + Γ ∑ l = 1 L β l L s + l + λ L m

这个工作感觉更类似于一个有监督的的上色过程,毕竟Photo Style只能在两张现实照片中传递,图像的边缘信息继承原图。语义分割的过程还是比较暴力。类似 Controlling Perceptual Factors in Neural Style Transfer 中也有提出类似效果的空间控制方式。

Stable and Controllable Neural Texture Synthesis and Style Transfer Using Histogram Losses


这篇文章的工作主要是阐述了Gram矩阵为什么在Style Transfer任务中会有不稳定性,并提出了加入直方图统计信息来强化约束。

包括这篇文章和Deep Photo Style Transfer在内,都认为Gatys的方法对超参的调节非常敏感。在Gram没有保存均值、方差等统计信息的情况下,导致了不稳定性和重影。

新约束的方法是把生成图和风格图都在深层提取出特征后,根据风格图的feature map对生成图的feature map进行直方图匹配(histogram matching),最后求match前后feature map之间的L2范式。(histogram matching的相关在附录

新加入的histogram loss:
Lhistogram=Ll=1γl||OiR(Oi)||2F L h i s t o g r a m = ∑ l = 1 L γ l | | O i − R ( O i ) | | F 2
O O 是各层的原始激活, R(Oi) R ( O i ) 是histogram matching过的激活值。求导的时候,把梯度过小的后者视作常量。)

最后用于style transfer的loss:
L=Lgram+Lhistogram+Ltv+Lcontent L = L g r a m + L h i s t o g r a m + L t v + L c o n t e n t

Fast Patch-based Style Transfer of Arbitrary Style


一个可以输入任意任意内容图、风格图,输出生成图的方法。待更新…


附录:

Histogram matching

直方图匹配这个方法要做的是处理单频道内(灰度)的直方图信息匹配,让目标图 G G 类似于样本图 C C
由统计信息易得,原始图像的灰度概率: Pr(r)=nkN P r ( r ) = n k N ,样本图的灰度概率: Pz=(z)nkN P z = ( z ) n k N 。两个直方图均进行相同的均衡化处理(即把灰度均衡分散到灰度空间中), s=T(r)=ki=0P(ri) s = T ( r ) = ∑ i = 0 k P ( r i ) v=G(z)=ki=0P(zi) v = G ( z ) = ∑ i = 0 k P ( z i ) ,得到一个 s s v v 作为均衡化后的原始样本直方图。
两个均衡化后的直方图分布显然是相同的(如下图的中间坐标系),因此我们就得到了一个从 r r z z 的函数,即 z=G1(s)=G1[T(r)] z = G − 1 ( s ) = G − 1 [ T ( r ) ]

(其实上面的式子应为针对连续值的积分形式(;′⌒`)
Style Transfer 相关论文工作(近期阅读整理)_第3张图片


只是初学者,理解上肯定有各种错误,如果有指出,万分感谢。


参考:
谈谈图像的Style Transfer 系列博文
A Neural Algorithm of Artistic Style
Perceptual Losses for Real-Time Style Transfer and Super-Resolution
Texture Networks: Feed-forward Synthesis of Textures and Stylized Images
Deep Photo Style Transfer
Stable and Controllable Neural Texture Synthesis and Style Transfer Using Histogram Losses

你可能感兴趣的:(深度学习)