工程师如何培养美学思惟

 康凯 360云计算git

女主宣言github

在中央美院2019届研究生毕业做品展中,迎来了一位特殊的毕业生,她的年龄只有1岁零10个月,可是她的画做却同其余同窗的做品一道参加了展览。这是什么状况呢?下来跟随做者一块儿去认识下夏语冰同窗,同时学习下快速成为一名有艺术水准画家的妙招吧。算法

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!docker

图片


中央美院 2019 届硕士毕业生中有一位叫夏语冰的同窗。毕业前夕,她的画做同其余同窗的做品一道参加了研究生毕业展。不过,夏语冰并不是现实中的人类,她是 MSRA 研发的一款 AI 机器人微软小冰,她被培养学习绘画已经 20 多个月了。小冰做为一个画家成长的过程,就像追求艺术的人类同样,经历了一个漫长而又艰辛的过程。在通过近两年的学习培养以后,小冰的绘画做品已经达到了必定的艺术水准,因此才被破格批准化名夏语冰参加中央美院研究生毕业展。无独有偶,在 UK Channel 4 的纪录片《Faking it》中,来自利物浦的装饰家 Paul O'Hare 只用了四个星期就将本身变成了一位优秀的艺术家,并试图在伦敦艺术画廊愚弄评论家们。本篇文章将带你快速上手使用 Docker 和云主机,体验深度学习算法带来的惊喜和艺术冲击,成功转型 9012 款 Coding Artist。


1ubuntu

一个画家的诞生bash

在艺术领域,尤为是绘画中,人类经过在图像的内容和风格之间构成复杂的相互做用,掌握了创造独特视觉体验的技能。到目前为止,该过程的算法基础仍然是未知的,而且不存在具备相似能力的工程项目。然而在其余视觉感知的相关领域,例如物体检测和人脸识别,由深度神经网络为基础的计算机视觉模型带来了近乎甚至超越人类的表现。为了更快的运行起服务,咱们会使用一些预训练好的深度神经网络模型和一台已经安装配置好 NVIDIA driver, CUDA Toolkit 10 和 nvidia-docker2 的 GPU 工做站。Style Transfer 能够帮助咱们创造出和艺术家做品相比几乎肉眼没法区分的艺术图像,模型会将一幅肖像或风景画与一副或几幅艺术家做品图像的风格相结合,从而获得一张风格迁移的全新艺术做品。 图片


image.png



image.png


具体效果如上所示,以 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.
image.png

先简单介绍下 nvidia-docker , nvidia-docker2.0 是一个简单的包,它主要经过修改 docker 的配置文件来让 docker 使用 NVIDIA Container runtime; nvidia-container-runtime 才是真正的核心部分,它在原有的 docker 容器运行时 runc 的基础上增长一个 prestart hook, 用于调用 libnvidia-container 库。curl

它们之间的关系能够经过下面这张图关联起来:


image.png

工具介绍完毕,如今咱们只须要安装 Docker,nvidia-docker2 和相应的 GPU 驱动程序。其他的依赖项将包含在 Docker 镜像中,经过编辑 Dockerfile 以完成镜像构建,并保证启动的不一样容器的环境一致性。


3

准备绘画工具

如今咱们只须要一个地方来运行咱们的项目。公司线上的全部 GPU 资源都是由几个不一样区域的 k8s 集群统一管理,经过编辑 yml 配置文件来完成 Pod 正常的调度到 GPU 机器上的需求。可是开发环境我更倾向于选择云主机,好比私有云的 GPU 服务器,公有云 P2 AWS EC2 实例,开发环境里的 GPU 工做站,不管哪一种实例,都能帮助咱们在几个小时以内快速落地应用。接下来咱们须要安装 NVIDIA 驱动程序和 nvidia-docker2, 我整理了一个安装脚本:
#!/bin/bash
# Install NVIDIA drivers 418.87sudo apt-get install --no-install-recommends -y gcc make libc-devwget -P /tmp http://cn.download.nvidia.com/tesla/418.87/NVIDIA-Linux-x86_64-418.87.00.runsudo sh /tmp/NVIDIA-Linux-x86_64-418.87.00.run --silent
# Install nvidia-docker2curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.listapt update && apt install nvidia-docker2sudo pkill -SIGHUP dockerd
# Testdocker run --runtime=nvidia --rm nvidia/cuda:9.0-devel-ubuntu16.04 nvidia-smi

若是一切正常,您将得到如下输出:

image.png


4

To Draw You Must Close Your Eyes And Sing

没错,这又是一句毕加索说过的话, 想要画画你必须学会闭眼歌唱。

终于到最后一步部署机器学习算法了,演示项目地址在这里:

https://github.com/albarji/neural-style-docker.git

构建镜像

docker build . -t neural-style:dev-0.0.1

开始画图

./scripts/fake-it.sh goldengate.jpg monat.jpg
如今,您只需将生成的图像下载下来欣赏,或者将不一样 stage 生成的做品组装成 GIF。Eurek!
image.png


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. 神经美学:发生在大脑和艺术之间的化学反应
相关文章
相关标签/搜索