深度學習數據驅動_利用深度學習實現手繪數據可視化的生成

ea6ad001be72bd584d3ac6a730d33380.png

前一段時間,我開發了Sketchify, 該工具可以把任何以SVG為渲染技術的可視化轉化為手繪風格。(參考手繪風格的數據可視化實現 Sketchify)

那么問題來了,很多的chart是以Canvas為渲染技術的,那要怎么辦?

我拍腦袋一想,為什么不使用深度學習技術來做呢?

63c92ed1c0e30ba6e92eed669973afa4.png

原理很簡單:

  • 首先用相同的數據分別生成原始的和手繪風格的數據可視化圖數據。
  • 然后利用深度神經網絡,使用該數據訓練一個模式,輸入是數據圖,輸出的手繪風格的圖。這樣就可以訓練一個生成手繪風格數據可視化的神經網絡了。
  • 然后對于任何新的數據圖,輸入該網絡就可以輸出一個手繪風格的圖。

這聽起來就像如何把大象放到冰箱里一樣的簡單直接。

廢話少說,開始干。

準備數據

數據準備要生成一定數量的原始圖和手繪圖,利用Sketchify就可以完成功能,但是具體如何做到?參考如下架構:

cd62299eecde5572cd6a42b385bc83ce.png
  • VizServer是一個web服務,用nodejs開發,代碼在這里https://github.com/gangtao/handyModel/tree/master/vizService
    VizServer使用restify提供RestAPI接口,利用squirrelly.js的模版引擎生成一個包含可視化的Html頁面。模版代碼在這里
  • DataGen負責生成隨機的圖表數據,發送請求到VizServer,把返回的網頁利用puppeteer的headless browser渲染,并截圖。代碼在這里
    其中,數據生成部分我是用了mockjs,我發現另一個比較有趣的庫可以做類似的功能是casual

訓練神經網絡

數據準備好以后就可以訓練神經網絡了。

深度神經網絡的訓練往往比較消耗資源。最好有相當大的內存和GPU。有倆個免費的選擇:

  • google colab

61e00d681b26291b0c17ef01fdf222eb.png


colab就不需要介紹了,大家都很熟悉了,有免費GPU

  • paperspace

88b45efbeefa2a7683c9f4e3e15e1e41.png


paperspace是一個新的深度學習的免費環境,我試用了以下,免費的GPU配置還是很不錯的,大家可以試試看。
有了訓練環境,導入數據,設一個神經網絡,然后就可以訓練了。這里省去若干介紹如何加載數據png,轉換成tensor或tf的dataset。大家可以參考這些代碼。
總之,大象還是沒能順利的放入冰箱,我訓練的模型大都輸出這樣的手繪圖。

26fd2dec6b110bd2c56196c1d610ca56.png

離我的設想的輸出差距比較大。為什么會失敗呢?我想大概有以下這些原因。

  1. 我的神經網絡比較簡單,受限于硬件,我不可能訓練非常復雜的神經網絡。
  2. 我的損失函數選擇不好
  3. 我的網絡不收斂
  4. 我的訓練時間不夠

總之,完成圖像到圖像的翻譯任務,我們需要更復雜和高深的技術。

圖像到圖像的翻譯

經研究我發現,這個任務是一個典型的圖像到圖像的翻譯,例如前些日子火遍大江南北的deepfake,就是基于圖像到圖像的翻譯。

b2e6eddfa422c6b5ab1f83da2710f1cf.png

有一些專門的的研究針對圖像到圖像的翻譯任務。一個是CycleGan,另一個是pix2pix(Conditional GAN),這兩個都是基于GAN(生成對抗網絡)的,所以我們先簡單講講GAN。 (參考 在瀏覽器中進行深度學習:TensorFlow.js (八)生成對抗網絡 (GAN))

469846f90f8e124c0a5fa2989531fc0b.png

