風(fēng)格遷移一直是很多讀者感興趣的內(nèi)容之一,近日,網(wǎng)友Reiichiro Nakano公開了自己的一個實現(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)容(通常是照片)。現(xiàn)如今,能在瀏覽器中實時進(jìn)行風(fēng)格遷移的項目有很多,但它們中的大多數(shù)都需要針對每種風(fēng)格訓(xùn)練獨(dú)立的神經(jīng)網(wǎng)絡(luò),所以用戶的選擇大大受限。
Reiichiro Nakano提供的模型突破了以往模型的局限,它能將任何風(fēng)格圖像分解為表示其風(fēng)格的100維向量,然后把這些向量結(jié)合照片信息一起饋送到另一個神經(jīng)網(wǎng)絡(luò),以產(chǎn)生最終的風(fēng)格化圖像。
首先,我們來看看這個風(fēng)格遷移模型的具體效果:
一種風(fēng)格下的風(fēng)格遷移
兩種風(fēng)格下的風(fēng)格遷移
演示網(wǎng)站
上圖是小編在作者開發(fā)的演示網(wǎng)站里測試的結(jié)果,感興趣的讀者可以前去一試。可以發(fā)現(xiàn),雖然談不上特別令人驚艷,但遷移的整體效果還是非常不錯的,更可貴的是,它支持任意圖像、任意風(fēng)格的遷移,允許手動上傳圖片。
如果硬要說有什么不足,那就是網(wǎng)站的延遲有點(diǎn)高(選取圖像/風(fēng)格后無法及時跳轉(zhuǎn),也許是水管不行)。此外,在對構(gòu)圖空曠的圖像(如加州金門大橋)進(jìn)行風(fēng)格遷移時,我們發(fā)現(xiàn)粗糲線條風(fēng)格(如bricks)容易弱化主體線條,使遷移后的圖像幾乎沒有內(nèi)容。
技術(shù)來源
為了實現(xiàn)這個項目,作者參考的是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)行實時風(fēng)格化的網(wǎng)絡(luò)。在包含約80,000幅畫作的語料庫上經(jīng)過訓(xùn)練后,論文模型不僅在訓(xùn)練過的風(fēng)格上表現(xiàn)出色,還能夠推廣到從未見過的風(fēng)格和照片。也就是說,這是一個能以完全無監(jiān)督的方式學(xué)習(xí)平滑的、結(jié)構(gòu)豐富的嵌入空間,以及與風(fēng)格繪畫相關(guān)聯(lián)的語義信息的模型。
一般來說,風(fēng)格遷移模型的輸入有兩個,一是包含圖像內(nèi)容的照片c,二是包含圖像風(fēng)格的繪畫s。這類算法假定圖像的內(nèi)容和風(fēng)格可以定義如下:
如果模型從兩幅圖像中提取到的高級特征歐氏距離接近,則兩個圖像的內(nèi)容相似。
如果模型從兩幅圖像中提取到的低級特征有相同的空間統(tǒng)計,則兩個圖像的風(fēng)格相似。
根據(jù)這兩個定義,風(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ò)前添加了一個預(yù)測網(wǎng)絡(luò)P(·),它以任意風(fēng)格的圖像作為輸入,并預(yù)測歸一化常數(shù)的嵌入向量→S,這樣做的優(yōu)勢是模型能把學(xué)到的遷移方法推廣到其他圖像上。
論文模型架構(gòu)
從本質(zhì)上來說,這個模型直接學(xué)習(xí)的是從風(fēng)格圖像到風(fēng)格參數(shù)的映射。在Kaggle Painter By Numbers(內(nèi)容)和Describable Textures Dataset(風(fēng)格)兩個數(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。 也就是說,同一個損失加權(quán)就足以在所有繪畫風(fēng)格和紋理上產(chǎn)生合理的結(jié)果。上圖(右)則證明,該模型能夠預(yù)測以前從未見到的風(fēng)格和紋理樣式,它們在質(zhì)量上與訓(xùn)練集樣本的風(fēng)格和紋理幾乎一致。
開源答疑
在GitHub上,開源項目的Reiichiro Nakano向開發(fā)者重點(diǎn)提了一些注意事項。
問:我的數(shù)據(jù)安全嗎?你會看到我提交的圖片嗎?
當(dāng)你在演示網(wǎng)站里測試風(fēng)格遷移時,你的數(shù)據(jù)和圖片只會在你自己的計算機(jī)上留下痕跡。事實上,這也是在瀏覽器中運(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ò)中提取了知識,把大小縮小到了論文的1/10。
問:風(fēng)格組合的具體方法是什么?
由于風(fēng)格網(wǎng)絡(luò)可以把每種風(fēng)格映射成100維的風(fēng)格向量,所以我們只需對內(nèi)容和風(fēng)格圖像的風(fēng)格向量進(jìn)行加權(quán)平均,把計算結(jié)果作為遷移網(wǎng)絡(luò)的輸入,即可獲得新風(fēng)格向量。
-
圖像
+關(guān)注
關(guān)注
2文章
1092瀏覽量
41006 -
瀏覽器
+關(guān)注
關(guān)注
1文章
1040瀏覽量
36076 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64143
原文標(biāo)題:【實現(xiàn)】在瀏覽器中快速進(jìn)行任意風(fēng)格遷移
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
用tflite接口調(diào)用tensorflow模型進(jìn)行推理
comicsviewer圖像瀏覽器軟件
TensorFlow發(fā)表推文正式發(fā)布TensorFlow v1.9
利用TensorFlow.js,D3.js 和 Web 的力量使訓(xùn)練模型的過程可視化
如何使用TensorFlow.js構(gòu)建這一系統(tǒng)
基于tensorflow.js設(shè)計、訓(xùn)練面向web的神經(jīng)網(wǎng)絡(luò)模型的經(jīng)驗
用TensorFlow.js在瀏覽器中構(gòu)建了一個使用任意圖像進(jìn)行風(fēng)格化的demo
一種開源的機(jī)器學(xué)習(xí)模型,可在瀏覽器中使用TensorFlow.js對人物及身體部位進(jìn)行分割
TensorFlow.js制作了一個僅用 200 余行代碼的項目
CNN是什么?美國有線電視新聞網(wǎng)嗎?

評論