使用卷积神经网络的图片风格转换器
摘要:
使用不同风格渲染图片的语义信息是一件艰难的图像处理的任务。可以证明的是,之前方法的主要限制因素是缺乏能够明确的表示语义内容的图像表示,从而能够从风格中分离出图像内容。本文中我们采用来源于为了目标检测而优化的卷积神经网络的图片表示,这些表示使得高层次的图片信息明确。我们引入了一个艺术风格的神经算法,这个算法能够分离并重组自然图像的图片内容和风格。这个算法能够让我们产生高感知质量的图片,这些图片结合了任意照片的内容和很多名画的样子。我们的研究结果提供了深入了解卷积神经网络习得的深度图像表示的新的见解,并且显示它们在高层次的图片合成与操作中的潜力。
文章提出了采用卷积神经网络获得的图片特征图来进行图片的内容和风格的分离,从而完成风格转换的任务。文中具体的图片生成的框架如下:
实际上就是从一张由白噪声组成的图片开始,通过内容损失和风格损失两个损失函数的约束,从而生成一张指定内容,且指定风格的图片。
因此本文最大的贡献在于,提供了一种思路,利用卷积神经网络从图片中提取内容信息,以及利用卷积神经网络从图片中提取风格信息。
文中并不是具体提供一个风格转换的网络框架,因而文中应用的提取的特征的网络是16个卷积和5个池化组成的19层的VGG网络。
图片的内容表达
根据图片重构的表现,文中认为卷积网络中,高层的特征就是内容表达,其对应的内容表达的Loss定义如下:
式子中,上标l表示是卷积神经网络的第l层,下标i和j分别表示第i个卷积核,位置j,因此Flij表示的是第i个卷积核的位置j上激活结果(值得注意的是VGG中激活函数用的是relu函数)。
风格表达
文中认为图片的风格表达来自于同一层的不同特征之间的内积:
这里的F与上面的定义保持一致,由此由某一层l定义的风格损失如下式:
因此,风格损失定义如下:
在定义了内容损失和风格损失的以后,按照风格转换的任务要求,总的转换网络的损失函数如下:
要生成任务要求的图片,目标就是优化最小化这个整体的损失,文中并没有采用常用的梯度下降的方法,采用的是L-BFGS的优化算法,其实本身这个风格转换只是利用的VGG网络进行特征提取,实际上L-BFGS优化的是从一张由白噪声组成的图片,最终根据定义的损失优化得到最终的风格转换图片。
就是这样一个优化问题,作者讨论了几个细节:
1.损失函数中两个损失的权重α和β的取值
由于损失函数中两个损失的关系是用权重相乘后,线性组合起来的,因而文中讨论了这两个权重的比值关系。当α/β较小的情况下,损失更偏向包含更多的内容,因而会减少生成图片中风格属性;当α/β较大的情况下,损失更偏向包含更多的风格内容,因而会减少生成图片中包含的指定的内容。文中用4个实验结果图表明了这样的一个结果
2.卷积网络不同层的影响
在卷积网络中,越高的层次提取出来的特征表示更为抽象的语义信息,留下的关于图片的细节内容越少。文中对比了采用不同层提取出来的特征用于风格转换,可以看出采用更高层的特征用来转换风格,其图片内容的细节会出现丢失的情况。
3.不同的初始化对于最终转换图片的影响
除了从由白噪声组成的空白图片开始进行风格转换之外,还可以从指定的内容图片开始合成最后的图片,也可以从指定的风格图片开始合成最后的图片,但是文中通过不同的实验证明不同的初始化对于最终的图片影响并不大。
本文最终的讨论部分,作者首先关注了自己提出的图片风格转换这个模型产生图片的分辨率及其运算效率的问题,文中指出生成一张512*512分辨率的图片,需要K40GPU运行一个小时,这显然是不符合实时变化应用的要求的。
除此之外,作者发现生成的图片中,有一些噪声,但是作者认为这些噪声都是很常见的噪声,因而可以采用通用的一些去噪的算法去除,以得到更高质量的图片。
最后也是最重要的部分,文中讨论了从图片中分离出图片内容和图片风格的问题,其实际上是一个没有很好定义的问题。主要原因在于,很难明确的去定义一个图片的风格和一个图片的内容到底是什么。本文中给出的风格转换的定义就是,生成的图片像风格转换的图片,但是在物品场景上保持了内容图片的东西。但这个定义确实不是数学上精确的,同时也并不被普遍认同。但文章尝试了这种,只采用在目标检测任务中训练的卷积神经网络提取的特征,用于风格转换任务中,说明了卷积神经网络在图像处理方面,具有泛化性。
这篇文章在网上已经有人有实现的代码https://github.com/MingtaoGuo/Style-transfer-with-neural-algorithm