Demo: YouTubegit
Arxiv: 1903.04411github
Github: hzwer/LearningToPaint算法
畫家能夠用寥寥數筆創造出迷人的畫做,咱們試圖研究如何讓機器掌握這樣的能力。經過結合神經網絡筆畫渲染器和基於模型的深度強化學習,咱們的 AI 能夠用筆畫描繪紋理豐富的天然圖像。 AI 用數百個筆畫就能夠實現視覺效果很好的圖畫,對於每一個筆畫,直接肯定筆畫的位置和顏色等。 AI 的訓練過程不須要人類繪畫的經驗或者筆畫軌跡數據。網絡
以人臉 (CelebA) 爲例,須要一張 GPU,10 小時訓練筆畫渲染器,40 小時訓練 AI,其間 AI 畫了數百萬張圖片來學習。框架
下面是咱們的 AI 畫不一樣類型的圖片的效果,咱們的 AI 最終學會了先畫出大體輪廓,再填充細節的策略。函數
泛化的效果也不錯,見題圖學習
若是再把圖片放大分塊修一下細節,視覺效果會更好動畫
小時候學素描,我以爲老師的水平很是高,由於他們能把靜物和人都畫的很是像。後來,我在網上看到一些畫家的做品,好比丟勒(德國畫家),早期的畢加索,才明白了一點什麼叫作大師的素描。他們的畫很是乾淨,線條表現力極強,用很是少的筆畫數,很是簡單的調子,構建出生動的形象。這是通常繪畫愛好者花多少時間也難以模仿的,須要對事物結構的深入理解,對畫筆的控制能力和對筆畫相互關係的極強把握。設計
計算機中,一張圖片由 n x n 個像素點組成,每一個點由 RGB 三個值肯定顏色。從這個意義上來講,讓計算機臨摹一張畫,最簡單的方法就是逐個像素填充。而人在畫畫的時候,是用筆畫去構建一張圖片的。如何讓計算機像人同樣繪畫?這是我在接觸深度學習不久後就十分感興趣的問題。3d
從強化學習的角度看,咱們須要設計一個 AI,給它一個畫布和目標圖。AI 的每一步在畫布上畫一個筆畫,當它畫的筆畫使畫布和目標圖更像時,咱們就給它獎勵,驅動它學習。咱們能夠設定一個筆畫上限,讓 AI 在給定的筆畫數後終止。
咱們的基準算法是深度肯定策略梯度 (DDPG) 算法,簡單來講,DDPG 運用了演員-評論家(Actor - Critic) 框架,是一種是策略梯度算法和值函數方法的混合算法,其中策略網絡被稱爲 Actor,而價值網絡被稱爲 Critic。在畫畫這個任務中,Actor 每次畫一個筆畫,而 Critic 來爲 Actor 的這個筆畫作一個評價,Actor 的目標是獲得更好的評價,Critic 的目標是評價得更準確。DDPG 的優勢是可以在連續的動做空間上做決策,也就是說,咱們能夠設計一個 k 維向量 ,其中每一維在 0 到 1 之間,來控制筆畫的不一樣屬性,好比
控制筆畫起點座標,
控制筆畫終點座標等。並且 DDPG 還能離線訓練,即 AI 對環境的探索信息能夠存儲在一個緩衝區中,訓練從其中採樣,一個信息能夠重複使用。
爲了解決環境探索建模困難的問題,咱們預訓練了一個神經網絡筆畫渲染器,能夠快速地根據筆畫的參數給出渲染在畫布上的筆畫,支持在 GPU上並行。
神經網絡筆畫渲染器還能夠接入到強化學習的框架中來輔助 AI 的訓練。咱們將 DDPG 改形成了一個基於模型 (Model-based) 的方法,顯著提升了 AI 的訓練速度和表現(以下圖)。
2. Wasserstein 生成對抗損失函數 (WGAN Loss)。咱們須要度量畫布和目標圖的類似度以給出獎勵函數,咱們發現 WGAN Loss 是一種比歐幾里得距離更好的度量,使得最後畫出來的圖細節更豐富。
3. 網絡結構設計。Actor 和 Critic 是輸入縮小版本的 ResNet-18。Batch Normalization (BN) 能夠加快 Actor 訓練,而在 Critic 上效果不明顯。Critic 使用帶 TReLu 激活函數的 Weight Normalization (WN with TReLu)。渲染器用 Sub-pixel 來代替反捲積顯著消除棋盤效應。GAN 的判別器網絡用了相似 PatchGAN 的結構,加上 WN with TReLu。咱們的方法對於超參數也不太敏感,基本都使用了跟別人論文相似的超參數。具體細節見 paper。
咱們使用在幾個數據集上作了實驗,包括手寫數字 (MNIST),街景門牌 (SVHN),名人人臉 (CelebA),天然場景圖像 (ImageNet) ,限制的筆畫數分別是 5, 40, 200, 400。
咱們對比了用不一樣的筆畫數畫人臉的結果,從 100 個筆畫到 1000 個筆畫,筆畫數越多,細節的恢復越好。
比較有趣的是,咱們還能夠設計不一樣形狀的筆畫來獲得十分有趣的結果,好比限制 AI 只能畫圓,或者只能畫三角形等。
有一個相似的任務叫 stroke-based rendering,大多數解法是每一個筆畫基於貪心選擇,或者使用大量的搜索等,最後效果也很棒,參見 Aaron Hertzmann 的一些文章,圖形學方向也有很多工做研究了筆畫的設計,動畫生成等。
與咱們相似的工做有 SPIRAL,這也是咱們文中對比的。BMVC 2018 的 Doodle - SDQ 用 DQN 來畫簡筆畫 ,ICLR 2019 的 StrokeNet 提出了相似的筆畫渲染器。還有早一些的 Sketch-RNN 系列工做。用神經網絡建模繪畫的方法有點像 NIPS 2018 的 World Models,David Ha 還發推宣傳了咱們的 AI。
用深度強化學習的方法作了一個看起來效果還不錯的 AI,僅須要修改最大筆畫數,就能夠適於不一樣到數據集,之後仗着它街頭賣藝,但願你們可以喜歡。咱們儘可能讓這套方法看起來簡潔乾淨,但不免還有許多缺點,歡迎你們提建議。
具體算法細節能夠看咱們的 Arxiv,其中還有另一些對比實驗,和形式化的定義推導等。