在中央美院 2019 届研究生毕业作品展中,迎来了一位特殊的毕业生,她的年龄只有 1 岁零 10 个月,但是她的画作却同其他同学的作品一道参加了展览。这是什么情况呢?下来跟随作者一起去认识下夏语冰同学,同时学习下快速成为一名有艺术水准画家的妙招吧。
中央美院 2019 届硕士毕业生中有一位叫夏语冰的同学。毕业前夕,她的画作同其他同学的作品一道参加了研究生毕业展。
不过,夏语冰并非现实中的人类,她是 MSRA 研发的一款 AI 机器人微软小冰,她被培养学习绘画已经 20 多个月了。小冰作为一个画家成长的过程,就像追求艺术的人类一样,经历了一个漫长而又艰辛的过程。在经过近两年的学习培养之后,小冰的绘画作品已经达到了一定的艺术水准,所以才被破格批准化名夏语冰参加中央美院研究生毕业展。
无独有偶,在 UK Channel 4 的纪录片《Faking it》中,来自利物浦的装饰家 Paul O’Hare 只用了四个星期就将自己变成了一位优秀的艺术家,并试图在伦敦艺术画廊愚弄评论家们。
本篇文章将带你快速上手使用 Docker 和云主机,体验深度学习算法带来的惊喜和艺术冲击,成功转型 9012 款 Coding Artist。
1 一个画家的诞生
在艺术领域,尤其是绘画中,人类通过在图像的内容和风格之间构成复杂的相互作用,掌握了创造独特视觉体验的技能。到目前为止,该过程的算法基础仍然是未知的,并且不存在具有类似能力的工程项目。然而在其他视觉感知的相关领域,例如物体检测和人脸识别,由深度神经网络为基础的计算机视觉模型带来了近乎甚至超越人类的表现。
为了更快的运行起服务,我们会使用一些预训练好的深度神经网络模型和一台已经安装配置好 NVIDIA driver, CUDA Toolkit 10 和 nvidia-docker2 的 GPU 工作站。
Style Transfer 可以帮助我们创造出和艺术家作品相比几乎肉眼无法区分的艺术图像,模型会将一幅肖像或风景画与一副或几幅艺术家作品图像的风格相结合,从而得到一张风格迁移的全新艺术作品。
具体效果如上所示,以 Figure 1 莫奈的《日出·印象》为例,Figure 3 的内容和原始图像 Figure 2 相近,除此之外天空中还呈现了 Figure 1 中的橙黄色和草绿色,而绘画笔法上也继承了莫奈的笔触,画面的整体色调和 Figure 1 一致。可以看出,算法对提供绘画素材的风景图片和提供绘画风格素材的《日出·印象》两者的处理方式是不同的,对前者着重保留画面内容,对后者则是要剔除掉其内容而保留绘画风格。
2 绘画面临的问题
在我们正式开始之前,我们还需要完成工作环境的准备和安装,包括运行软件所需要的类库,框架和软硬件依赖。
首先,因为我们不想花费数小时甚至数周来进行训练和测试。我们会将图形处理单元 GPU 与传统 CPU 一起使用,以加速我们的深度学习算法并将等待时间缩短到几分钟。
NVIDIA GPU 驱动。
NVIDIA CUDA 开发套件,用于调用 GPU 驱动程序并提供高层次 API。
cudnn 库,用于 GPU 深度神经网络计算。
torch & protobuf,深度神经网络开发框架及依赖。
loadcaffe lua 模块,用于加载预训练网络 VGG19。
我们需要以上所有的软件来协同稳定运行不同的运算过程已获得我们期望的计算结果,同时大量的依赖又导致了一个新的问题,如果 GPU 驱动程序或者 Torch 版本更新中引入了任何不能向下兼容的内容,那么整个工程将很有可能 crash 掉,这意味着不仅每次重新安装系统环境的工作是反复的,而且我们还需要在每次组件和依赖更新时仍不断重复这一过程。试想当灵感突然冲击艺术家的大脑时,画布和工具必须在手边,同理,我们开发者也需要一个稳定的系统运行环境来解决依赖等问题。
介入容器化使用 Docker 是这个问题的有效解决方案。Docker 将我们的进程与其环境隔离开来,其中包括主机中的特定硬件资源。但是我们的深度神经网络算法需要直接访问 GPU 资源。为了解决这一问题,我们还需要引入 nvidia-docker.
先简单介绍下 nvidia-docker , nvidia-docker2.0 是一个简单的包,它主要通过修改 docker 的配置文件来让 docker 使用 NVIDIA Container runtime; nvidia-container-runtime 才是真正的核心部分,它在原有的 docker 容器运行时 runc 的基础上增加一个 prestart hook, 用于调用 libnvidia-container 库。
它们之间的关系可以通过下面这张图关联起来:
工具介绍完毕,现在我们只需要安装 Docker,nvidia-docker2 和相应的 GPU 驱动程序。其余的依赖项将包含在 Docker 镜像中,通过编辑 Dockerfile 以完成镜像构建,并保证启动的不同容器的环境一致性。
3 准备绘画工具
现在我们只需要一个地方来运行我们的项目。公司线上的所有 GPU 资源都是由几个不同区域的 k8s 集群统一管理,通过编辑 yml 配置文件来完成 Pod 正常的调度到 GPU 机器上的需求。
但是开发环境我更倾向于选择云主机,比如私有云的 GPU 服务器,公有云 P2 AWS EC2 实例,开发环境里的 GPU 工作站,无论哪种实例,都能帮助我们在几个小时之内快速落地应用。
接下来我们需要安装 NVIDIA 驱动程序和 nvidia-docker2, 我整理了一个安装脚本:
如果一切正常,您将获得以下输出:
4 To Draw You Must Close Your Eyes And Sing
没错,这又是一句毕加索说过的话, 想要画画你必须学会闭眼歌唱。
终于到最后一步部署机器学习算法了,演示项目地址在这里:
构建镜像
开始画图
现在,您只需将生成的图像下载下来欣赏,或者将不同 stage 生成的作品组装成 GIF。
Eurek!
5 References and Notes
1.A Neural Algorithm of Artistic Style
2.Visualizing and Understanding Convolutional Networks
3.How to Fake It As an Artist
4.neural-style-docker
5.神经美学:发生在大脑和艺术之间的化学反应
本文转载自公众号 360 云计算(ID:hulktalk)。
原文链接:
https://mp.weixin.qq.com/s/F8W362PH7uNRVaUBv73wwA
评论