前面我们介绍了基于卷积神经网络的图像风格迁移,利用一张content image 和 style image,可以让最终的图像既保留content image的基本结构,又能显示一定的style image的风格,今天我们介绍另外一篇类似的文章: Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis,这篇文章与之前的 Image Style Transfer Using Convolutional Neural Networks 的区别在于引入了 Markov Random Fields, 不再是像素的一一对应了,利用MRF,可以将feature maps 分成很多的patch,找 patch之间的匹配。
给定一张content image xc∈Rwc×hc 以及一张 style image xx∈Rws×hs,我们希望合成一张图像 x∈Rwc×hc, 将 style image的风格迁移到 content image 的 layout,并且利用 MRF 使得合成图像的 local patchs 与 style image 的类似,我们可以建立如下的能量函数:
E=Es(Φ(x),Φ(xs))+α1Ec(Φ(x),Φ(xc))+α2Υ(x)
我们需要求解上面的优化函数得到最优的 x
x=argminxEs(Φ(x),Φ(xs))+α1Ec(Φ(x),Φ(xc))+α2Υ(x)
Es 表示 style loss function,Φ(x) 表示神经网络中某些层里 feature maps 的一个集合,Ec 表示 content loss function,Υ(x) 是一个正则化选项,用来平滑最终的合成图像。接下来,我们可以看看每一个 loss function 的具体表达式:
Es(Φ(x),Φ(xs))=∑i=1m∥∥Ψi(Φ(x))−ΨNN(i)(Φ(xs))∥∥2
这里 m 表示Ψ(Φ(x)) 的基数,即local patch 的个数, Ψi(Φ(x)) 表示 Φ(x) 的一个local patch,而 ΨNN(i)(Φ(xs)) 表示 Φ(xs) 中 与 patch Ψi(Φ(x)) 最匹配的一个 patch,即
NNi=argminj=1,2...msΨi(Φ(x))⋅Ψj(Φ(xs))|Ψi(Φ(x))|⋅|Ψj(Φ(xs))|
简单来说,就是将feature maps 的集合 Φ(x) 生成很多local patch,这些 local patch 组成一个 patch 的集合 Ψ(Φ(x)), 在这个 patch 的集合中,每一个patch Ψi(Φ(x)) 在 Ψ(Φ(xs)) 都有一个最佳的匹配,Es(Φ(x),Φ(xs)) 计算的不是 pixel 之间的平方差,而是 patch 与 patch 之间的平方差,所有比起之前的图像合成算法,这个方法利用了MRF, 去寻找patch 与 patch 之间的关系,这样可以更好的保留局部的信息,但是算法也变得更加复杂。
content loss function 和之前的一样,计算feature maps 之间的欧氏距离:
Ec(x)=∥Φ(x)−Φ(xc)∥2
正则化选项的表达式如下:
Υ(x)=∑i,j((xi,j+1−xi,j)2+(xi+1,j−xi,j)2)
这个相当于在水平方向和垂直方向做差值。
将这三项结合起来,利用BP算法,求最终的合成图像 x.