3

科学与艺术

研究艺术的科学。研究科学的艺术。提升你的感知,特别是观察的方法。最终你会意识到事物之间是互相联系的。

莱昂纳多·达芬奇

说起科学,你最早联想的是什么?说到艺术,你脑中最先想起的又是什么?

根据百度百科,科学是指将各种知识通过细化分类研究形成逐渐完整的知识体系,而艺术用形象来反映现实但比现实有典型性的社会意识形态。根据字面理解,差别还是不小的。

吴军有种说法,事情从0分做到50分靠的是常识,如同打地基;从50分提高到90分,就需要靠科学技术;做到90分后,单纯靠科学技术有时就不能再提高了,则是靠经验和艺术了。言下之意,科学搞不定的还是要靠艺术。

但是,诺贝尔奖获得者卡罗·鲁比亚曾经说过,科学家做出杰出的发现,与艺术家绘制旷世之作,是没有差别的。这句话还被收录在新加坡科学艺术博物馆中。引言中达芬奇也表达了类似的观点。

科学和艺术之间的关系到底是什么呢?让我们从人工智能学习画风绘制作品的算法一探究竟。

前段时间,Gatys等德国学者提出了基于人工智能的艺术风格算法,通过卷积神经网络(Convolutional Neural Network,CNN)自动学习出图片的内容(Content)和风格(Style),然后通过算法把艺术风格传递到新的图片上去。

以百度上海研发中心的照片为例,先让CNN根据自动学习出建筑、树木等内容:

然后让CNN学习梵高印象派的《星空》:

根据梵高的风格,画出来的作品如下:

如果让CNN学习日本浮世绘风格的《神奈川冲浪图》:

那么画出来的作品如下:

如果让CNN学习张大千的泼墨风格:

那么画出来的作品如下:

下面这张图介绍了CNN是如何表示图像的内容和风格。左侧下面的风景图是提供内容,直接使用CNN每层的输出来表示图片的结构信息,通过还原的图片可以看到,层数越高则细节丢失越严重但高层次的结构信息仍然作为不变量保留完整。左侧上面的星空图是提供风格,可以使用CNN前后层输出的内积来获取纹理信息,通过还原的图片可以看到,层数越高风格幅度也越大。

为了把星空的风格转移到风景上去,可以从一张随机的白噪音的图片开始,把损失函数定义为到内容和风格的距离,然后使用梯度下降把损失函数降低到最小就可以了,如下图所示:

篇幅有限,更为详细的内容请参考Image Style Transfer Using Convolutional Neural Networks。

如果希望自己动手实践一下,百度云深度学习服务是个很好的选择,平台不但提供PaddlePaddle、TensorFlow等框架,还支持GPU集群,支持按照使用量付费方式,不需要任何硬件投入就能进入人工智能实战。

首先创建集群,选择TensorFlow镜像以及带K40的GPU集群:

SSH到集群之后,首先安装Git并克隆源代码:

apt-get update
apt-get install git
git clone https://github.com/anishathalye/neural-style.git

下载改造后的19层VGG网络:

wget http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat

如果模型经常使用,建议把模型保存到百度对象存储BOS中,然后通过BOS命令行工具复制过来,会快很多:

bce bos cp bos:/modelmart/vgg-19/imagenet-vgg-verydeep-19.mat .

现在便可以指定提供内容的图像和提供风格的绘画让人工智能来创作了:

python neural_style.py --content baidu-shanghai.jpg --styles starynight.jpg --output baidu-starynight.jpg

严格来说,算法中对于风格的定义仍然不够严谨,不过深度神经网络能够模拟视觉,自动学习图像的表示并区分内容和(从某种程度上)风格,也是颇为令人赞叹的。鉴于深度神经网络和生物视觉之间的紧密相关性,是否可以推测人类之所以能够区分内容与风格并创作或欣赏艺术,也是因为人类视觉神经系统有类似的结构和推理能力?

或许有一天,人工智能能够帮助人类提升感知,从特定的视角发现事物之间的互相联系,把科学和艺术真正融为一体。

 



张 琪

3 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注