程序员人生 网站导航

机器学习:利用卷积神经网络实现图像风格迁移 (一)

栏目:综合技术时间:2017-03-07 08:48:38

相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻,Prisma 能够将1张普通的图象转换成各种艺术风格的图象,今天,我们将要介绍1下Prisma 这款软件背后的算法原理。就是发表于 2016 CVPR 1篇文章,

“ Image Style Transfer Using Convolutional Neural Networks”

算法的流程图主要以下:

这里写图片描述

总得来讲,就是利用1个训练好的卷积神经网络 VGG⑴9,这个网络在ImageNet 上已训练过了。

给定1张风格图象 a 和1张普通图象 p,风格图象经过VGG⑴9 的时候在每一个卷积层会得到很多 feature maps, 这些feature maps 组成1个集合 A,一样的,普通图象 p 通过 VGG⑴9 的时候也会得到很多 feature maps,这些feature maps 组成1个集合 P,然后生成1张随机噪声图象 x, 随机噪声图象 x 通过VGG⑴9 的时候也会生成很多feature maps,这些 feature maps 构成集合 GF 分别对应集合 AP, 终究的优化函数是希望调剂 x 让 随机噪声图象 x 最后看起来既保持普通图象 p 的内容, 又有1定的风格图象 a 的风格。

content representation

在建立目标函数之前,我们需要先给出1些定义: 在CNN 中, 假定某1 layer 含有 Nl 个 filters, 那末将会生成 Nl 个 feature maps,每一个 feature map 的维度为 Ml , Ml 是 feature map 的 高与宽的乘积。所以每层 feature maps 的集合可以表示为 FlRNl×Ml , Flij 表示第 i个 filter在 position j 上的 activation。

所以,我们可以给出 content 的 cost function:

Lcontent(p,x,l)=12ij(FlijPlij)

style representation

为了建立风格的representation,我们先利用 Gram matrix 去表示每层各个 feature maps 之间的关系,GlRNl×Nl , Glij 是 feature maps i,j 的内积:

Glij=kFlikFljk

利用 Gram matrix,我们可以建立每层的关于 style 的 cost :

El=14N2lM2li,j(GlijAlij)2

结合所有层,可以得到总的cost

Lstyle(a,x)=l=0L
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