如上圖所示,GAN包含兩個互相對抗的網絡:G(Generator)和D(Discriminator)。正如它的名字所暗示的那樣,它們的功能分別是:

  • Generator是一個生成器的網絡,它接收一個隨機的噪聲,通過這個噪聲生成圖片。
  • Discriminator是一個鑒別器網絡,判別一張圖片或者一個輸入是不是“真實的”。它的輸入是數據或者圖片,輸出D表示輸入為真實圖片的概率,如果為1,就代表100%是真實的圖片,而輸出為0,就代表不可能是真實的圖片。

在訓練過程中,生成網絡G的目標就是盡量生成真實的圖片去欺騙判別網絡D。而D的目標就是盡量把G生成的圖片和真實的圖片分別開來。這樣,G和D構成了一個動態的“博弈過程”。在最理想的狀態下,G可以生成足以“以假亂真”的圖片

CycleGan

https://github.com/junyanz/CycleGAN

efedafe6df7da494abf512bdabdc6cac.png

實現圖像間的翻譯,借助GAN,應該有兩個domain的鑒別器,每個鑒別器單獨判斷各自domain的數據是否是真實數據。至于generator,圖像的翻譯需要將domain A的圖像翻成domain B的圖像,所以generator有點像自編碼器結構,只是decoder的輸出不是domain A的圖像,而是domain B的圖像。為了充分利用兩個discriminator,還應該有一個翻譯回去的過程,也就是說,還有一個generator,它將domain B的數據翻譯到domain A。

CycleGAN作者做了很多有意思的實驗,包括horse2zebra,apple2orangle,以及風格遷移,如:對風景畫加上梵高的風格。

6552cf2c8399a9cfd06cd5457af5fc63.png

Pix2pix

https://github.com/phillipi/pix2pix

pix2pix是基于條件對抗生成網絡,關于CGAN和GAN的架構區別可以參考下圖:

3793eb5156b704a0dda0ae8a31550f9b.png


CGAN與GAN非常相似,除了生成器和鑒別器均以某些額外信息y為條件。可以通過將鑒別器和生成器作為附加輸入層輸入來執行這種調節。“ y”可以是任何種類的輔助信息,例如類別標簽或來自其他模態的數據。在本教程中,我們將類標簽用作“ y”。這里條件信息y是添加的額外條件信息,生成器G和鑒別器D都學會了以某些模式進行操作。例如,在面部生成應用程序的情況下,我們可以要求生成器生成帶有微笑的面部,并詢問鑒別器特定圖像是否包含帶有微笑的面部。

9679177c31bc614a49b0ed6c555a3be1.png

作者舉了幾個圖像到圖像翻譯的應用例子,都挺有趣的。

好了擁有了強大的工具以后,后面的事情就比較簡單了。

我利用前面提到的生成工具生成了400對bar chart的原始和手繪圖,另外分別有100對測試和驗證數據集。利用paperspace的免費GPU,運行https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix的pix2pix代碼,使用缺省的參數,訓練了200個epoch,每個epoch大概50秒,總共耗時3小時左右。

[Network G] Total number of parameters : 54.414 M
[Network D] Total number of parameters : 2.769 M

缺省的網絡的參數數量如上圖所示。

訓練結果如下圖:

77b30ff07d0a93271c3b5eb7d03665cb.png

862df205dd50223dedadd7f35b3c91ad.png

上面兩個是我的測試數據中的兩個例子。A是原始域,B是手繪域。中間的fakeB是pix2pix模型根據原始A圖生成的結果。我們看到該生成圖形幾乎可以亂真。

下一步

到這里是不是大功告成了呢?還沒有,想想我們之前要解決的問題,對于任意的基于Canvas渲染的可視化圖表,我們改如何運用該模型呢?這里我列出還需要做的工作:

  • 增強數據生成功能,生成更多不同類型,數據,風格的圖數據來訓練一個更通用的模型(在本例子中,我們只有Bar Chart的缺省風格的訓練數據)
  • 部署該模型為一個服務,在客戶端瀏覽器中利用JS把Canvas數據發送請求至該服務來獲得手繪風格的輸出。
  • 或者利用Keras訓練該模型并利用tensorflowJs直接部署到瀏覽器,這樣做就不需要服務器端的交互,更利于集成。

總結

