风格迁移

  好久之前就想研究下风格迁移了,很酷炫的玩法~现在主要整理下风格迁移的基本方法,高分辨率的处理,以及计算效率问题。

风格迁移

  既要保留原本图片的基本内容,又想将其他喜欢的绘画风格叠加上来,就像下面的例子:  

  那么对喜欢的绘画风格,怎么将其风格,搬到另外一张图片上呢?

what is texture of a image?

  texture of image是描述图像风格的纹理脉络,具有很强的同质性和规律性。

如何描述一张图的绘画风格

  参考文献1,2,3都是Gatys的文章,提出了texture representation的方法。
  卷积网络的feature-map在分类任务中学习了图像的深层特征,在上篇博文CNN的隐层可视化中已经讲解了不少关于隐层的特征特性。这些feature-map如何表示图像的纹理特性呢?
  对某一隐层而言,假设有 Nl N l 个channel的feature-map,每个map的 size=Ml=height×width s i z e = M l = h e i g h t × w i d t h ,那么每两个channel间都计算各inner-production,再累和作为本层的Texture表示矩阵,数学上称之为Gram matrix(详见补充),定义如下

Gli,j=kFli,kFlj,k G i , j l = ∑ k F i , k l F j , k l
  其中, F F 表示feature-map被展开成1-D的向量;k表示某个feature-map被展开成向量后的pos-index; i,j i , j 表示同层内的不同feature-map的channel-index; l l 表示当前所在的隐层;GlRNl×Nl
  Gatys发现,Gram-Mat能够递进地表达Texture-Character,下图为例:  

  从左往右,层数越深,Style-Reconstrucation得到的弯弯曲曲的风格越明显。
  如果有两张图 x x 是原始图像,x^是生成图像, 如何表示texture上的距离呢?现定义如下的平方差距离如下:
El=14N2lM2li,j(G2^i,jG2i,j) E l = 1 4 N l 2 M l 2 ∑ i , j ( G 2 ^ i , j − G i , j 2 )
  将各个层的距离都合并到一起的loss如下:
Lstyle(x^,x)=l=0LwlEl L s t y l e ( x ^ , x ) = ∑ l = 0 L w l E l
  其中, wl w l 是每层对总texture-diff-loss的贡献权重,通常是选择型权重(内部值非0即1)。
   El E l Fl^i,j F l ^ i , j 计算梯度如下:
