如何利用Docker、AWS和深度学习伪装成一个艺术家
《如何利用Docker、AWS和深度学习伪装成一个艺术家》要点: “能工摹形,巧匠窃意(Good artists copy,great artists steal)” —— 毕加索 在英国第四频道纪录片系列之“Faking it”中,Paul O’Hare(一名来自利物浦的画家和室内装潢师)需要在四个星期的时间内,将自己伪装成一个艺术家,并且尝试着去欺骗伦敦美术馆的评论家.我们将要展示如何利用Docker、AWS和深度学习来完成这个任务,并且完成任务所需的时间控制在半小时内,这甚至包含了你阅读这篇文章的时间.此外,所需的费用不高于$10. 神来之笔 为了加速伪装的速度,我们将会利用一个人工智能系统.这个系统基于深度神经网络,该网络能够创造出和某个艺术家风格一模一样的艺术作品(至少我们是无法辨别的).这是如何实现的?这是通过将一个图片的内容(肖像画或者风景画)和另外一个图片的样式(这通常是某个知名艺术家的作品)整合在一起实现的.我们将会使用一个叫做neural-style的算法来完成这个任务,它基于强大的深度网络来对图片进行处理. 听起来似乎很复杂,通过直接观看我们新创作的图片,就很容易认识到我们究竟在做什么.看到这些图片,也不枉我们花费上千小时来科研和写代码啊:).
这个算法神秘的效果是通过复用一个预建立好的深度神经网络(VGG19)来实现的,这个网络是由牛津大学的研究人员和ImageNet Challenge 2014 image processing competition的获胜者开发的.这个网络应用了多层卷积神经网络(CNNs),它能够将一个图片从原始像素提炼成更高层次的、更概念化的表示.事实上,抽象层次之高足以将图片的样式原样地表示出来.正是通过将原始像素转换成样式的方式,系统才能以某个图片的样式来重画另外一个图片的像素. 到目前为止,实现和部署这个算法不是一个简单的任务.我们将会在剩下的内容中解释如何做到它,并且所要求运行的的命令不超过三个.不过在这之前,让我们介绍些更细节的内容.除了VGG19,我们还需要:
问题我们已经很接近目标了.但是我们还需要解决最后一个挑战.工具、库、算法的创新、依赖和变化会使得运行环境被破坏.仅仅是大量的库和依赖就给运行算法带来了许多问题:
为了获得更加卓越的结果,我们需要用不同的图片,样式和参数来运行这个算法,而以上的所有软件是自动化这个过程的必需品.这带来了一个非常脆弱的环境,因为只要有任何不可逆转的更新被引入到GPU驱动或者torch库中,整个系统就会停止工作.这意味着不仅仅第一次的环境搭建是繁重的,并且为了保持系统运行,我们还需要一次次地重复这个过程.这离我们的理想状态非常遥远:艺术家灵感出现时,画布必须在手上.类似地,当我们创意迸发时,我们的工具必须能够立马运行,我们不能受制于一个永远在变化的环境. 很明显,Docker是解决这个问题的好办法.但是,还有一个棘手的问题:Docker将我们的进程从环境分离,同时分离了宿主机上的特定硬件资源.不幸的是,我们的深度神经网络算法需要对GPU的直接访问.Docker是基础方法,但是我们还需要其他的东西. 解决办法是nvidia-docker,它对docker进行了封装,允许容器利用NVIDIA GPU.通过这个命令,Docker会通过一个卷自动挂载宿主机上的GPU驱动到容器中,通过这个方式,任何Docker进程就能够在宿主机的GPU上运行代码了. 有了Docker,现在,我们对宿主机的要求直线下降:我们只需要安装Docker,nvidia-docker,以及正确的GPU驱动.剩下的依赖都包含在Docker镜像中,这个镜像通过Dockerfile创建,因此具有可重复创建的特性,同时这保证了所有不断变化的依赖都被固定在某个能够正确工作的版本上. 画图工具现在我们所需要的仅仅是一个能够运行我们系统的机器.我们使用了公有云,这里选择了AWS和它的GPU优化虚拟机.AWS提供了两个类型的GPU实例,但我们选择了最新的P2 AWS EC2实例.这些实例是专门为了深度学习而设计的,和我们现在的项目很符合.让我们开始构建它吧: $?docker-machine?create?—?driver?amazonec2?\ --?amazonec2-instance-type?p2.xlarge?\ --?amazonec2-access-key?***?\ --?amazonec2-secret-key?***?nvidia-docker 在运行这个命令前,你需要:
(编辑:ASP站长网) |