風(fēng)格遷移一直是很多讀者感興趣的內(nèi)容之一,近日,網(wǎng)友Reiichiro Nakano公開了自己的一個(gè)實(shí)現(xiàn):用TensorFlow.js在瀏覽器中部署可進(jìn)行任意圖像風(fēng)格遷移的模型。讓我們一起去看看吧!
GitHub:github.com/reiinakano/arbitrary-image-stylization-tfjs
小工具:reiinakano.github.io/arbitrary-image-stylization-tfjs/
遷移效果
所謂風(fēng)格遷移,指的是神經(jīng)網(wǎng)絡(luò)通過遷移算法,用另一種風(fēng)格(通常是畫)重新“繪制”一張圖像中的內(nèi)容(通常是照片)?,F(xiàn)如今,能在瀏覽器中實(shí)時(shí)進(jìn)行風(fēng)格遷移的項(xiàng)目有很多,但它們中的大多數(shù)都需要針對每種風(fēng)格訓(xùn)練獨(dú)立的神經(jīng)網(wǎng)絡(luò),所以用戶的選擇大大受限。
Reiichiro Nakano提供的模型突破了以往模型的局限,它能將任何風(fēng)格圖像分解為表示其風(fēng)格的100維向量,然后把這些向量結(jié)合照片信息一起饋送到另一個(gè)神經(jīng)網(wǎng)絡(luò),以產(chǎn)生最終的風(fēng)格化圖像。
首先,我們來看看這個(gè)風(fēng)格遷移模型的具體效果:
一種風(fēng)格下的風(fēng)格遷移
兩種風(fēng)格下的風(fēng)格遷移
演示網(wǎng)站
上圖是小編在作者開發(fā)的演示網(wǎng)站里測試的結(jié)果,感興趣的讀者可以前去一試??梢园l(fā)現(xiàn),雖然談不上特別令人驚艷,但遷移的整體效果還是非常不錯(cuò)的,更可貴的是,它支持任意圖像、任意風(fēng)格的遷移,允許手動(dòng)上傳圖片。
如果硬要說有什么不足,那就是網(wǎng)站的延遲有點(diǎn)高(選取圖像/風(fēng)格后無法及時(shí)跳轉(zhuǎn),也許是水管不行)。此外,在對構(gòu)圖空曠的圖像(如加州金門大橋)進(jìn)行風(fēng)格遷移時(shí),我們發(fā)現(xiàn)粗糲線條風(fēng)格(如bricks)容易弱化主體線條,使遷移后的圖像幾乎沒有內(nèi)容。
技術(shù)來源
為了實(shí)現(xiàn)這個(gè)項(xiàng)目,作者參考的是2017 BMVC的一篇Oral Paper:Exploring the structure of a real-time, arbitrary neural artistic stylization network(arXiv:1705.06830)。
這篇論文結(jié)合靈活的風(fēng)格遷移技術(shù)和快速網(wǎng)絡(luò)傳輸,提出了一種允許使用任何內(nèi)容/風(fēng)格圖像對進(jìn)行實(shí)時(shí)風(fēng)格化的網(wǎng)絡(luò)。在包含約80,000幅畫作的語料庫上經(jīng)過訓(xùn)練后,論文模型不僅在訓(xùn)練過的風(fēng)格上表現(xiàn)出色,還能夠推廣到從未見過的風(fēng)格和照片。也就是說,這是一個(gè)能以完全無監(jiān)督的方式學(xué)習(xí)平滑的、結(jié)構(gòu)豐富的嵌入空間,以及與風(fēng)格繪畫相關(guān)聯(lián)的語義信息的模型。
一般來說,風(fēng)格遷移模型的輸入有兩個(gè),一是包含圖像內(nèi)容的照片c,二是包含圖像風(fēng)格的繪畫s。這類算法假定圖像的內(nèi)容和風(fēng)格可以定義如下:
如果模型從兩幅圖像中提取到的高級(jí)特征歐氏距離接近,則兩個(gè)圖像的內(nèi)容相似。
如果模型從兩幅圖像中提取到的低級(jí)特征有相同的空間統(tǒng)計(jì),則兩個(gè)圖像的風(fēng)格相似。
根據(jù)這兩個(gè)定義,風(fēng)格遷移的優(yōu)化目標(biāo)可以表示為:
其中Lc(x, c)和Ls(x, s)分別是內(nèi)容和風(fēng)格的損失函數(shù),λs是風(fēng)格損失函數(shù)經(jīng)拉格朗日乘數(shù)加權(quán)后表示的相對權(quán)重。
論文作者改進(jìn)了這一做法。他們在風(fēng)格遷移網(wǎng)絡(luò)前添加了一個(gè)預(yù)測網(wǎng)絡(luò)P(·),它以任意風(fēng)格的圖像作為輸入,并預(yù)測歸一化常數(shù)的嵌入向量→S,這樣做的優(yōu)勢是模型能把學(xué)到的遷移方法推廣到其他圖像上。
論文模型架構(gòu)
從本質(zhì)上來說,這個(gè)模型直接學(xué)習(xí)的是從風(fēng)格圖像到風(fēng)格參數(shù)的映射。在Kaggle Painter By Numbers(內(nèi)容)和Describable Textures Dataset(風(fēng)格)兩個(gè)數(shù)據(jù)集上進(jìn)行了訓(xùn)練后,模型輸出的風(fēng)格遷移效果如下圖(左)所示:
網(wǎng)絡(luò)是聯(lián)合訓(xùn)練的,但它只用少量訓(xùn)練圖像就模擬了多種風(fēng)格,這意味著我們沒有必要為每種風(fēng)格單獨(dú)設(shè)定拉格朗日乘數(shù)λs。 也就是說,同一個(gè)損失加權(quán)就足以在所有繪畫風(fēng)格和紋理上產(chǎn)生合理的結(jié)果。上圖(右)則證明,該模型能夠預(yù)測以前從未見到的風(fēng)格和紋理樣式,它們在質(zhì)量上與訓(xùn)練集樣本的風(fēng)格和紋理幾乎一致。
開源答疑
在GitHub上,開源項(xiàng)目的Reiichiro Nakano向開發(fā)者重點(diǎn)提了一些注意事項(xiàng)。
問:我的數(shù)據(jù)安全嗎?你會(huì)看到我提交的圖片嗎?
當(dāng)你在演示網(wǎng)站里測試風(fēng)格遷移時(shí),你的數(shù)據(jù)和圖片只會(huì)在你自己的計(jì)算機(jī)上留下痕跡。事實(shí)上,這也是在瀏覽器中運(yùn)行神經(jīng)網(wǎng)絡(luò)的主要優(yōu)勢之一。我只是把模型和代碼發(fā)給你,由你在自己的瀏覽器上運(yùn)行模型。
問:如果我想下載,模型一共多大?
風(fēng)格神經(jīng)網(wǎng)絡(luò)的大小是9.6MB,遷移網(wǎng)絡(luò)大概有7.9MB。它們在任何風(fēng)格上都有效,所以你只用下一次就可以了。
問:你的模型和論文模型一模一樣嗎?
不完全一樣,論文的風(fēng)格網(wǎng)絡(luò)用的是Inception-v3(大約96.2MB),太大了。所以在把模型移植到瀏覽器上之前,我用MobileNet-v2從預(yù)訓(xùn)練的Inception-v3網(wǎng)絡(luò)中提取了知識(shí),把大小縮小到了論文的1/10。
問:風(fēng)格組合的具體方法是什么?
由于風(fēng)格網(wǎng)絡(luò)可以把每種風(fēng)格映射成100維的風(fēng)格向量,所以我們只需對內(nèi)容和風(fēng)格圖像的風(fēng)格向量進(jìn)行加權(quán)平均,把計(jì)算結(jié)果作為遷移網(wǎng)絡(luò)的輸入,即可獲得新風(fēng)格向量。
-
圖像
+關(guān)注
關(guān)注
2文章
1078瀏覽量
40345 -
瀏覽器
+關(guān)注
關(guān)注
1文章
1007瀏覽量
35171 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4259瀏覽量
62228
原文標(biāo)題:【實(shí)現(xiàn)】在瀏覽器中快速進(jìn)行任意風(fēng)格遷移
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論