ElFl^i,j=1N2lM2l(Fl^)T(Gl^Gl)i,j0if Fl^i,j>0if Fl^i,j<0 ∂ E l ∂ F l ^ i , j = { 1 N l 2 M l 2 ( F l ^ ) T ( G l ^ − G l ) i , j i f   F l ^ i , j > 0 0 i f   F l ^ i , j < 0

  注意:风格上的差异需要多层来共同定义。
  注意:梯度那里 if F<0, =0 i f   F < 0 ,   ∂ = 0 是由于ReLU做激活函数。
  注意:Image论文里的Style/Content-Reconstruction是分别对feature-map和Gram-Mat正向估计出来的。

如何描述一张图的图片内容

  新生成的图还要保留原本的内容大体不变,那就需要图片内容表示方法,并且定义图像间内容上的差距。
  feature-map本身就表示了图像在不同层上的内容,虽然它描述了图像许多维特性,但是不妨碍我们将其作为内容的主要描述方式。
  对两张图片上内容的差距定义为平方差的形式如下:

Lcontent(x^,x,l)=12i,j(Fl^i,jFli,j)2 L c o n t e n t ( x ^ , x , l ) = 1 2 ∑ i , j ( F l ^ i , j − F i , j l ) 2
   Lcontent L c o n t e n t Fl^i,j F l ^ i , j 计算梯度如下:
LcontentFl^i,j={(Fl^Fl)i,j0if Fl^i,j>0if Fl^i,j<0 ∂ L c o n t e n t ∂ F l ^ i , j = { ( F l ^ − F l ) i , j i f   F l ^ i , j > 0 0 i f   F l ^ i , j < 0
  注意:图像间在内容上的差距仅需要1/2层就足矣区分。
  注意:在Image论文里的Fig. 1,图中下侧的”Content Reconstructions”不是反卷积(转置卷积)反向计算得到的,而是用 正向估计的方法估计出来的。为什么要这么搞呢,当时反卷积已经面世了,还要这么蛋疼地正向估计,猜测是跟作者想要说明的一个小结论有关系,在图Fig.1下的注释里,有句话说“层越深,像素细节越被丢掉,但是更高维的内容信息留下了”,用反向卷积对这个小结论可能不利吧,也可能再写个反卷积麻烦,猜的。

怎么做风格的调优优化

  这个就是怎么权衡内容和风格了,整体优化目标如下:

Ltotal=αLcontent+βLstyle L t o t a l = α L c o n t e n t + β L s t y l e
    看Image论文里是以 αβ[101,102,103,104] α β ∈ [ 10 − 1 , 10 − 2 , 10 − 3 , 10 − 4 ] 来生成渲染图像的,其中 103 10 − 3 为渲染效果较为明显。上个图,表示下优化的流程,左侧是style-image,右侧是原始图,中间是生成图。  


  Image论文里 仅用一个网络结构VGG-19(稍微调整结构),描述内容和风格距离的网络是用分类任务训练好的网络(参数固定), 生成网络用来不断调整输入,以便生成图像 x^:=x^lrLtotalx^ x ^ := x ^ − l r ∗ ∂ L t o t a l ∂ x ^ 在内容上接近原图,在风格上接近Style图,优化方法是 L-BFGS
  注意:初始化不管是随机还是用原始图或者风格图,无明显区别,生成很慢。

高分辨率的风格迁移方法

  上述风格迁移的方法,有两个重要的缺陷:
   1. 无法对不同图像尺度做迁移处理,受限于固定的输入尺寸。
   2. receptive-filed 是很小的(filter的尺寸,也即一个节点所能接收的输入范围),无法描述大范围的纹理特性

高分辨下怎么描述风格更准确

  怎么办呢?早在1984年就已经有了对此类问题的处理思路:pyramid-method,详细见参考5。
  Snelgrove,一个加拿大人(跟白求恩同一个国家),使用pyramid-method对texture的表示方法做了改进,原来的方法仅限一个固定尺寸的图像做输入,而pyramid-method则允许多个不同尺度的图像同时做输入。
  具体做法:对原始图像做Gaussian-lowpass (高斯滤波器+低通滤波器做门函数)卷积处理之后的multi-scale的结果(Gaussian pyramid,对前一层图像加Gaussian-lowpass 卷积处理,依次得到缩小的图像,详细见参考5),同时输入到CNN里面,计算其第8个隐层的Gram-mat,如下:

Gl,si,j=1NlMlkFl,si,kFl,sj,k G i , j l , s = 1 N l M l ∑ k F i , k l , s F j , k l , s

  单个输入在单个隐层上的texture的差距: Esl=i,j(G^si,jGsi,j)2 E l s = ∑ i , j ( G ^ i , j s − G i , j s ) 2
  多个输入在多个隐层上的texture的差距: Lstyle(x^,x)=Ss=0vsL1l=0wlEsl L s t y l e ( x ^ , x ) = ∑ s = 0 S v s ∑ l = 0 L − 1 w l E l s
  在训练的时候,将Gatys训练方法的 Lstyle L s t y l e 替换为pyramid-texture-representation形式的,其中 vs v s wl w l 都是选择性权重(内部值非0即1)。
  基本的multi-scale的风格迁移处理中,原始图像与生成图像的texture-loss计算结构如下图:


  注意:这里的合成图像的优化结构不同于Gatys的,后面有介绍。

Snelgrove方法 与 Gatys方法的效果对比

  为了说明本方法能抓住更大尺度上的texture信息,做了如下对比:  

Pyramid Method in Image Process

  详见参考5和6。

疑惑 与 解答

  1. 在Imag那篇文章的2小结,有提到”normalized the network by scaling the weights such that the mean activation of each convolutional filter over images and positions is equal to one”,不明白这是怎么个操作?
   解答:暂时没有弄明白。
  2. 在High-Resolution那篇文章里,是怎么解决输入多尺度问题的?
   解答:输入与卷积层直接相连,卷积计算是不关心输入尺寸的,避免了输入大小的限制,所以有几个输入就有几个输出,最后会加起来。
  3. 在High-Resolution的Discussion里面,提到一句“We use a simple optimization process to synthesize our images”,说明作者不是用的梯度迭代这种方法做的,而是一种更简单的方法,遗憾地是没有具体说是什么方法。后面紧接着提到了[Johnson 2016]年的工作,“feed-forwark neural networks can be trained to approximate this optimaization”,应该是跟这个有关系。后文有介绍。
   解答:确实是这个Johnson提出的实时计算的方法,详见后面的Real-Time Style Transfer章节。

效率 与 思考

  1)效率肯定可以提高。
  在Image论文里,生成一张风格迁移的图像,需要1个小时,还仅仅是对 [512×512] [ 512 × 512 ] 的,速度简直尴尬。国外已经有Prisma, Vinci, Artisto的商业产品了,说明速度问题被解决了,只是没公开其技术。
  2)优化可能改进。
  直接随机初始化,或者用风格图初始化,或者用待渲染图来初始化,都无法避开Gatys所讲方法中迭代更新这一步,感觉效率问题应该是在迭代渲染方法或初始化上做了巨大的改进。现有的合成逼近方法或者结构并不是唯一的估计方法,肯定还有其他方法更适合现在的场景。
  3)网络可能改进。
  另外关于网络结构,VGG都是比较庞大冗余的网络,也极有可能在网络上做了精简和适应性大调整。

