大家好,我是為人造的智能操碎了心的智能禪師。
又到了 Weekend Eve,大家應該都出去玩了吧?看到今天的標題還敢點進來看的人,禪師敬你是個肥宅。肥宅永遠快樂。
今天轉載的文章,來自譯智社的小夥伴。這是一群來自全國多所頂級高校、很有理想的年輕人,因為熱愛人工智慧,組成了一個社團(字面意義的社團),努力推進人工智慧的普及。說起來跟本禪師的願景很一致嘛。
可能很多人不知道,今天其實是國際平靜日(Day of Peace)。所以,今天大家應該 燥!起!來!
全文大約1500字。讀完可能需要下面這首歌的時間
👇
用機器學習生成圖片(上)—— GAN 和 pix2pix
本文翻譯、總結自朱俊彥的線上報告,主要講了如何用機器學習生成圖片。
來源:
https://games-cn.org/games-webinar-20180913-64/
主講嘉賓
姓名:朱俊彥(Jun-Yan Zhu)
現狀:
麻省理工學院博士後(PostDoc at MIT)
計算機科學與人工智慧實驗室(Computer Science and Artificial Intelligence Laboratory, CSAIL)
個人主頁:
http://people.csail.mit.edu/junyanz/
主持人
姓名:周曉巍
現狀:
浙江大學 CAD&CG 國家重點實驗室
個人主頁:
https://fling.seas.upenn.edu/~xiaowz/dynamic/wordpress/
這是機器學習滴時代!
計算機視覺(Computer Vision, CV)領域近年來發生了巨大的變化。在 2012 年之前,CV 的主要研究方法是使用人工設計(hand-designed)的特徵完成各種任務(見下圖)。
2012 年使用深度神經網絡(Deep Neural Network, DNN)在 ImageNet 的分類任務上取得了巨大成功(見下圖)。
從此深度學習(Deep Learning)的相關研究如火如荼地展開了,比如說下面這三個慄子:
物體識別(Object detection)
[Redmon etal., 2018]
對人體的理解(Human understanding)
[Guler et al., 2018]
自動駕駛(Autonomous driving)
[Zhao et al., 2017]
圖形學中的嘗試:趁手的武器 or 白費功夫?
在傳統的圖形學管線(pipeline)中,輸出圖像需要經過建模、材質貼圖、光照、渲染等一系列繁瑣的步驟(見下圖)。
現在大家看到了 Deep Learning 的潛力,那我們自然的就有個想法:有沒有可能使用 Deep Learning 簡化計算機圖形學(Computer Graphics)的研究呢?
一個直接的想法是把 DNN 「倒過來用」。之前的 DNN 可能是輸入一幅圖像,輸出一個標籤(比如說貓),那我們能不能輸入「貓」這個字,輸出一張貓的照片呢?
很遺憾,答案是 No!因為這種任務實在太複雜啦!我們很難讓 DNN 憑空輸出圖像這樣的高維數據(High dimensional data)(這裡的「高維」可以理解成數據量大)。實際上,在很長一段時間裡,DNN 只能輸出數字這種簡單的、低分別率的小圖像,就像下面這樣:
而想要生成想遊戲場景這類的圖片,這種方法根本沒用。所以,我們必須得想出更厲害滴東西完成這項任務(使命感爆棚)!
GAN 就完了?Naive!
於是…在月黑風高的某一天(畫風逐漸跑偏),一個叫做生成對抗網絡 (Generative Adversarial Network),也就是大名鼎鼎的 GAN —— 的東西橫空出世。作者是下面這位小哥和他的小夥伴們:
那麼,我們該怎麼 GAN 出圖像呢?且聽我細細道來~
一般來說,GAN 中包含兩種類型的網絡 G 和 D。其中,G 為 Generator,它的作用是生成圖片,也就是說,在輸入一個隨機編碼(random code)之後,它將輸出一幅由神經網絡自動生成的、假的圖片 G(z)。
另外一個網絡 D 為 Discriminator 是用來判斷的,它接受 G 輸出的圖像作為輸入,然後判斷這幅圖像的真假,真的輸出 1,假的輸出 0。
在兩個網絡互相博弈(金坷垃日本人:不邀噠架)的過程中,兩個網絡的能力都越來越高:G 生成的圖片越來越像真的圖片,D 也越來越會判斷圖片的真假。到了這一步,我們就能「卸磨殺驢」—— 丟掉 D 不要了,把 G 拿來用作圖片生成器。
正式一點兒講(上公式啦),我們就是要在最大化 D 的能力的前提下,最小化 D 對 G 的判斷能力,這是一個最小最大值問題,它的學習目標是:
為了增強 D 的能力,我們分別考慮輸入真的圖像和假的圖像的情況。上式中第一項的 D(G(z)) 處理的是假圖像 G(z),這時候評分 D(G(z)) 需要盡力降低;第二項處理的是真圖像 x,這時候的評分要高。
GAN的局限性
即便如此,傳統的 GAN 也不是萬能的,它有下面兩個不足:
1. 沒有用戶控制(user control)能力
在傳統的 GAN 裡,輸入一個隨機噪聲,就會輸出一幅隨機圖像。
但用戶是有想法滴,我們想輸出的圖像是我們想要的那種圖像,和我們的輸入是對應的、有關聯的。比如輸入一隻喵的草圖,輸出同一形態的喵的真實圖片(這裡對形態的要求就是一種用戶控制)。
2. 低解析度(Low resolution)和低質量(Low quality)問題
儘管生成的圖片看起來很不錯,但如果你放大看,就會發現細節相當模糊。
怎樣改善?
前面說過傳統的 GAN 的種種局限,那麼現在,我們相應的目標就是:
提高 GAN 的用戶控制能力
提高 GAN 生成圖片的解析度和質量
為了達到這樣的目標,和把大象裝到冰箱裡一樣,總共分三步:
pix2pix:有條件地使用用戶輸入,它使用成對的數據(paired data)進行訓練。
CycleGAN:使用不成對的數據(unpaired data)的就能訓練。
pix2pixHD:生成高解析度、高質量的圖像。
下面分別進行詳細敘述~
pix2pix
pix2pix 對傳統的 GAN 做了個小改動,它不再輸入隨機噪聲,而是輸入用戶給的圖片:
但這也就產生了新的問題:我們怎樣建立輸入和輸出的對應關係。此時的 G 輸出如果是下面這樣,D 會判斷是真圖:
但如果 G 的輸出是下面這樣的,D 拿來一看,也會認為是真的圖片 QAQ…也就是說,這樣做並不能訓練出輸入和輸出對應的網絡 G,因為是否對應根本不影響 D 的判斷。
為了體現這種對應關係,解決方案也很簡單,你可以也已經想到了:我們把 G 的輸入和輸出一起作為 D 的輸入不就好了?於是現在的優化目標變成了這樣:
這項研究還是挺成功的,大家可以去在線體驗一下 demo,把草圖(sketch)變成圖片:
連結地址:https://affinelayer.com/pixsrv/
當然,有些比較皮的用戶輸入了奇形怪狀的草圖,然後畫風就變成了這樣:
應用
pix2pix 的核心是有了對應關係,這種網絡的應用範圍還是比較廣泛的,比如:
1. 草圖變圖片 [Isola, Zhu, Zhou, Efros, 2016]:
2. 灰度圖變彩色圖 [Isola, Zhu, Zhou, Efros, 2016]:
3. 自動著色 Data from [Russakovsky et al. 2015]:
4. 交互式著色 [Zhang*, Zhu*, Isola, Geng, Lin, Yu, Efros, 2017]:
下次會講 CycleGAN 和 pix2pixHD ,它們分別解決了數據不成對和圖像解析度低的問題。