LSTM+MDN【混合密度网络】---sketch rnn
最近Google開源了他們的項目:sketch rnn,使AI可以自由的作畫,由此衍生的,有人用它拓展生成矢量漢字,有人用VAE+sketch rnn使小姐姐跳舞。
傳送門:
https://github.com/jsn5/dancenet
?
下面進入正題,說一下sketch-rnn
抽象的視覺傳達是人們彼此傳達觀點的關鍵部分。小孩子能夠形成僅用少量筆畫就能描繪物體的能力。這些簡單的繪畫可能不會像照片那樣能表達現實,但是它們卻能告訴我們一些有關人類如何表示和構建他們周圍世界的圖像的信息。
Vector drawings produced by sketch-rnn.
在先前的論文“A Neural Representation of Sketch Drawings”中,提出了一種生成遞歸神經網絡,它能夠生成簡單物體的草圖,目的是訓練一個能繪畫和概括抽象概念的機器,并且它的思維方式與人類類似。在手繪草圖的數據集上訓練模型,每個草圖代表控制鋼筆的運動序列:要移動到哪個方向,什么時候提筆,何時停止繪畫。在這個過程中,創建了一個有許多潛在應用的模型,它不僅有望幫助藝術家創造作品,還能夠幫助老師教學生繪畫。
盡管目前已經在圖像生成建模方面做了大量工作(目前的主要手段是利用神經網絡),但是大部分工作關注的是將光柵圖像表示為二維像素網格。盡管這些模型能夠生成逼真的圖像,但是由于二維像素網格的高維度,這就成了生成連續結構圖像的主要挑戰。例如,這些模型有時候能夠產生擁有三只或更多只眼睛的貓的有趣圖像,或者產生具有多個頭的狗的圖像。
在128 x 128的ImageNet數據集上訓練先前的GAN模型,生成動物的例子。上面的圖像是Generative Adversarial Networks, Ian Goodfellow, NIPS 2016 Tutorial的Figure 29
在這項工作中,研究了一個更低維度的基于矢量的表示,這也受益于人類繪畫的靈感。模型sketch-rnn基于seq2seq自動編碼框架。它包含了變分推理和將超網絡(hypernetworks)用作遞歸神經網絡單元。seq2seq自動編碼框架的目標是訓練一個將輸入序列編碼為浮點數向量的神經網絡,這個向量稱為latent vector,并使用解碼器從latent vector重構輸出序列。
Schematic of sketch-rnn.圖
模型中故意向latent vector添加了噪聲。論文展示了通過將噪聲引入到編碼器和解碼器之間的通信通道中,該模型就不再能夠準確地產生輸入草圖,而是必須捕獲草圖的本質作為噪聲的latent vector。解碼器利用這個latent vector生產了一個用于繪制新圖的動作序列。在下圖中,將幾個貓的草圖提供給編碼器,然后使用解碼器重構草圖。
Reconstructions from a model trained on catsketches.圖
重要的是,重構的貓的草圖不是輸入草圖的副本,而是與輸入具有相似特征的貓的新草圖。為了證明這個模型不是簡單地復制輸入序列,而是實際上學到了一些關于人們繪畫貓的方式的信息,可以嘗試將非標準草圖提供給編碼器。
當我將一只三眼貓的草圖提供給編碼器時,這個模型生成了一個相似的兩眼貓。為了表明模型不是簡單地從從大量記憶貓草圖中選擇最接近的正常貓,所以試圖輸入一些完全不同的東西,比如牙刷草圖。網絡生成了一個類似貓的草圖:長的胡須,這模仿了牙刷的特征和方向。這表明,該網絡已經學到了將輸入草圖編碼成一組抽象的貓概念,并嵌入到latent vector,基于此latent vector,網絡還能夠重構全新的草圖。
不相信?我們利用模型重復了這一實驗,利用一組豬草圖來訓練模型,最后得出了相似的結論。當提供一張具有八條腿的豬的草圖時,最后模型生成了一個僅有四條腿的類似的豬。如果將一輛卡車草圖喂給此模型,可能會得到一個類似卡車的豬。
Reconstructions from a model trained on pigsketches.圖
為了研究這些latent vectors是如何將概念上的動物特征進行編碼,在下圖中,首先獲得了兩個latent vectors,它們是由兩個不同的豬的草圖中編碼而來,這種情況下,一個豬頭(綠色盒子)和一只全豬(橙色盒子)。想了解模型是如何學習表示豬的,一種表示的方法就是在不同的latent vectors之間進行插值,并且利用每個被插值的latent vectors來可視化每個草圖。在下圖中,對豬頭的草圖到豬的全圖演化進行了可視化,這個過程展示了模型是如何組織豬草圖的概念的。可以看到,latent vector控制鼻子的大小以及鼻子相對于頭部的相對位置,也控制了身體和腿部在草圖中的生成。
在豬素描畫上訓練的模型生成的隱空間插值
我們想知道如果我們的模型是否可以學習到很多動物的表示方法,如果可以的話,會是什么樣的呢?在下圖中,我們通過對一個貓頭和一只整豬的隱向量之間進行插值,生成了一些素描。我們可以看到特征表示慢慢的從一個貓頭,到帶著尾巴的貓,到身體很胖的貓,然后最終變成一只整豬。就好像孩子在學習繪畫一樣,我們的模型學習如何通過將頭,腳和尾巴添加到身體上來構造動物。我們可以看出,我們的模型也能畫出貓頭,與豬頭完全不同。
在貓和豬的素描畫上訓練的模型的隱空間插值
這些插值樣例表明,隱向量實際上對素描的概念特征進行了編碼。但是我們能使用這些特征來增強其它沒有這類特征的素描嗎?例如,將一個身體加在貓頭上?
學習到的抽象概念之間的關系,使用隱向量計算進行探索
實際上,我們發現對于在貓和豬素描上訓練的模型可以進行素描畫之間的類推。例如,我們可以從一個整豬的隱向量中減去一個編碼的豬頭的隱向量,來得到只表示身體的隱向量。將這個差值和一個表示貓頭的隱向量相加,可以得到一只整貓。(貓頭+身體=整貓)。這些繪畫類推可以讓我們發現模型是如何組織隱空間來對多種生成素描的不同概念進行表示的。
創意應用
這個工作除了科研部分,我們對于sketch-rnn的潛在創意應用也同樣感到激動。例如,甚至是在最簡單的應用中,紙樣設計師可以應用sketch-cnn來生成大量類似但都各不相同的服裝或墻紙設計。
相似,但是獨一無二的貓,由單一的輸入畫像(綠色和黃色框)生成
正如我們之前所看到的,對于被訓練去畫豬的模型,如果輸入一張卡車的素描,可以變成去畫像豬的卡車的模型。我們可以將這一結果延伸至實際應用,或許可以幫助設計者想到能夠和目標觀眾產生更多共鳴的抽象設計。
例如下圖,我們將四個不同的椅子素描輸入我們的畫貓模型,來產生四個像椅子的貓。我們可以更進一步,整合之前描述的插值方法來探索像椅子的貓的隱空間,然后產生一個大的可供選擇的生成設計柵格。
探索生成的椅子-貓的隱空間
探索不同物體之間的隱空間可以讓有創造力的設計者來尋找不同畫作間的有意思的交集和聯系
探索日常物體的生成素描的隱空間
隱空間插值從左到右,然后從上到下
我們可以將sktech-cnn的解碼模型作為一個獨立的模型,并且訓練它來預測未完成素描的不同的可能結果。該技術可以應用于幫助畫家的創作過程,例如模型可以向畫家建議完成一個不完整的素描的各種替代方法。在下圖中,我們繪制了不同的不完整的素描(紅色),然后讓模型提出不同的方法來完成繪畫。
該模型從不完整的素描開始(垂直線左邊的紅色部分素描)然后自動生成不同的完整結果
我們可以更深一步理解這個概念,然后用不同模型來完成同一個不完整的素描。下圖中,我們可以看到如何把同一個圓圈和方塊變成不同的螞蟻、火烈鳥、直升機、老鷹、沙發,甚至畫刷的一部分。通過使用一個訓練來畫多種物體的模型集,設計者可以探索創新的方法來和他們的觀眾交流有意義的視覺消息。
用于繪畫不同物體的sketch-cnn模型來預測同樣的圓形和方塊(中間)的結尾
我們對于生成矢量圖模型的未來的各種可能性感到很興奮。這些模型會讓各種方向上的有趣的新創意應用成為可能。他們也可以作為工具來幫助我們提高對于自己的創造力思維過程的理解。如果想了解sketch-cnn的更多細節,請閱讀我們的論文《素描繪畫的神經網絡表示》(A Neural Representation of Sketch Drawings)。
論文解讀
摘要:我們提出了sketch-rnn,一個能夠構建出日常物體的線條畫的循環神經網絡(RNN)。該模型在幾千張原始的手繪圖像上進行訓練,表現了幾百類物體。這篇文章中,我們概括了條件和非條件的素描生成算法框架,并且描述了一個以向量形式產生連貫素描畫的新的魯棒訓練方法。
論文的貢獻如下:
概括出了用線條序列組成的向量圖像的有條件和無條件生成算法框架。
基于循環神經網絡的生成模型可以產生日常物體的向量形式的素描。
提出了一個針對矢量圖的訓練方法,可以使訓練更魯棒。
探索了條件生成模型中如何用模型的隱空間來表示矢量圖。
演示了對隱空間設置前提可以幫助模型生成更清楚的圖像。
討論了該方法的潛在創意應用。
我們也在努力制作一個更大的簡單手繪圖像數據庫,以激勵將來對生成模型的研究,并且我們之后會發布我們模型的實現以及開源項目sketch-rnn。
局限性:
1?對于大多數單類別的數據集,sketch-cnn可以對素描畫建模,得到最多300個數據點。但是一旦超過這個長度,模型很快就會變得很難訓練。
2?對于更復雜類別的圖片,例如美人魚或龍蝦,重建誤差指標不夠好,尤其是與簡單類別,例如螞蟻,人臉相比。
3 sketch-cnn不能對數據庫中的全部75類物體素描都進行有效的建模。
結論:
這個工作中,我們開發了一種用RNN對素描畫進行建模的方法。Sketch-rnn可以產生完成一幅不完整的素描畫的所有可能方法。我們的模型可以將當前的素描畫編碼到一個隱空間,并且可以在隱空間內有條件的生成類似的素描。我們演示了通過對兩個不同素描畫的隱空間之間的插值來得到素描畫本身之間的插值的意義。在對某一特定類圖像進行訓練后,我們的模型能夠改正輸入圖像中不正確的特征,并且輸出一個具有改正過的性質的相似的圖像。我們也演示了我們可以通過增加隱空間來控制素描畫的分布,并且演示了在隱向量上增加先驗分布對于產生清楚的矢量圖的重要性。
論文:https://arxiv.org/abs/1704.03477
總結
以上是生活随笔為你收集整理的LSTM+MDN【混合密度网络】---sketch rnn的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse 3.6的VE配置 Vis
- 下一篇: Bugzilla安装过程