本文給出了一個利用深度學習實現數據可視化到手繪風格轉化的實際例子,利用機器學習或者深度學習解決一個具體的問題很有趣,但是要完成端到端的功能,需要很多很瑣碎的知識和系統思考的能力。希望這個故事對你有所幫助。有問題請發評論給我。

參考:

  • 手繪風格的數據可視化實現 Sketchify
  • 訓練數據生成代碼
  • Pix2pix 原始論文 https://phillipi.github.io/pix2pix/
  • AI從繪圖制作出精美的照片(pix2pix)
  • 利用深度學習實現從圖像到圖像的翻譯
  • 條件對抗網絡的圖像到圖像翻譯 Pix2Pix
  • 圖像到圖像的翻譯 CycleGANS和Pix2Pix
  • Pix2pix論文的Pytorch代碼 https://github.com/junyanz/pytorch-CycleGA
  • 一篇關于pix2pix的介紹 https://machinelearningmastery.com/a-gentle-introduction-to-pix2pix-generative-adversarial-network/
  • 另一篇關于pix2pix的介紹 https://ml4a.github.io/guides/Pix2Pix/
  • 在瀏覽器中進行深度學習:TensorFlow.js (八)生成對抗網絡 (GAN)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遠程計算機無法操作,win7系統的QQ遠程協助無法控制計算機的問題的解決方法

在使用win7系統的計算機工作和學習過程中,可能會發生win7系統的QQ遠程協助無法控制計算機的情況. 如何處理win7系統的QQ遠程控制無法控制計算機的問題?對于計算機級別的用戶,如果win7系統qq遠程協助無法控制計算機,通常不知道該怎…

java應用中的日志介紹

日志在應用程序中是非常非常重要的,好的日志信息能有助于我們在程序出現 BUG 時能快速進行定位,并能找出其中的原因。 但是,很多介紹 AOP 的地方都采用日志來作為介紹,實際上日志要采用切面的話是極其不科學的!對于日志…

微軟全新Chromium版Edge瀏覽器下載

下載地址: https://www.microsoft.com/en-us/edge

企業網站 源碼 服務郵箱:_后來才知道:溫州騰訊企業郵箱定制服務

后來才知道:溫州騰訊企業郵箱定制服務 qnmsptdb后來才知道:溫州騰訊企業郵箱定制服務 軟文推廣得到大家的轉發之后,那么軟文的經濟價值也會隨之而來。內容更新質量言外之意,如果你長期更新低質量內容,是不可取的&#…

圣三一學院計算機專業,360教育集團:愛爾蘭都柏林大學圣三一學院計算機專業...

應用,新產品設計。網絡和分布系統的安全和管理課程介紹計算機基層和網絡安全,研究網絡管理的方法和高端信息服務的管理。這六個部分內容的學習包括每周大概20小時的溝通時間,包括講座、輔導、研討會、試驗等。絕大部分課程要求學生完成其他課…

JavaScript的檢測及其數據類型

一、JavaScript有幾種類型的值?Javascript有兩種數據類型,分別是基本數據類型和引用數據類型。其中基本數據類型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增,表示獨一無二的值),而引用數據類型統稱為Object對…

我是Leader,我被降職成了普通員工,HR說:公司要梯隊年輕化

“BAT也不是完美的避風港哇~”這是老劉說的,老劉是BAT某家的一個Leader,職級約類似T7(T族一般是技術族,管理是M族),在BAT某家呆了11年,但是在整個互聯網行業推崇,梯隊年輕化的氛圍時,老劉所在的…

in最多可以放多少?_汽車最多可以停放多少天不開?維修師傅:盡可能別超過這個時間...

在當下,買車似乎已經成為了一種消費潮流,其中不乏一些本身用車需求不明顯但也隨大流買車的人,結果車買回來之后最初的新鮮勁一過就放在那里不怎么用了。當然也有部分車主是因為自己的工作修需要經常需要在外出差,那么就算想天天開…

計算機電源風扇安裝方法,機箱風扇怎么裝 電腦機箱風扇電源線接法

