考完了本学期的最棘手课程,整理下前一阵子看的有关Style Transfer文章…
A Neural Algorithm of Artistic Style
在本文之前,Gatys在Texture Synthesis Using Convolutional Neural Networks中提出了使用Gram矩阵在深层特征中进行约束可以生成不错的纹理图片(协方差的方式去除掉了位置信息)。协方差矩阵可以用来反映不同kernel获取的feature是否存在相关关系,Gram作为一个特殊形式协方差矩阵,通过不减去均值来降低计算开销。
利用公式 来计算Content Loss,这里的矩阵C、G都是中间浅层的feature map,而不是pixel。
利用公式 来计算单层不带权重的Style Loss。这里的S,G都取深层的feature map。
这里的G(Gram矩阵)即 ( 是中间层feature map)
利用公式 作为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:
(这个网络里用的是批归一化,后来作者有一篇Instance Normalization: The Missing Ingredient for Fast Stylization,论述IN比BN更适合图像生成任务。)
在Style Transfer的任务上,把优化过程,变成一个单次的生成过程。据原论文来说,在生成效果类似的前提下,有三个数量级的提速。
前置网络模型如下图:
Texture Networks: Feed-forward Synthesis of Textures and Stylized Images
这里不提太多关于这篇的内容,这个工作其实和上文异曲同工,生成网络上用的是一个多尺度的金字塔(下图)。
这篇文章里有一个有意思的东西。在前面提到,loss的制定时,我们确定了一套
超参来调节风格和内容的倾向,也就是相当于定死了这个比例,这篇文章给了一个等效于动态调节的方法:
在训练的时候,噪音
被加在每层金字塔的z卷积块后,Join前的激活值上,用这样的input 获得一张output生成图片。当然,loss的计算和前面相同,也是设定死了一个loss的比例。
在生成测试的时候,我们就可以通过一个权重
来调节input的噪声的幅度来影响最后生成图的style或content的偏向。
Deep Photo Style Transfer
这篇文章的工作集中于:第一,风格迁移的范围扩展到转移照片的风格,抑制图片的扭曲,把transfer的过程变成颜色空间的局部仿射变换。第二:通过语义分割来解决风格溢出的问题。
作者在原来的Loss中再添加了一项Photorealism regularization: (这里的 是一个只依赖于最后生成结果的Matting Laplacian 矩阵, 是每个channel的激活压成 ),通过这项loss来惩罚非颜色仿射变换。(Matting Laplacian相关之后补充)
最后增强的style loss: (C个mask,每个块内自主计算gram,也就是说需要识别出大致的类别label)
最后的Loss :
这个工作感觉更类似于一个有监督的的上色过程,毕竟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:
(
是各层的原始激活,
是histogram matching过的激活值。求导的时候,把梯度过小的后者视作常量。)
最后用于style transfer的loss:
Fast Patch-based Style Transfer of Arbitrary Style
一个可以输入任意任意内容图、风格图,输出生成图的方法。待更新…
附录:
Histogram matching
直方图匹配这个方法要做的是处理单频道内(灰度)的直方图信息匹配,让目标图
类似于样本图
。
由统计信息易得,原始图像的灰度概率:
,样本图的灰度概率:
。两个直方图均进行相同的均衡化处理(即把灰度均衡分散到灰度空间中),
,
,得到一个
和
作为均衡化后的原始与样本直方图。
两个均衡化后的直方图分布显然是相同的(如下图的中间坐标系),因此我们就得到了一个从
到
的函数,即
。
(其实上面的式子应为针对连续值的积分形式(;′⌒`)
只是初学者,理解上肯定有各种错误,如果有指出,万分感谢。
参考:
谈谈图像的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