Advertisement

工程师如何培养美学思维

阅读量:

女主宣言

在中央美院2019届研究生毕业作品展上,带来了一位特别的研究生——她年仅一岁十个月大。但她的画作却如同其他同学的作品一同参与到展览中来。这究竟是怎么回事呢?带领大家认识夏语冰同学,并传授快速掌握绘画技巧的方法。

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

640?wx_fmt=jpeg

中国艺术学院2019级硕士生夏语冰的画作与其他同学的作品一同参加了研究生毕业展。

然而夏语冰并非现实中的人类 她是基于 MSRA 开发的一款人工智能机器人‘微软小冰’ 她经过了大约两年的时间进行绘画训练 这一过程与人类追求艺术的道路相仿 经历了漫长而艰巨的成长历程 经过两年多的系统训练后 小 ice 的绘画作品已达到相当高的艺术水平 因此获得了破格化名的机会

不谋而合的是,在英国电视 channel 4播出的一档关于伪装与艺术的纪录片《Faking it》中,来自利物浦的装饰艺术家 Paul O'Hare仅用四周时间就成功转型成一位杰出的艺术品,并巧妙地蒙蔽了评论家们的双眼。

本文旨在帮助读者迅速掌握 Docker 和云主机的基本操作,并深入探索深度学习算法所带来的令人惊叹的技术魅力与美学价值。通过实践与创新设计的结合, 成功推出 9012 款 Coding Artist 作品集

1

一个画家的诞生

在艺术领域尤其是绘画方面人类通过将图像内容与风格间的相互作用复杂化来实现独特的视觉体验目前尚不清楚这一过程的本质机制并且尚未出现能够匹配现有技术能力的新项目相比之下在物体检测与人脸识别等其他相关领域中基于深度神经网络的方法已经在这些领域的表现超出了人类的能力

为了加速启动该服务,我们计划采用以下两种技术:一种是基于预训练深度神经网络模型;另一种是一台配备有NVIDIA driver、CUDA Toolkit 10以及nvidia-docker2的GPU工作站。

Style Transfer 能够帮助我们生成与艺术家作品难以察觉的艺术图像。当模型处理一幅肖像或风景画时,它能够结合其与一幅或多幅艺术家作品图像的风格特征,并由此生成一张风格迁移的艺术作品。

640?wx_fmt=jpeg
640?wx_fmt=jpeg
640?wx_fmt=png

具体效果可见下文,并参考图1莫奈的《日出·印象》,图3的内容与原始图像图2具有较高的相似性。此外,在天空部分也呈现了与图1相似的色调(橙黄色和草绿色),而绘画技巧上模仿了莫奈的手法。可以看出,在处理策略上存在明显的差异:对于前者风景图片,则着重保留画面内容;而对于后者莫奈风格的作品,则需要去除其细节内容以保留艺术风格

2

绘画面临的问题

在正式开始之前,在正式开始之前,
我们需要做好工作环境的准备工作及安装工作,
其中涉及到了运行软件所需的类库、框架以及软硬件需求。

首先,为了避免耗时较长的训练及测试流程 我们会采用一种创新的方法 即通过结合 GPU 和 CPU 来加速计算过程 并将整体等待时间优化至几分钟以内

NVIDIA GPU 驱动。

NVIDIA CUDA 开发套件,用于调用 GPU 驱动程序并提供高层次 API。

cudnn 库,用于 GPU 深度神经网络计算。

torch & protobuf,深度神经网络开发框架及依赖。

loadcaffe lua 模块,用于加载预训练网络 VGG19。

这些软件必须协同稳定地运行不同的运算过程以支撑我们的计算结果。然而由于大量依赖的存在而导致了一个新的挑战 如果我们在GPU驱动程序或Torch版本更新过程中引入了无法向下兼容的内容 那么可能导致整个工程崩溃 不仅在每次重新安装系统环境时需要这样做 而且每次组件和依赖更新也需要重复这一过程。想象一下 当灵感突然降临到艺术家的脑海里时 画布与工具必须随时准备使用 同理 作为开发者我们也需要一个稳定的系统运行环境来应对这些依赖相关的问题。

采用 Docker 容器化方法显著解决了该问题。Docker 通过实现与其他环境的有效隔离(包括主机中的特定硬件资源),成功地将运行时与宿主环境进行了分离。然而,在这种场景下,我们的深度神经网络算法对 GPU 资源有直接的需求。因此,在此背景下,我们同时需要集成 nvidia-docker 工具包以满足需求。

640?wx_fmt=png

首先简要介绍一下 NVIDIA Docker。其中 NVIDIA Docker 2.0 是一个相对简单的软件包。其主要功能体现在通过修改 Docker 配置文件实现对 NVIDIA Container Runtime的支持;而真正的核心组件则是 nvidia-container-runtime,在原有 Docker 容器运行时 runc 的基础上增加了预启动钩子以调用 libnvidia-container 库。

它们之间的关系可以通过下面这张图关联起来:

640?wx_fmt=png

工具介绍结束之后,请注意以下几点:首先我们需要仅安装 Docker 客户端软件以及 nvidia-docker2 版本,并对应地同步相关的 GPU 驱动程序。其余需要依赖的组件都将都包含在 Docker 镜像中,并通过编辑 Dockerfile 实现镜像构建过程,并确保启动的不同容器能够保持一致的运行环境

3

准备绘画工具

现在我们仅在一个地方即可运行我们的项目。公司线上所有的GPU资源均由多个k8s集群进行统一管理,在修改yml配置文件的基础上实现Pod正常调度至GPU服务器上。

然而,在开发环境中我更倾向于采用云主机方案。例如,在私有云环境下可以选择GPU服务器,在公有云环境下则可以选择AWS P2 EC2实例或者GPU工作站。无论采用哪种配置方案,在几小时内均能够快速部署应用并取得实际效果。

为完成NVIDIA驱动程序和nvidia-docker2的安装,请参考我已编写的一个完整的安装脚本。

复制代码
 #!/bin/bash

    
  
    
 	
    
 # Install NVIDIA drivers 418.87	
    
 sudo apt-get install --no-install-recommends -y gcc make libc-dev	
    
 wget -P /tmp http://cn.download.nvidia.com/tesla/418.87/NVIDIA-Linux-x86_64-418.87.00.run	
    
 sudo sh /tmp/NVIDIA-Linux-x86_64-418.87.00.run --silent	
    
  
    
 	
    
 # Install nvidia-docker2	
    
 curl -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.list	
    
 apt update && apt install nvidia-docker2	
    
 sudo pkill -SIGHUP dockerd	
    
  
    
 	
    
 # Test	
    
 docker run --runtime=nvidia --rm nvidia/cuda:9.0-devel-ubuntu16.04 nvidia-smi

如果一切正常,您将获得以下输出:

640?wx_fmt=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

当前,请您下载生成的图像并欣赏;或者,请您将各个阶段的作品拼接成GIF文件。

Eurek!

640?wx_fmt=png

5

References and Notes

A Neural Algorithm of Artistic Style

Visualizing and Understanding Convolutional Networks

How to Fake It As an Artist

neural-style-docker

神经美学:发生在大脑和艺术之间的化学反应

360云计算

拥有丰富技术和管理经验的专业技术分享平台

640?wx_fmt=png

全部评论 (0)

还没有任何评论哟~