0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用TensorFlow.js在瀏覽器中部署可進(jìn)行任意圖像風(fēng)格遷移的模型

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-11-22 09:01 ? 次閱讀

風(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)格向量。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像
    +關(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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    tflite接口調(diào)用tensorflow模型進(jìn)行推理

    摘要本文為系列博客tensorflow模型部署系列的一部分,用于實(shí)現(xiàn)通用模型部署。本文主要實(shí)現(xiàn)用tflite接口調(diào)用
    發(fā)表于 12-22 06:51

    comicsviewer圖像瀏覽器軟件

    電子發(fā)燒友網(wǎng)站提供《comicsviewer圖像瀏覽器軟件.zip》資料免費(fèi)下載
    發(fā)表于 06-19 17:00 ?0次下載

    TensorFlow發(fā)表推文正式發(fā)布TensorFlow v1.9

    其中有兩個(gè)案例受到了大家的廣泛關(guān)注,這個(gè)項(xiàng)目是通過 Colab tf.keras 中訓(xùn)練模型,并通過TensorFlow.js 瀏覽器
    的頭像 發(fā)表于 07-16 10:23 ?3057次閱讀

    利用TensorFlow.js,D3.js 和 Web 的力量使訓(xùn)練模型的過程可視化

    TensorFlow.js 將機(jī)器學(xué)習(xí)引入 JavaScript 和 Web。 我們將利用這個(gè)很棒的框架來構(gòu)建一個(gè)深度神經(jīng)網(wǎng)絡(luò)模型。這個(gè)模型將能夠按大聯(lián)盟裁判的精準(zhǔn)度來稱呼好球和壞球。
    的頭像 發(fā)表于 08-08 14:24 ?6900次閱讀

    如何使用TensorFlow.js構(gòu)建這一系統(tǒng)

    TensorFlow.js團(tuán)隊(duì)一直進(jìn)行有趣的基于瀏覽器的實(shí)驗(yàn),以使人們熟悉機(jī)器學(xué)習(xí)的概念,并鼓勵(lì)他們將其用作您自己項(xiàng)目的構(gòu)建塊。對于那些不熟悉的人來說,
    的頭像 發(fā)表于 08-19 08:55 ?3504次閱讀

    基于tensorflow.js設(shè)計(jì)、訓(xùn)練面向web的神經(jīng)網(wǎng)絡(luò)模型的經(jīng)驗(yàn)

    你也許會(huì)好奇:為什么要在瀏覽器里基于tensorflow.js訓(xùn)練我的模型,而不是直接在自己的機(jī)器上基于tensorflow訓(xùn)練模型?你當(dāng)然
    的頭像 發(fā)表于 10-18 09:43 ?4042次閱讀

    TensorFlow.js瀏覽器中構(gòu)建了一個(gè)使用任意圖像進(jìn)行風(fēng)格化的demo

    了10倍。所以作者認(rèn)為distillation這種技術(shù)被低估了,它可以為瀏覽器帶來一些很酷的ML功能,因?yàn)楹芏?b class='flag-5'>模型由于太大而無法資源有限的環(huán)境中進(jìn)行部署。
    的頭像 發(fā)表于 11-22 09:33 ?3570次閱讀

    一種開源的機(jī)器學(xué)習(xí)模型,可在瀏覽器中使用TensorFlow.js對人物及身體部位進(jìn)行分割

    人物分割有何用途?這項(xiàng)技術(shù)可廣泛應(yīng)用于多個(gè)多領(lǐng)域,包括增強(qiáng)現(xiàn)實(shí)、攝影編輯以及圖像或視頻的藝術(shù)效果等。具體應(yīng)用由您決定!去年,當(dāng)我們推出 PoseNet(首個(gè)能夠瀏覽器中使用簡易網(wǎng)絡(luò)攝像頭估測身體
    的頭像 發(fā)表于 02-26 16:33 ?5772次閱讀

    TensorFlow.js制作了一個(gè)僅用 200 余行代碼的項(xiàng)目

    我們先來看一下運(yùn)行的效果。下圖中,上半部分是原始視頻,下半部分是使用 TensorFlow.js 對人像進(jìn)行消除后的視頻??梢钥吹?,除了偶爾會(huì)在邊緣處留有殘影之外,整體效果還是很不錯(cuò)的。
    的頭像 發(fā)表于 05-11 18:08 ?5548次閱讀

    CNN是什么?美國有線電視新聞網(wǎng)嗎?

    它用TensorFlow.js加載了一個(gè)10層的預(yù)訓(xùn)練模型,相當(dāng)于在你的瀏覽器上跑一個(gè)CNN模型,只需要打開電腦,就能了解CNN究竟是怎么回事。
    的頭像 發(fā)表于 09-03 10:58 ?6016次閱讀
    CNN是什么?美國有線電視新聞網(wǎng)嗎?

    如何基于 ES6 的 JavaScript 進(jìn)行 TensorFlow.js 的開發(fā)

    環(huán)境中,如果有 CUDA 環(huán)境支持,或者瀏覽器環(huán)境中,有 WebGL 環(huán)境支持,那么 TensorFlow.js 可以使用硬件進(jìn)行加速。 微信小程序 微信小程序也提供了官方插件,封
    的頭像 發(fā)表于 10-31 11:16 ?3054次閱讀

    CNN到底是怎么回事?

    它用TensorFlow.js加載了一個(gè)10層的預(yù)訓(xùn)練模型,相當(dāng)于在你的瀏覽器上跑一個(gè)CNN模型,只需要打開電腦,就能了解CNN究竟是怎么回事。
    的頭像 發(fā)表于 06-28 14:47 ?3920次閱讀
    CNN到底是怎么回事?

    基于OpenCV的DNN圖像風(fēng)格遷移

    /deep-photo-styletransfer 項(xiàng)目,需要安裝 CUDA、pytorch、cudnn等等,配置能花一天的時(shí)間。 不過最近我發(fā)現(xiàn)一個(gè)非常好的開源應(yīng)用項(xiàng)目,那就是基于OpenCV的DNN圖像風(fēng)格遷移。你只需要安裝
    的頭像 發(fā)表于 10-30 10:03 ?492次閱讀

    js文件可以直接瀏覽器運(yùn)行嗎

    載和運(yùn)行。 Web開發(fā)中,JS常被用于實(shí)現(xiàn)動(dòng)態(tài)交互效果和頁面邏輯控制。通過將JS代碼嵌入到網(wǎng)頁的HTML文件中,瀏覽器可以頁面加載過程中
    的頭像 發(fā)表于 11-27 16:45 ?3572次閱讀

    js腳本怎么瀏覽器中運(yùn)行

    瀏覽器中運(yùn)行JavaScript腳本是一種常見的方式,因?yàn)镴avaScript是一種Web瀏覽器中執(zhí)行的腳本語言。下面是一個(gè)詳細(xì)的,最少1500字的文章,介紹如何在
    的頭像 發(fā)表于 11-27 16:46 ?2554次閱讀