Real-Time Style Transfer

  果然有更快的合成方法,Johnson简直是神助攻,提出feed-forward方法来加快优化合成的速度(参考7)。
  基本思路:用一个已经用训练好的分类任务的CNN模型作为图像style和content-loss计算的网络,再单独设计个网络来作为生成网络,对这个生成网络单独训练;在使用时,做次数有限地迭代(一次前向计算)来生成所需图像。

网络结构

  整个模型结构与生成网络参数如下:  

  其中,Residual-Block 是 3×3Conv+BN+ReLU+3×3Conv+BN 3 × 3 C o n v + B N + R e L U + 3 × 3 C o n v + B N 并行上identity-connect组成。
  可以看到生成图像的时间大大缩减了,将评估和生成的网络分开是重要一步,另外用Adam单独训练生成最优的估计网络是关键步骤,与我们上面对效率如何提高的思考第2点和第3点是相验证的。一句话解释: 用前向网络来快速估计最优解。

how do it

  训练生成网络如下:  

w=argminwEx,{yi}[i=1λili(fw(x),yi)] w ∗ = a r g m i n w E x , { y i } [ ∑ i = 1 λ i l i ( f w ( x ) , y i ) ]
  其中,生成网络得到的图像 y^=fw(x) y ^ = f w ( x ) x=yc x = y c ,其中 {yi} { y i } 表示 ys y s yc y c 的集合。这个式子写得这么复杂,可以简化为:  
w=argminwEyc,ys[αLstyle(fw(yc),ys)+βLcontent(fw(yc),yc)] w ∗ = a r g m i n w E y c , y s [ α L s t y l e ( f w ( y c ) , y s ) + β L c o n t e n t ( f w ( y c ) , y c ) ]
  训练使用数据 Microsoft CoCo dataset,用lr=0.001的Adam训练了2-epoch,无权重衰减和dropout-trick,VGG-16来自参考9。
   生成图像 y^=argminy[αLstyle(y,ys)+βLcontent(y,yc)+Lother] y ^ = a r g m i n y [ α L s t y l e ( y , y s ) + β L c o n t e n t ( y , y c ) + L o t h e r ]
  不同于gatys的迭代生成 y^=y y ^ = y ∗ 方法,这里是一次前向计算得到 y^=y y ^ = y ∗ ,速度提高的根本所在,一次计算即估计最优解。

补充知识
inner-porduct 与 Gram-Mat 与 Correlation-Mat

  举个例子,有向量 x x 组成矩阵MRN×3,其中 x1=[x1,1,x1,2,x1,3] x 1 = [ x 1 , 1 , x 1 , 2 , x 1 , 3 ] M=x1x2x3 M = [ x 1 x 2 x 3 ] ,可以认为是N个特征,共3个样本。
  内积 x1,x1=x1xT1=[x1,1,x1,2,x1,3]x1,1x1,2x1,3=3j=1xjxj ⟨ x 1 , x 1 ⟩ = x 1 x 1 T = [ x 1 , 1 , x 1 , 2 , x 1 , 3 ] [ x 1 , 1 x 1 , 2 x 1 , 3 ] = ∑ j = 1 3 x j x j
  则 M M x间的Gram-Matrix =MMT=x1,x1x2,x1x3,x1x1,x2x2,x2x3,x2x1,x3x2,x3x3,x3N,N = M ∗ M T = [ ⟨ x 1 , x 1 ⟩ ⟨ x 1 , x 2 ⟩ ⟨ x 1 , x 3 ⟩ ⟨ x 2 , x 1 ⟩ ⟨ x 2 , x 2 ⟩ ⟨ x 2 , x 3 ⟩ ⟨ x 3 , x 1 ⟩ ⟨ x 3 , x 2 ⟩ ⟨ x 3 , x 3 ⟩ ] N , N
  则 M M x间的Correlation-Matrix
