20分鐘,這個AI就能創(chuàng)造復(fù)雜藝術(shù)作品!1080顯卡就能跑
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
20分鐘生成復(fù)雜的藝術(shù)作品,而且還是用英偉達(dá)上上代的1080顯卡?
現(xiàn)在神經(jīng)網(wǎng)絡(luò)上手門檻這么親民了嗎?
沒錯,這是一個叫做neural-style-pt的風(fēng)格遷移模型,基于Pytorch實(shí)現(xiàn),而且剛剛開源!
有關(guān)這個算法模型的話題在Reddit上才發(fā)布一天,熱度接近2000。

neural-style-pt,真的酷炫又親民嗎?
豐富的融合方式
neural-style-pt是論文A Neural Algorithm of Artistic Style的Pytorch實(shí)現(xiàn)。
論文介紹了一種利用卷積神經(jīng)網(wǎng)絡(luò)將一張圖片的內(nèi)容,與另一張圖片的風(fēng)格相結(jié)合的算法,就是我們熟知的“風(fēng)格遷移”網(wǎng)絡(luò)。
比如,將《星空》的藝術(shù)風(fēng)格映射到一張斯坦福校園的夜景照片上:

或者根據(jù)給定圖像的不同藝術(shù)風(fēng)格,分別融合進(jìn)目標(biāo)圖片:

除了“分別”融合,還能把多個藝術(shù)風(fēng)格融進(jìn)一張圖片:

從左上角順時針開始風(fēng)格分別為”星空 “+”吶喊”、”吶喊 “+”構(gòu)圖七(瓦西里·康定斯基油畫)“、”坐著的裸女(莫蒂里安尼油畫) “+”構(gòu)圖七”、”坐著的裸體 “+”星空”。
在進(jìn)行風(fēng)格遷移時,添加“-original_colors 1”指令,還可以只改變風(fēng)格,不改變原圖顏色:

1080卡就能跑?
根據(jù)后臺和優(yōu)化器的不同,算法運(yùn)行速度會有很大差異。
在Tesla K80上使用512像素圖片迭代500次時間參考:
- 后臺nn、優(yōu)化器L-BFGS: 117秒
- 后臺nn、優(yōu)化器 ADAM: 100秒
- 后臺cudnn -優(yōu)化器L-BFGS: 124秒
- 后臺cudnn -優(yōu)化器ADAM:107秒
- 后臺cudnn -cudnn_autotune -優(yōu)化器L-BFGS: 109秒
- 后臺cudnn -cudnn_autotune -優(yōu)化器ADAM: 91秒
而在GTX 1080上,相同基準(zhǔn)下時間更快:
- 后端nn -優(yōu)化器L-BFGS: 56秒
- 后臺nn -優(yōu)化器 ADAM: 38秒
- 后臺cudnn -優(yōu)化器L-BFGS: 40秒
- 后臺cudnn -優(yōu)化器ADAM:40秒
- 后臺cudnn -cudnn_autotune -優(yōu)化器 lbfgs: 23秒
- 后臺cudnn -cudnn_autotune -優(yōu)化器ADAM: 24秒
結(jié)合當(dāng)下1080卡的售價,不得不說,這樣的門檻,對于機(jī)器學(xué)習(xí)來說,已經(jīng)很香了。
默認(rèn)情況下,neural-style-pt使用后端進(jìn)行卷積,L-BFGS進(jìn)行優(yōu)化。但會使用大量的內(nèi)存,可以通過以下方法來減少內(nèi)存的使用。
使用cuDNN,添加-backend cudnn來使用cuDNN后端。而使用ADAM時,添加-optimizer adam來使用ADAM而不是L-BFGS。
在默認(rèn)設(shè)置下,neural-style-pt在系統(tǒng)上使用了大約3.7GB的GPU內(nèi)存;切換到ADAM和cuDNN可以將GPU內(nèi)存占用減少到大約1GB。
如何上手試玩
安裝neural-style-pt,首先要準(zhǔn)備好Pytorch。
然后,使用下方一句話指令就能安裝已經(jīng)訓(xùn)練好的模型:
- python models/download_models.py
安裝完以后,上手試玩也很簡單,一行代碼就能實(shí)現(xiàn):
- python neural_style.py -style_image-content_image
如果要載入多種風(fēng)格,需要分隔不同的圖片文件名:
- -style_image starry_night.jpg,the_scream.jpg
注意,圖片名稱要包含完整的地址路徑。
基本操作就是這些。
neural-style-pt還有一點(diǎn)強(qiáng)大的功能,就是可以使用多個不同的計算設(shè)備來處理高分辨率圖像。
不同的設(shè)備會輸出不同網(wǎng)絡(luò)層的計算結(jié)果。
你可以用-gpu指令控制使用哪些GPU和CPU設(shè)備,你也可以用-multidevice_strategy控制如何在不同設(shè)備上分割層。
例如,在一個有四個GPU的服務(wù)器中,指令“-gpu 0,1,2,3”,指按順序在GPU 0、1、2和3上進(jìn)行處理。
同時給出 -multidevice_strategy 3,6,12指令,表示前兩層應(yīng)該在GPU 0上計算,第3到5層應(yīng)該在GPU 1上計算,第6到11層應(yīng)該在GPU 2上計算,其余的層應(yīng)該在GPU 3上計算。
根據(jù)你的需求調(diào)整-multidevice_strategy,可以達(dá)到輸出的最大分辨率。
下面是一張4016x2213分辨率圖像,是在使用8個Tesla K80 GPU的服務(wù)器上生成的:

1080顯卡入門,還能“分布式”計算,這么酷炫好玩低門檻的風(fēng)格遷移網(wǎng)絡(luò),趕快來試試吧~
傳送門:
https://github.com/ProGamerGov/neural-style-pt