相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻,Prisma 能够将一张普通的图像转换成各种艺术风格的图像,今天,我们将要介绍一下Prisma 这款软件背后的算法原理。就是发表于 2016 CVPR 一篇文章,
“ Image Style Transfer Using Convolutional Neural Networks”
算法的流程图主要如下:
总得来说,就是利用一个训练好的卷积神经网络 VGG-19,这个网络在ImageNet 上已经训练过了。
给定一张风格图像
a
和一张普通图像
content representation
在建立目标函数之前,我们需要先给出一些定义: 在CNN 中, 假设某一 layer 含有
所以,我们可以给出 content 的 cost function:
style representation
为了建立风格的representation,我们先利用 Gram matrix 去表示每一层各个 feature maps 之间的关系, Gl∈RNl×Nl , Glij 是 feature maps i,j 的内积:
利用 Gram matrix,我们可以建立每一层的关于 style 的 cost :
结合所有层,可以得到总的cost
最后将 content 和 style 的 cost 相结合,最终可以得到:
α,β 表示权值,在建立 Lcontent 的时候,用到了 VGG-19 的 conv4_2 层,而在建立 Lstyle 的时候,用到了VGG-19 的 conv1_1, conv2_1, conv3_1, conv4_1 以及 conv5_1。
下一篇博客里,我们将介绍基于 TensorFlow 的代码实现。