文章地址:《A Neural Algorithm of Artistic Style》. arXiv:1508.06576
Github链接:https://github.com/jcjohnson/neural-style
对于好的艺术作品,尤其是画作,人们已经掌握了通过在一幅图像的内容和风格中构成复杂的相互影响来创作独特的视觉体验的技能。因此这个过程的算法基础是未知的,并且不存在具有相同能力的人工系统。然而,在其他基于视觉概念的关键领域,比如物体检测和人脸识别接近于人类的表现,最近已由一系列仿生的称为深度神经网络的模型做到了。这里,我们介绍一种基于深度神经网络的人工系统,,它可以生成具有高感知品质的艺术图片。这个系统使用神经表达来分离并再结合任意图片的内容和风格,为创建艺术图片提供了一种神经算法。此外,根据从表现最优的人工神经网络和生物视觉之中找到的显著的共同点,我们的工作给人们提供了人类是如何创建和认知艺术图片的算法层面的理解。
处理图像任务最有效的深度神经网络是卷积神经网络。卷积神经网络由几层小的在一个前馈中分层处理视觉信息的计算单元组成。每一层的单元都可以被理解为一个图像滤波器的集合,每个图像滤波器会从图像中提取某个特定的特征。因此,一个给定层的输出由所谓的的特征谱(feature map)组成:输入图片的不同被过滤(filtered)版本。
当卷积神经网络被训练用于物体检测,他们他们会生成一种关于图片的表达,使得物体信息随着处理层级的加深越来越明确。因此,沿着网络的处理层级,输入图像被转换为相较于它的具体的像素值,会越来越关注于实际的图片内容。通过只重构该层的特征谱,我们可以直接可视化每一层包含的有关输入图片的的信息。网络中更高阶的层捕获了物体在高阶层上的内容,和它们在输入图片中的排列(arrangement),但是并不重构原始图像的具体像素值。与此相反,从较低的层重构只会简单地重新生成原始图片的实际像素值。因此我们参考了网络再高层次上的特征反应作为内容表现(content representation)。
为了得到一个输入图片的风格表现,我们使用一个最初被设计用于捕获纹理信息的特征空间。这个特征空间是建立在网络中每一层的滤波器(filter)响应上的。它由空间范围内的特征图谱在不同滤波器响应之间的联系组成。(细节见Methods部分)。通过包括多个层级之间的联系,我们获得了输入图片的一个固定的,多层规模的表示,它只会捕获纹理信息而不获取全局的布置信息(arrangement)。
图像1:卷积神经网络(CNN)。一个给定的输入图像由一系列在CNN的各个处理阶段被过滤的图片呈现。在不同滤波器的数量随着处理层级不断增加的同时,滤波后图像的大小也被一些下采样机制(e.g. max_pooling)减小,导致了网络中每一层单元总数的减小。内容重构。我们可以通过一个已知特定层的网络的响应来重构输入图像,以可视化CNN在不同处理层级的信息。我们重构了输入图像在VGG模型上的‘conv1 1’ (a), ‘conv2 1’ (b), ‘conv3 1’ (c), ‘conv4 1’ (d) and ‘conv5 1’(e)。我们发现从较低层次重构的结果,几乎完美(a,b,c)。在网络较高层上,具体的像素信息已经在保存更高层次的内容时丢失。风格重构。在原始CNN的最高层,我们建立一个新的特征空间来捕获输入图片的风格。风格表现计算了CNN不同层中不同特征之间的联系。我们重构了输入图像的风格,建立在以下CNN的子集上( ‘conv1 1’ (a), ‘conv1 1’ and ‘conv2 1’ (b), ‘conv1 1’, ‘conv2 1’ and ‘conv3 1’ (c), ‘conv1 1’, ‘conv2 1’, ‘conv3 1’ and ‘conv4 1’ (d), ‘conv1 1’, ‘conv2 1’, ‘conv3 1’, ‘conv4 1’ and ‘conv5 1’ (e))。这样创建的图像在增长的规模上符合了给定图像的风格,同时丢弃了全局的场景应用的信息。
又一次,我们可以通过构建一个可以匹配风格表现的图像,来可视化由建立在网络的不同层上的风格特征空间捕获的信息。事实上,风格特征的重构产生纹理化的输入图片,捕获了他依照颜色和局部结构捕获的外观。此外,输入图片局部的图片大小和复杂度随着层数的增加而增加,也可以被解释为感受野的大小和特征复杂度增加。我们将这种多层的表示称为风格表示(stylerepresentation)。
这篇论文的关键发现在于,内容和风格在CNN中的表达是可以分开来的。也就是说,我们可以独立地操作两种表达来产生新的,视觉上有意义的图片。为了展示这个发现,我们生成了一些图片,融合了两幅不同的原图片的内容和风格表现。特别地,我们匹配了一张描绘the “Neckarfront” in Tubingen, Germany的照片的内容表示,和一些不同时期的著名艺术作品的风格表示。
这些图片是通过发现一张同时匹配照片的内容表现和格子的各自的艺术作品的风格表现的图片合成的。在原始照片的全局布置被保留的同时,组成全局景色的颜色和局部结构则是由艺术作品提供。十分有效地,这将照片渲染成艺术作品的风格,比如说合成图片的外观看起来和艺术作品很类似,尽管它的内容与照片中是一样的。
正如概述所说,风格表现是一个多层次的表示,包括了多层神经网络。正如我们在图片2中展示的那样,风格表达包括了整个神经网络的各个层级。风格也可以定义得更加局部化,通过只包含一小部分的低层级,能产生不同的视觉效果。当风格表现匹配到网络中更高的层级时,局部的图片结构会逐渐在更大的尺寸上匹配,产生一个更平滑更连续的视觉效果。因此,视觉上最有感染力的图片通常都是匹配到网络中的高层级的风格表现产生的。
当然,图片的内容和风格不能完全分离。当综合生成一张结合了某一张图片的内容和另一张图片的风格的图片时,通常并不存在一幅图像同时完美地匹配那两张图片的约束。然而,我们要在图片生成过程中最小化的损耗函数(loss function)分别包含了很好地分离开了的内容和风格两个方面。因此我们可以平滑地调节在重构内容或是风格时的偏重。着重强调风格会使得生成的图片可以匹配艺术作品的表现,实际上给了一个纹理化的版本,但却几乎不会显示照片中的内容。(图3,first column)。如果更着重与内容,结果中可以很清晰地确认到照片,但是艺术作品的风格就不能很好地匹配了。(图3,last column)对于一组特定的源图片的我们可以调节内容和风格的偏重,来产生视觉上有感染力的图片。
在这里我们展示了一个可以从图片中分理处内容和风格的人工神经网络系统,因此可以用另一幅图像的风格来改写某张图片的内容。我们通过生成一系列新的、艺术化的,结合了一些著名的画作的风格和任意选定的照片的内容合成的图像,来展示效果。特别地,我们的图片的内容和风格的神经表达源自于训练好的用于物体检测的并且表现很好的深度神经网络的特征响应。据我们所知,这是把自然图片的内容和风格的图片特征区分开的首次展示。之前的分离图片的内容和风格的工作所评估的图片的输入的复杂度更小,比如不同的手写字母或者人脸或者不同姿势的小图片。
在我们的展示中,我们提供了一个在不同的有名的艺术平的风格下的给定图片。这个问题通常是计算机视觉的一个被称为相片拟真处理技术(nonphotorealistic rendering)的分支所研究的。在概念上,最近似的相关方法是使用纹理转换来实现艺术风格转换(artistic style transfer)。然而,前面的这些方法主要基于相片拟真处理技术(nonphotorealistic rendering)来直接操作图像具体的像素信息。与此相反,通过使用用于物体识别而训练的深度神经网络,我们在特征空间执行的操作清楚地表示了图像在高层级网络的内容。
为了目标检测而训练出来的深度神经网络的特征已经被用到风格识别上,来根据艺术作品产生的时期分类。分类器是由原始的网络激活层训练而来,我们将其称为内容表现。我们猜测一个到固定的特征空间的转换,比如我们的风格变现可能实现比风格分类更好的效果。
一般来说,我们的从不同源混合内容和风格来合成图片的方法提供了一个新的,有趣的工具来学习感知和艺术、风格和内容独立的图片的神经表现。我们可以设计新颖的激励(novel stiluli(?))来介绍两个独立的,感知上有意义的变体的源:图片的外观和内容。我们预想这可能对很多关于视觉感知方面的研究会比较有用,范围从心理物理学(psychophysics)的功能影像(functional imaging)到电生理学(electrophysiological)的神经记录(neural recordings)。事实上,我们的工作提供了一个关于神经表达如何独立地捕获图像呈现的内容和风格的在算法上的理解。重要的是,我们的风格表达的数学形式生成了一个清晰的,可检验的关于图像外观到网络中的一个单独的神经元的假设。风格表达简单地计算了网络中不同种类型的神经元之间的关联性。提取的不同神经元间的相关性是一个生物上貌似可信的计算,也就是说,举个例子,由主要视觉系统中所谓的复杂细胞来执行。我们的结果表明:表现一个复杂细胞就像沿着腹侧流(ventral stream)进行不同处理过程的计算,可能是一个获得一个视觉输入的外观的内容独立的表达的方法。
总而言之,看到一个神经系统,被训练以完成生物视觉的核心计算任务之一,并自动学习能将图像的风格和内容分离开的图像表达,是一件很神奇的事情。可以这么解释:当网络再学习物体识别时,这个网络变得对于所有保留了物体特征的不同图片变量都保持不变。分解图像内容中的变种的表达和它的外观的变种在这个任务中十分实用。因此,我们从内容中提取风格的能力和我们创建和享受艺术的能力可能主要是我们具有强大推理能力的视觉系统的突出的特征。
在正文中展示的结果是以VGG-Net为基础产生的(VGG-Network——一个在一般视觉物体识别基准任务上的表现可以和人类相对抗的卷积神经网络)我们使用19层VGG-Network中的16个卷积层和5个池化层的特征空间。我们不使用其中任何的全连接层。这个模型是开源的,并且可以在caffe框架中找到。为了图片合成我们发现把最大池化替换成平均池化可以改进梯度流并且可以获得稍微更有感染力的结果,这也是为什么显示的图片都是使用平均池化生成的。
一般来说网络中的每一层都定义了非线性滤波器组(non-linear filter bank),它们的复杂度随着所在层的位置增加而增加。因此一个给定的输入图像 x⃗ x → 在每一层CNN对该图片的滤波器响应中都被编码了。某一层有 Nl N l 个不同的滤波器,有 Nl N l 个特征图谱,每个特征图谱的大小是 ml m l ,而 ml m l 是特征图谱的长和宽的乘积。所以第 l l 层的响应可以被储存在一个矩阵 Fl∈RNl×Ml F l ∈ R N l × M l , Flij F i j l 表示第 l l 层的第 i i 各滤波器的第 j j 个位置的值。为了可视化不同层编码的图像信息,我们对一个白噪声进行梯度下降来寻找另外一个可以匹配原图片的特征相应的图片。
因此,令 p⃗ p → 和 x⃗ x → 分别代表原始图像和生成的图像, Pl P l 和 Fl F l 则分别是它们各自在第 l l 层的特征表示。接着我们可以关于这两个特征表示定义平方误差损耗函数:
这个loss函数在第 l l 层的偏导为:
根据这个式子我们可以知道图像 x⃗ x → 对应的梯度可以通过标准的误差反向传播算法求到。因此,我们可以不断改变初始时随机取得的图像 x⃗ x → 直到它如同 p⃗ p → 一样生成了与CNN的特定层中相同的响应。图1中的5个内容重构层来自VGG的 ‘conv1_1’ (a), ‘conv2_1’ (b), ‘conv3_1’ (c), ‘conv4_1’ (d) and ‘conv5_1’(e)。在CNN顶端对网络的各层的响应,我们课建立一个风格表示(style representation),用来计算不同滤波器响应之间的相关性,期望是接替输入图像的空间扩展。这些特征相关性都是由Gram矩阵 Gl∈RNl×Nl G l ∈ R N l × N l 计算的,其中_ Glij G i j l 是向量化的特征图谱 i i 和 j j 的内积。
为了生成一个匹配给定秃顶图片风格的纹理(图1,风格重构),我们使用从一个白噪声图使用梯度下降来寻找另一幅与原始图片风格匹配的图像。这是通过最小化原始图片的Gram矩阵和生成图片的Gram矩阵的均方根距离实现的。
所以,令 a⃗ a → 和 x⃗ x → 分别表示原始图片和生成图片, Al A l 和 Gl G l 分别是他们各自在第 l l 层对应的风格表示。那一层的loss对总的loss的贡献为:
总共的loss为:
其中 wl w l 是每一层对总的loss函数的贡献的权重。 El E l 对应 l l 层的偏导数可以使用解析的方法求解出来:
El E l 在更低层的导数可以很轻易地使用标准差反向传播计算出来。图1中5个风格的重构是通过匹配在‘conv1_1’ (a), ‘conv1_1’ and ‘conv2_1’(b), ‘conv1_1’, ‘conv2_1’ and ‘conv3_1’(c),‘ conv1_1’, ‘conv2_1’, ‘conv3_1’ and ‘conv4_1’ (d),‘conv1_1’, ‘conv2_1’, ‘conv3_1’, ‘conv4_1’ and ‘conv5_1’ (e)的风格表现生成的。
为了生成混合了照片的内容和画作的风格的图片,我们共同地最小化了一个白噪声图像在网络中某一层照片的内容表达和画作在CNN的一系列层级中的风格表达的距离之和。因此,假设 p⃗ p → 为照片,并且 a⃗ a → 为画作。我们要最小化的loss function 为:
α α 和 β β 分别是内容和风格重构各自的权重参数。关于图2中的图像,我们在‘conv4 2’ 层上匹配内容表达,并且在‘conv1 1’, ‘conv2 1’, ‘conv3 1’, ‘conv4 1’ and ‘conv5 1’ ( wl=15 w l = 1 5 in those layers, wl = 0 in all other layers) 这5层上匹配风格表达。比例 αβ α β 要么取 1×10−3 1 × 10 − 3 ,要么取 1×10−3 1 × 10 − 3 。图3显示了对内容和风格重构的loss函数取不同的相关权重时的结果,和匹配风格表达在层:‘conv1 1’ (A), ‘conv1 1’ and ‘conv2 1’ (B), ‘conv1 1’, ‘conv2 1’ and ‘conv3 1’ (C),‘conv1 1’, ‘conv2 1’, ‘conv3 1’ and ‘conv4 1’ (D), ‘conv1 1’, ‘conv2 1’, ‘conv3 1’, ‘conv4 1’and ‘conv5 1’ (E) 上时的结果。参数 wl w l 总是等于1除以激活层的个数,总是一个非0值。
第一次翻译整篇论文,很不熟练,花掉了我大半天的时间。这次挑了一篇比较简单经典,自己也比较感兴趣的论文练手。其中很多地方觉得中文转过来后很别扭,原始的英文表述带了太多的定语,转成中文后难免变得有些冗长。文章中没有涉及太复杂的数学,只是用了一些简单的数学知识给出了神经风格转换的loss函数。下次自己再试着复现论文中的程序。