工程師如何培養美學思惟

 康凱 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. 神經美學:發生在大腦和藝術之間的化學反應
相關文章
相關標籤/搜索