【65】神经风格迁移

1. 神经风格迁移
最近,卷积神经网络最有趣的应用是神经风格迁移
来看几个例子,比如这张照片,照片是在斯坦福大学拍摄的
如果想利用右边照片的风格来重新创造原本的照片,右边的是梵高的星空
神经风格迁移可以生成下面这张照片

【65】神经风格迁移

这仍是斯坦福大学的照片,但是用右边图像的风格画出来
为了描述如何实现神经网络风格迁移,将使用 C来表示内容图像,S表示风格图像,G表示生成的图像

另一个例子,比如,这张图片,C代表在旧金山的金门大桥,还有这张风格图片,是毕加索的风格
然后把两张照片结合起来,得到G这张毕加索风格的的金门大桥

【65】神经风格迁移

为了实现神经风格迁移,需要知道卷积网络提取的特征,在不同的神经网络,深层的、浅层的
而这些在 上节笔记中已经提及到了

关于神经风格迁移算法中展示的,是基于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的风格的相似度

【65】神经风格迁移

最后用两个超参数 a 和 β 来来确定内容代价和风格代价,两者之间的权重用两个超参数来确定
两个代价的权重似乎是多余的,其实一个超参数似乎就够了
但提出神经风格迁移的原始作者使用了两个不同的超参数,现在就保持一致计算吧

算法的运行是这样的:
对于代价函数J(G),为了生成一个新图像,接下来要做的是随机初始化生成图像G
它可能是100×100×3,可能是500×500×3,又或者是任何想要的尺寸
然后使用在之前定义的代价函数J(G)
现在可以做的是使用梯度下降的方法减小代价函数J(G),更新G:

【65】神经风格迁移

在这个步骤中,实际上更新的是图像G的像素值,也就是100×100×3,比如RGB通道的图片

这里有个例子

【65】神经风格迁移

假设从这张内容图片(编号1)和风格(编号2)图片开始,这是另一张公开的毕加索画作
当随机初始化G,随机初始化的生成图像就是这张随机选取像素的白噪声图(编号3)
接下来运行梯度下降算法,最小化代价函数J(G),逐步处理像素
这样慢慢得到一个生成图片(编号4、5、6),越来越像用风格图片的风格画出来的内容图片

上一篇:加州65认证测试需要资料文件


下一篇:Interlocked.Increment()函数详解 (转载)