=cov(x1,x1)cov(x2,x1)...cov(xN,x1)cov(x1,x2)cov(x2,x2)...cov(xN,x2)............cov(x1,xN)cov(x2,xN)cov(xN,xN) = [ c o v ( x 1 , x 1 ) c o v ( x 1 , x 2 ) . . . c o v ( x 1 , x N ) c o v ( x 2 , x 1 ) c o v ( x 2 , x 2 ) . . . c o v ( x 2 , x N ) . . . . . . . . . c o v ( x N , x 1 ) c o v ( x N , x 2 ) . . . c o v ( x N , x N ) ]
=E[x1x¯1]E[x1x¯1]E[x2x¯2]E[x1x¯1]E[x3x¯3]E[x1x¯1]E[x1x¯1]E[x2x¯2]E[x2x¯2]E[x2x2¯]E[x3x¯3]E[x2x2¯]E[x1x¯1]E[x3x¯3]E[x2x¯2]E[x3x¯3]E[x3x¯3]E[x3x¯3] = [ E [ x 1 − x ¯ 1 ] E [ x 1 − x ¯ 1 ] E [ x 1 − x ¯ 1 ] E [ x 2 − x ¯ 2 ] E [ x 1 − x ¯ 1 ] E [ x 3 − x ¯ 3 ] E [ x 2 − x ¯ 2 ] E [ x 1 − x ¯ 1 ] E [ x 2 − x ¯ 2 ] E [ x 2 − x 2 ¯ ] E [ x 2 − x ¯ 2 ] E [ x 3 − x ¯ 3 ] E [ x 3 − x ¯ 3 ] E [ x 1 − x ¯ 1 ] E [ x 3 − x ¯ 3 ] E [ x 2 − x 2 ¯ ] E [ x 3 − x ¯ 3 ] E [ x 3 − x ¯ 3 ] ]
对样本集的特征的协方差矩阵:
=133j=1(x1,jx¯1)(x1,jx¯1)3j=1(x2,jx¯2)(x1,jx¯1)3j=1(x3,jx¯3)(x1,jx¯1)3j=1(x1,jx¯1)(x2,jx¯2)3j=1(x2,jx¯2)(x2,jx¯2)3j=1(x3,jx¯3)(x2,jx¯2)3j=1(x1,jx¯1)(x3,jx¯3)3j=1(x2,jx¯2)(x3,jx¯3)3j=1(x3,jx¯3)(x3,jx¯3) = 1 3 [ ∑ j = 1 3 ( x 1 , j − x ¯ 1 ) ( x 1 , j − x ¯ 1 ) ∑ j = 1 3 ( x 1 , j − x ¯ 1 ) ( x 2 , j − x ¯ 2 ) ∑ j = 1 3 ( x 1 , j − x ¯ 1 ) ( x 3 , j − x ¯ 3 ) ∑ j = 1 3 ( x 2 , j − x ¯ 2 ) ( x 1 , j − x ¯ 1 ) ∑ j = 1 3 ( x 2 , j − x ¯ 2 ) ( x 2 , j − x ¯ 2 ) ∑ j = 1 3 ( x 2 , j − x ¯ 2 ) ( x 3 , j − x ¯ 3 ) ∑ j = 1 3 ( x 3 , j − x ¯ 3 ) ( x 1 , j − x ¯ 1 ) ∑ j = 1 3 ( x 3 , j − x ¯ 3 ) ( x 2 , j − x ¯ 2 ) ∑ j = 1 3 ( x 3 , j − x ¯ 3 ) ( x 3 , j − x ¯ 3 ) ]
就如PCA分解所讲,协方差是为了描述两个变量间的线性相关情况(线性相关性的分子部分是协方差)。我们更关注的是特征间的关系,在同层内feature-map是特征,所以对channel做相互间的协方差。
注意,有的地方计算协方差不是除以3,而是除以(3-1),这样是无偏估计,但是在这里并不影响计算结果。
发现,Gram-Mat和Correlation-Mat之间的区别是,去中心 x¯ − x ¯ 的动作,可以认为Gram-Mat是协方差的简略版,作用一致。

Pyramid-Method的图像处理应用举例

Basic Struction of Pyramid Method from Ref-6

VGG struction

参考
  1. 《2015-A Neural Algorithm of Artistic Style》
  2. 《2016-Image Style Transfer Using Convolutional Neural Networks》
  3. 《2015-Texture Synthesis Using Convolutional Neural Networks》
  4. 《2017-High-Resolution Multi-Scale Neural Texture Synthesis》
  5. 《1984-Pyramid Methods in Image Process》
  6. 《2006-Pyramid Methods in GPU-Based Image Processing》
  7. 《2016-Perceptual Losses for Real-Time Style Transfer and Super-Resolution》
  8. 《2016-Perceptual Losses for Real-Time Style Transfer and Super-Resolution:Supplementary Material》
  9. 《2014-Very deep convolutional networks for large-scale image recognition》
  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值