1. 神经风格迁移
最近,卷积神经网络最有趣的应用是神经风格迁移
来看几个例子,比如这张照片,照片是在斯坦福大学拍摄的
如果想利用右边照片的风格来重新创造原本的照片,右边的是梵高的星空
神经风格迁移可以生成下面这张照片
这仍是斯坦福大学的照片,但是用右边图像的风格画出来
为了描述如何实现神经网络风格迁移,将使用 C来表示内容图像,S表示风格图像,G表示生成的图像
另一个例子,比如,这张图片,C代表在旧金山的金门大桥,还有这张风格图片,是毕加索的风格
然后把两张照片结合起来,得到G这张毕加索风格的的金门大桥
为了实现神经风格迁移,需要知道卷积网络提取的特征,在不同的神经网络,深层的、浅层的
而这些在 上节笔记中已经提及到了
关于神经风格迁移算法中展示的,是基于Leon Gatys, Alexandra Ecker和Matthias Bethge的这篇论文
Leon A. Gatys, Alexander S. Ecker, Matthias Bethge, (2015). A Neural Algorithm of Artistic Style
2. 代价函数
要构建一个神经风格迁移系统,让为生成的图像定义一个代价函数
通过最小化代价函数,可以生成想要的任何图像
记住风格迁移问题,给一个内容图像C,给定一个风格图片S,而目标是生成一个新图片G
为了实现神经风格迁移,要做的是定义一个关于G的代价函数 J JJ 用来评判某个生成图像的好坏
将使用梯度下降法去最小化J JJ(G),以便于生成这个图像
为了判断生成图像的好坏,把这个代价函数定义为两个部分:
J content (C,G)
内容代价函数,它是用来度量生成图片G的内容与内容图片C的内容的相似度
J style (S,G)
风格代价函数,它是用来度量生成图片G的风格和风格图片S的风格的相似度
最后用两个超参数 a 和 β 来来确定内容代价和风格代价,两者之间的权重用两个超参数来确定
两个代价的权重似乎是多余的,其实一个超参数似乎就够了
但提出神经风格迁移的原始作者使用了两个不同的超参数,现在就保持一致计算吧
算法的运行是这样的:
对于代价函数J(G),为了生成一个新图像,接下来要做的是随机初始化生成图像G
它可能是100×100×3,可能是500×500×3,又或者是任何想要的尺寸
然后使用在之前定义的代价函数J(G)
现在可以做的是使用梯度下降的方法减小代价函数J(G),更新G:
在这个步骤中,实际上更新的是图像G的像素值,也就是100×100×3,比如RGB通道的图片
这里有个例子
假设从这张内容图片(编号1)和风格(编号2)图片开始,这是另一张公开的毕加索画作
当随机初始化G,随机初始化的生成图像就是这张随机选取像素的白噪声图(编号3)
接下来运行梯度下降算法,最小化代价函数J(G),逐步处理像素
这样慢慢得到一个生成图片(编号4、5、6),越来越像用风格图片的风格画出来的内容图片