夏天天氣炎熱,電腦機箱內溫度也較高,溫度過高會影響電腦性能出現死機等問題,甚至影響硬件壽命。所以給機箱裝風扇來散熱是非常重要的。那么,機箱風扇怎么裝合理呢?機箱風扇的電源線怎么接呢?下面分享一下機箱風...夏天天氣炎熱&…

使用微服務失敗的12個原因

在過去的幾年中,我已經對處于數字化轉型過程中的多個產品團隊進行了架構審查。大多數團隊都在按照微服務架構構建產品。他們有使用基于微服務的體系結構的所有正確意圖-更快的開發,更好的可伸縮性,更小的獨立團隊,獨立的部署&…

市場壓力只有老板扛?柏明頓阿米巴如何傳遞經營壓力

內部交易是阿米巴經營模式中的一個重要環節,通過內部交易,使企業內部上下道工序之間以價格為紐帶,以服務和產品進行等價交換,統一結算交易。通過內部交易行為,可以掌握各個阿米巴單元的盈虧狀態。阿米巴構建內部市場&a…

flutter怎么添加ios網絡權限_視頻號直播間怎么添加購物車商品;超詳細流程步驟。丨國仁網絡資訊...

蘑菇租房的聯合創始人龍東平前幾個月曾說:“視頻號是一次掀翻桌子重新排座次的機會,是巨浪滔天,是新世界,新秩序。”視頻號發展趨勢愈加迅猛,越來越多的玩家涌入,正在獲得新一波社交流量。為什么更加受歡迎…

網絡中服務器是指為網絡提供資源,并對這些資源進行管理的計算機,2016年職稱計算機考試Internet沖刺試題及答案3...

1、Internet的通信協議是( A )A、TCP/IP B、OSI/ISOC、NetBEUI D、NWLink2、把計算機網絡分為有線和無線網的主要分類依據是(C)A、網絡成本 B、網絡的物理位置C、網絡的傳輸介質 D、網絡的拓撲結構3、要將兩臺計算機直接相連,那么使用雙絞線的類型為(A)A、交叉線 B、…

Visio 圖形大小如何隨文字多少自動調整?

Visio 圖形大小默認是根據圖形內文字多少自動調整。 如果手動調整過圖形,那么該圖形就不再隨文字多少自動調整了。 解決辦法: 刪除該圖形,重新拉取一個,重新編寫文本

java同一個包中,類之間的的調用

如果是靜態方法,直接 類名.方法名即可,如果是非靜態方法,則需new一個對象出來,然后用對象.方法名調用如:public class A{public static void T(){System.out.print("這是A類的方法");}public void T2(){Syst…

mos管開關電路_【電路】MOS管開關電路圖詳解(一)

MOS管的開關特性靜態特性MOS管作為開關元件,同樣是工作在截止或導通兩種狀態。由于MOS管是電壓控制元件,所以主要由柵源電壓uGS決定其工作狀態。工作特性如下:※uGS※ uGS>開啟電壓UT:MOS管工作在導通區,漏源電流iDSUDD/(RDrDS…

Visio圖形自動編號

操作步驟: 1.進入“視圖”--“加載項” 2.“加載項”---“運行加載項” 3.“運行加載項”---“給形狀編號”

偽代碼就是計算機語言 正確嗎,偽代碼實例紹.ppt

偽代碼實例紹第2章 偽代碼實例介紹 主講:黃明瓊 第2章 偽代碼實例介紹 2.1 偽代碼介紹 2.2 三角形問題 2.3 NextDate函數問題 2.4 傭金問題 2.5 簡單ATM系統 2.6 貨幣轉換器 本章教學目標 正確理解偽代碼的概念 正確理解偽代碼的規則 正確理解偽代碼實例中的邏輯 能…

Java面試170題答案解析(1-20題)

為什么80%的碼農都做不了架構師?>>> 轉載于:https://my.oschina.net/lanyu96/blog/2250020

query builder python-elasticsearch返回指定字段

1. postman 請求elasticsearch 返回指定字段 1.直接在請求體當中,json 數據,對應的是一個列表 { "_source":["title","id","desc"], "from":10, "size":100, } 至于from和size是淺分頁 2. …