论文名字为:《Universal Style Transfer via Feature Transforms》
前言
1.传统的风格迁移模型存在需要大量耗时、调参的问题,原因在于:
[1]通过计算原图和风格图的 content loss和style loss来保障迁移的效果,这导致对于每个风格都需要专门训练对应的网络,而训练是十分耗时的。
[2]对于style和content loss 我们仍然需要通过对layer的尝试参数,来得到一个和style较为匹配的表述才能有较好的效果,且针对不同的style这一步骤需要重新training,所以需要大量调参的过程。
可以看出问题主要出在风格上了,因此如何不单独对风格进行训练 而实现style transfer是一个很重要的问题,本文对应提出一种encoder/decoder的方式,来进行不需要训练的style transfer。
内容
1.论文主要的思想分为三点:多种形式的解码器训练 + WCT层的风格融合 + 连贯的精细化处理。
[1]本文首先训练多个解码器,将图像输入预训练好的VGG网络,提取不同的relu_n层结果作为编码输出,针对conv层结果训练Decoder进行解码,从而针对不同的relu1….relu5层设计出多个解码器,来对VGG卷积层结果进行还原。
[2]WCT层分为白化和上色两部操作,白化操作会使用式子从原图中提取出原图的内容形式,上色操作会将风格图的风格和内容形式进行拼合组成新的结果(有特定的计算式子,无需训练)。
[3]经过上面的两点可以得到中图的 编码-WCT-解码的结构,但是该怎么选取编码的relu层是个问题,不同的conv层各有其特点,因此为了有好的效果,设计出右侧的精细化处理流程,先粗后细。
2.由以上过程,可以发现唯一需要训练的是 第一步中的5个解码器,而训练过程和风格化图是没关系的,所以本模型无需针对每个风格单独训练模型,快速且方便,不过还有三个疑问:
[1]解码器具体是怎么训练的?
[2]WTC的过程和效果是怎样的?
[3]精细化处理的结构是否合理?
3.首先,作者使用了一个预训练的VGG-19作为编码器,对图片进行编码,保持编码器的权重不变,设计解码网络,利用损失函数设计解码器,这样得到的编解码器实际上是对图片进行一个恒等变换。损失函数分为两部分,一是像素重建损失,即生成图片与输入图片的均方误差;二是特征损失,即生成图与输入图在VGG-19的特征空间中的特征的均方误差。
4.针对另一个问题,WTC是在前人的基础上提出的,在将内容图和风格图经过编码过程后,先经过白化操作,式子如中图,先计算出内容图c的协方差矩阵的对角矩阵D、协方差矩阵的正交矩阵E,然后计算内容提取结果,右图是对编码到conv4经过白化再解码的结果,可发现内容图提取了主体结构,而去除了风格色。
5.之后是上色操作,上色是白化操作的逆操作,只不过求逆时是计算风格图经过Encoder后的协方 差矩阵的对角矩阵D、协方差矩阵的正交矩阵E参与计算进行还原,这样相当于在恢复原图时把风格图的风格融合到其中,下下图是合成的效果,后面的五个分别是从提取relu1到relu5进行还原的效果,可以发现更低层次的relu会保留更多的细节,但是风格化效果较差。
另外在从WCT传到decoder之前,我们可以通过使用参数控制风格化的把控,实验中多设α=0.6
6.最后是对精细化过程的思考,承接之前的结论,发现越小的relu层保存更多的细节,越大的relu层有更好的风格化效果,所以这里思考,如果使用一种循环的方式不断进行处理效果会怎样呢,
针对这一思考,作者提出了分别是有粗到细、由细到粗的两种结构,发现效果如下,由粗到细的过程拥有最佳的风格化效果。
总结
1.本文的模型结构较为清晰,且上色速度较快,并且通过对模型的适当利用,我们可以做多种任务,包括:
[1]单图片 双风格的合成,也许是选图的问题,感觉效果不怎么好。
[2]双风格合成单风格。
[3]有参数调控的纹理生成。
[4]有前后景分离的风格转化,这个挺有新意,但是作者没有开源控制单区域不变的效果,单区域不变的效果感觉更好(github上有展示),可以后续尝试。
[5]视频的风格化转换,经过试验发现本框架并没考虑视频的情况,所以效果并不好,抖动很严重,也许经过有光流稳定的Blind论文后处理效果会好一些。