GAN:藝術家眼裡生成作品的創作利器
公眾號/AI前線
作者 | Helena Sarin
譯者 | Sambodhi
編輯 | Vincent
AI 前線導讀:如果仔細觀察藝術家與科學家利用計算機所做的事情,那就是讓賦予計算機自主性,設計了一定的規則讓它們自由發揮,從而得到了無法複製、美麗的結果。最終,這種藝術創作方式被稱為 “生成藝術”(Generative Art)。這一分類下的藝術品,都是集合了人類智慧,以及機器勞動的成果。今天,神經網路已經可以進行藝術創作了。GAN,即生成對抗網路(Generate Adversarial Network)就是其中的佼佼者。讓我們看看藝術家、程式員雙重身份的 Helena Sarin 是怎麼使用 GAN 來進行生成藝術創作的。
更多優質內容請關注微信公眾號“AI 前線”(ID:ai-front)
美國藝術家 Jackson Pollock 說過:“所有的一切,都是一場建築遊戲,有的人用刷子,有的人用鏟子,還有的人用鋼筆。”
而有些人,包括我自己,選擇了神經網路。我是一名藝術家,但同時也一直開發商業軟體。在我的生活中,藝術和程式設計曾是風馬牛不相及的事物。平時除了偶爾使用 Processing 和計算攝影進行生成藝術的處理外,我所有的藝術作品都是模擬的…… 直到我遇見 GAN(生成對抗網路,Generative Adversarial Networks,GAN)。
自從 2014 年生成對抗網路問世以來,機器學習社群已經湧現了許多關於該技術有深度的、技術性的貢獻(比如 http://u6.gg/faJFS)。雖然我沒有為此做出貢獻,但是,我願意跟讀者分享我的心得:為什麼 GAN 是優秀的藝術工具,以及我如何利用 GAN 進行生成藝術創作的方法。
首先,請先看看我的藝術作品,就是本文即將討論的一些具體例子:
藝術家眼中的 GAN
那麼,GAN 究竟是什麼,又是什麼原因讓藝術家對 GAN 如此青睞呢?
我們可以把藝術創作的過程想象成一種遊戲。這場遊戲是在藝術工作室進行的,有兩個玩家:評論家和學徒。學徒的目標是,在不抄襲大師原作的情況下,以大師的風格來創作作品。而評論家的目標則是判斷他所看到的藝術作品是由學徒還是大師創作的。如此一輪又一輪的判斷,學徒和評論家互相博弈。隨著學徒越來越擅長模仿大師的風格,評論家被迫更善於分辨出作品是大師還是學徒創作的;當評論家更容易辨別作品時,學徒也必須更加貼合大師的風格。
GAN 就是這種模擬這一過程的神經網路架構;評論家的角色扮演的是判別器網路 D,學徒的角色扮演的是生成器網路 G。隨著遊戲一輪接著一輪地進行,生成器網路模仿大師的風格(即輸入資料集的內容)就越來越逼真。
那你的角色是什麼呢?嗯,你就負責調整遊戲規則(網路超引數),同時也是一名策展人。作為策展人,你必須從 GAN 的輸出中進行選擇,因為 GAN 會生成不同結構、顏色和紋理組合的大量影象,與訓練過的影象有不同程度的差異。策展是一項很困難的工作:你會發現自己沉浸在有趣的影象中,想保留所有這些影象!
但是,用 GAN 進行創作特別令人振奮。有了 GAN,你就有了新的模型和新的資料集,就可以開始新的探索了。與其他任何數字工具不同,GAN 總是給人一種驚喜的感覺,它可以創作出更特別的效果,遠遠超過 Instagram 濾鏡或者普通的風格轉移。
為什麼選擇 CycleGAN?
用來生成藝術的深度學習技術有許多種類。最受歡迎的是:
- GAN/DCGAN,如上所述的原始方法:
GAN 處理影象四年來的變化(http://u6.gg/faKcY)
- 神經風格轉移,將一張影象的風格應用到另一張影象的內容:
使用卷積神經網路進行過影象風格轉移(http://u6.gg/faKeN)
- 成對影象翻譯技術,如 Pix2Pix,需要一個帶有成對的源影象和目標影象的資料集進行訓練:
使用 Pix2Pix 進行影象翻譯的一個例子
- 不成對影象翻譯技術,如 CycleGAN,就不像成對影象翻譯技術那樣訓練:
https://junyanz.github.io/CycleGAN/
上面提到的所有技術都創造出瞭如此精彩的藝術,那為什麼我最後選擇了 CycleGAN 呢?簡單地說,CycleGAN 能夠讓你訓練一個網路來使用一個數據集(輸入域)的形式轉換影象,以獲得另一個數據集(目標域)的紋理。這一點很重要:按照計算機視覺先驅 Alyosha Efros 的說法,我們 “仍處於紋理狀態”(still in the texture regime.)。
我第一次邂逅 CycleGAN,是因為一個工作專案,我對它的紋理模仿能力深深著迷,所以我想將它重新用於生成藝術。CycleGAN 讓你能夠以相對較小的資料集進行高解析度的繪畫,而模型可以快速訓練——速度非常快!
我的第一個專案是將美食攝影轉移成景物花卉素描的風格。每個資料集由 300 到 500 張高解析度影象組成。在整整一個月的時間裡,我只是進行了各種實驗,主要是圍繞輸入資料的裁剪大小。我花了幾個小時篩選輸出的影象,然後找出那些看起來很有趣的影象。
我的花卉素描變得非常魔幻,飲料的照片也變得有趣了……我的視覺世界爆炸了!最後,我帶著一絲惶恐,將這些影象分享給了我的藝術導師。她的反應是:“我對軟體一竅不通,但你一定對它很感興趣,繼續吧!”
於是我繼續鼓搗。隨著我對這個框架越來越熟悉,我繼續嘗試其他資料集的組合:從花卉素描到花卉圖片,從風景寫生到風光攝影等等,有些實驗失敗了,但其他實驗則非常成功。
實用建議
以下是幾個月來我在使用 CycleGAN 時學到的一些技巧:
- 正如最初的 CycleGAN 論文所指出的,“訓練資料的轉換通常比測試資料的轉換更有吸引力。” 所以在很多情況下,我使用訓練資料的子集進行推理:我的目標並非泛化,而是創造引人入勝的藝術。
- 通常,我會在較大的資料集中開始對模型進行初始訓練,然後在較小的子集上對其進行微調,以達到特定的效果。此處有一個例子:這些影象是日本俳句書籍封面上精心調整的風景模型生成的。
- 當模型訓練時,儀表板值得一看。CycleGAN 的偏好設定可以設定顯示頻率,我設定了相當高的頻率。對我來說,這一過程就像冥想一樣,盯著 visdom 的 UI 介面,進入物我兩忘的境界。
- 隨著訓練的進展,結果變得越來越有趣,檢查點的儲存頻率增多。
- 儲存實驗的所有引數,以便稍後可以重新創造它們。(不過說實話,如果我不能重現一些實驗結果,那也沒什麼大不了的,因為新的實驗會帶來新的興奮!)
- 在推理過程中,目標集中的影象不會影響生成的影象的樣子。這並不意味著你不需要在乎在目標集裡有什麼影象。記住,你有兩個生成器。不要讓第二個生成器空閒——可能會出現有趣的偽影,比如重現影象,其中生成器嘗試重建輸入的影象。
- 在預設情況下,CycleGAN 使用例項歸一化和批大小為 1。但是一旦你學會了這些規則,你就可以打破這一限制。如果你使用批歸一化和更大的批大小會怎樣?
- 另一項值得探索的技術是 CycleGAN 鏈:訓練一個模型並使用結果訓練另一個模型。
下面的圖片是最後兩項的插圖——我使用了一組花卉和一組肖畫素描。第一個模型使用批歸一化在這兩個模型之間進行灰度轉換。第二個模型對第一個模型的結果進行了放大和著色。
- 小心額外的紋理,尤其是在貼圖訓練時。我最初的實驗是把食物變成靜物畫,然後大部分情況下變成像粥一樣的畫;所以花點時間來整理訓練資料集是值得的。
AI 前線注:紋理是指高解析度重複圖案,如磚牆中的線條或鏈環柵欄中的線條。
另一方面,正如我的水彩老師曾經說過的: Let the medium do it. 是的,我的素描只是提供了基礎,然後我讓網路做它的事情;我不干涉,我所做的只是不斷調整 #brushGAN 工具包(由儲存的經過訓練的模型、輸入資料集等組成)。
這就引入了下一點:如果磁碟空間允許的話,儲存儘可能多的模型。使用這些模型來進行個人風格的轉移:這樣的結果每次都會超過標準的 “Starry Nights” 轉換。
考慮一下這個列表,你就可以開始探索 CycleGAN 和其他 GAN 了。這些技巧只是粗略的指導,在你的藝術旅程中,我相信你會根據資料集、藝術敏感性和目標來提出自己的技巧。最重要的是要注意你的 GAN 生成的影象,這樣你就可以調整訓練過程。
工具的使用
到目前為止,我們已經介紹了常規步驟:收集一些資料,然後開始使用它。現在我們來談談工具的使用。
不管你為生成藝術選擇什麼樣的神經網路,深度學習的設定或多或少都是一樣的。在過去一年左右的時間裡,我所有的工作都是在我自己構建的伺服器上完成的。我最初的設定是在 AWS 上執行的,儘管它在計算方面更便宜,但儲存是一個非常頭疼的問題——我浪費了大量時間將資料從捲到 S3 來回移動,而忘記斷開卷的連線。現在我執行我自己的伺服器,配備 GTX1080 GPU、275GB SSD 和兩個 1TB 硬碟,雖然我仍然不斷地耗盡空間,但是我對儲存的額外控制是值得的。
然後就是超引數,其中最重要的無疑是影象的大小。CycleGAN 設定允許你指定影象裁剪,但最大的可能解析度取決於你的硬體。在我的 GTX1080 上,用於訓練的最大解析度是 400×400。通過推理,最大解析度還可以更高,但結果往往會受到影響。為了讓第一次實驗變得簡單,你可能只需用 CycleGAN 的預設設定,其中影象被載入並重新縮放到 278×278,隨機裁剪到 256×256。我在 1024/800/400 的不同解析度下訓練過模型,有時從頭開始,有時從某個尺寸開始,然後隨著訓練的進行而改變。
關於資料
不要忘記資料集!眾所周知,要訓練任何深度學習網路,都需要大量的資料。許多 AI 藝術家都是使用 Web 抓取來獲取資料集。但是,我的做法與他們不同:我決定使用我自己的資料集,我指的是我個人照片和繪畫。這樣的做法有如下明顯的優勢:
- 將賦予你的藝術獨特性和凝聚力,無論是在風格和題材上。
- 無需擔心版權問題。
- 無需大量預處理即可得到高解析度影象。
- 使用攝像頭,可以很輕鬆建立特定顏色和構圖的資料集。
關於我的資料儲存庫的組織也值得說幾句。下面是我融合使用的資料結構和處理管道:
- 常規預處理:從智慧手機上下載並調整照片。
- 資料集組成:根據主題、內容、顏色、紋理等對照片進行區分。
- 三種儲存型別:
- 遠端儲存(像 Flickr 這樣的雲服務):用於儲存原始影象。Flickr 非常適合用來組織圖片,提供了很不錯的編輯器和無限的儲存空間。
- 硬碟:用來未使用的資料集和權重的長期儲存。
- 固態硬碟:用來資料集和權重的中短期儲存。我的固態硬碟建了幾個資料夾,包括一個用於原始影象的通用儲存庫和預處理影象的 GAN 特定儲存庫。
- GAN 特定批處理:我在通用資料集 repo 中使用 Jupyter notebook,帶有用於影象切割、Canny 邊緣檢測(針對 Pix2Pix)、影象分類的實用程式等等。
我的固態硬碟中資料夾結構
下一步向何處發展?
至此,CycleGAN 已成為我的藝術家工具包的重要組成部分。即使我開始嘗試新型別的 GAN,CycleGAN 仍然是生成管道的一部分:現在我將 GAN 輸出連線到 CycleGAN,以便於傳統的 CV 技術一起進行去模糊、超解析度和著色等處理。下面是使用 CycleGAN 將 SNGAN 的輸出從 128×128 提高到 512×512 的例子:
你可以現在安裝 CycleGAN 並試用一番。我一直在用 CycleGAN 團隊的 PyTorch 實現(也可以同樣的代價獲得 Pix2Pix)。使用 CycleGAN 是一件非常愉快的事情,因為它的程式碼乾淨、文件完整、組織良好,而且它的訓練儀表板非常出色。
對我來說,這些實驗最好的部分就是讓我的視覺世界更加豐富,讓我更多地觀察和欣賞顏色和紋理,讓我有了新的靈感和新的專案,促使我更想繪畫、攝影。
原文連結:
https://thegradient.pub/playing-a-game-of-ganstruction/