《如何利用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
在運行這個命令前,你需要:
安裝NVIDIA驅動和nvidia-docker是第二個步驟.我們已經提供了一個簡單的腳本來完成這些事情:
$?docker-machine?ssh?nvidia-docker $?git?clone?https://github.com/albarji/neural-style-docker $?cd?neural-style-docker $?./scripts/install-nvidia.sh
如果一切順利,你將會得到以下輸出結果:
上面命令僅僅是安裝了nvidia軟件包,并且輸出了GPU卡的信息,以此確保一切正常.
畢加索如是說.但在閉上眼之前,我們還有最后一個步驟:部署我們的神奇算法:
$?./scripts/fake-it.sh?goldengate.jpg?vangogh.jpg
現在,你只需要下載產生的圖片,然后將它們發布在藝術論壇,比如說Devianart,或者將它們展示在本地的藝術館中:) 從你的電腦運行以下命令:
$?docker-machine?scp?-r?docker-nvidia:/home/ubuntu/neural-style-docker/output?.
然后在當前的目錄下你就能看到新產生的圖片了(在這個例子中,圖片的名字是goldengate_by_vangogh.jpg).
下面是更多的例子:
我將能夠填滿它,畢加索如是說.現在,我們也能夠做到!并且不需要花費一生的時間.我們已經提供了一些風格和內容,因此你只需要坐下來,放輕松,閉上眼,然后輕聲吟唱.通過將不同的風格應用在同一幅畫上,我們將能夠清楚地看到不同的畫家是如何用不同的風格來繪制同一個場景或肖像的.
為了表達對Docker的感謝,為了我們生命中的點點滴滴,我們決定開放我們自己的Docker美術館:
Afremov imagining Docker
Docker was used in the Roman Empire, as this old mosaic proves
?This alleyway depicts an urban graffiti of Docker
A modern dockerized city by Hundertwasser
A classic dockerized city by Renoir
Ancient greek pottery was distributed in containers
Picasso innovated a great deal using Docker
Van Gogh was impressed by Docker
Every math professor knows about the containerability theorem
Docker run potatoes
現在輪到你了.選擇你最喜歡的藝術家或者藝術作品,將你自己的圖片轉換成藝術品.請將你的成果分享給我們!并且關注我們的Twitter(@albarjip?and?@lherrerabenitez).
PS:結束創作后,不要忘記停止和刪除你的P2實例.
$?docker-machine?rm?nvidia-docker
不了解機器學習、數據挖掘和Docker的、并且想要了解它們的朋友,請點擊下面的鏈接:
我們想要優化和減少鏡像的體積.你能夠幫助我們嗎?
$?git?clone?https://github.com/albarji/neural-style-docker
$?sudo?nvidia-docker?build?-t?neural-style:2.0?.
$?sudo?nvidia-docker?run?—?rm?-v?$(pwd):/images?—?entrypoint?python?neural-style?/neural-style/variants.py?—?contents?img/docker.png?—?styles?img/starryNight.jpg?—?outfolder 文章出處:Docker(訂閱號ID:dockerone)
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4373.html