基于GAN框架,只要定義好生成網(wǎng)絡(luò)和分類網(wǎng)絡(luò),就可以完成某種生成任務(wù)。
而將GAN應(yīng)用到圖像高清問題的這篇論文,可以說是集大成之作。生成模型層次深且使用了residual block和skip-connection;在GAN的損失函數(shù)的基礎(chǔ)上同時(shí)添加了感知損失。
GAN的生成網(wǎng)絡(luò)和分類網(wǎng)絡(luò)如圖5,其中,生成網(wǎng)絡(luò)自己也可以是一個(gè)單獨(dú)的圖像超清算法。論文中分析了GAN和non-GAN的不同,發(fā)現(xiàn)GAN主要在細(xì)節(jié)方面起作用,但無(wú)法更加深入地解釋。“無(wú)法解釋性”也是GAN目前的缺點(diǎn)之一。
像素遞歸網(wǎng)絡(luò)(Pixel CNN)
圖5中的GAN雖然能夠達(dá)到比較好的效果,但是由于可解釋性差,難免有套用之嫌。
其實(shí),對(duì)于圖像超清這個(gè)問題來(lái)說,存在一個(gè)關(guān)鍵性的問題,即一張低清圖像可能對(duì)應(yīng)著多張高清圖像,那么問題來(lái)了。
假如我們把低分辨率圖像中需要高清化的部分分成A,B,C,D等幾個(gè)部分,那么A可能對(duì)應(yīng)A1,A2,A3,A4,B對(duì)應(yīng)B1,B2,B3,B4,以此類推。假設(shè)A1,B1,C1,D1對(duì)應(yīng)一張完美的高清圖片。那么現(xiàn)有的算法可能生成的是A1,B2,C3,D4這樣的混搭,從而導(dǎo)致生成的高清圖像模糊。
為了驗(yàn)證上述問題的存在,設(shè)想一種極端情況。
圖6. 圖像超清模糊性問題分析圖示。上半部分為分析問題所用數(shù)據(jù)集的構(gòu)建。下半部分為現(xiàn)有的損失函數(shù)在這個(gè)問題上的效果??梢酝ㄟ^對(duì)比看出,PixelCNN能夠防止這種模糊的出現(xiàn)。
為了分析圖像模糊問題的成因,在圖6的上半部分,基于MNist數(shù)據(jù)集生成一個(gè)新的數(shù)據(jù)集。生成方法如下:將MNIST數(shù)據(jù)集中的圖片A長(zhǎng)寬各擴(kuò)大兩倍,每張圖片可以生成兩張圖片A1和A2,A1中A處于右下角,A2中A處于左上角。
把原圖當(dāng)做低清圖片,生成的圖當(dāng)成高清圖片。使用圖6下半部分所列舉的三種方法進(jìn)行訓(xùn)練,得到的模型,在生成圖像的時(shí)候,會(huì)產(chǎn)生圖6下半部分的結(jié)果。即每個(gè)像素點(diǎn)可能等概率地投射到左上部分和右下部分,從而導(dǎo)致生成的圖片是錯(cuò)誤的。而引入PixelCNN后,由于像素之間產(chǎn)生了依賴關(guān)系,很好地避免了這種情況的發(fā)生。
為了解決上述問題,需要在生成圖像的同時(shí)引入先驗(yàn)知識(shí)。畫家在擁有了人臉的知識(shí)之后,就可以畫出令人信服的高清細(xì)節(jié)。類比到圖像超清問題中,先驗(yàn)知識(shí)即是告知算法該選擇哪一種高清結(jié)果。
在圖像超清問題中,這樣的知識(shí)體現(xiàn)為讓像素之間有相互依賴的關(guān)系。這樣,就可以保證A、B、C、D四個(gè)不同的部分對(duì)于高清版的選擇是一致的。
圖7. 基于PixelCNN的解決圖像超清問題的CNN網(wǎng)絡(luò)結(jié)構(gòu)。其中先驗(yàn)網(wǎng)絡(luò)(prior network)為PixelCNN;條件網(wǎng)絡(luò)(conditioning network)為圖像生成網(wǎng)絡(luò),其結(jié)構(gòu)與作用同GAN中的生成網(wǎng)絡(luò)、感知損失中的轉(zhuǎn)換網(wǎng)絡(luò)均類似。
模型架構(gòu)如圖7。其中條件網(wǎng)絡(luò)是一個(gè)在低清圖像的基礎(chǔ)上生成高清圖像的網(wǎng)絡(luò)。它能以像素為單位獨(dú)立地生成高清圖像,如同GAN中的G網(wǎng)絡(luò),感知損失中的轉(zhuǎn)換網(wǎng)絡(luò)。而先驗(yàn)網(wǎng)絡(luò)則是一個(gè)Pixel CNN組件,它用來(lái)增加高清圖像像素間的依賴,使像素選擇一致的高清細(xì)節(jié),從而看起來(lái)更加自然。
那么Pixel CNN是如何增加依賴的呢?在生成網(wǎng)絡(luò)的時(shí)候,Pixel CNN以像素為單位進(jìn)行生成,從左上角到右下角,在生成當(dāng)前像素的時(shí)候,會(huì)考慮之前生成的像素。
若加上先驗(yàn)網(wǎng)絡(luò)和條件網(wǎng)絡(luò)的混合, PixelCNN在生成圖像的時(shí)候,除了考慮前面生成的像素,還需要考慮條件網(wǎng)絡(luò)的結(jié)果。
總結(jié)
上述算法是圖像超清問題中使用的較為典型的CNN結(jié)構(gòu),此外,還有很多其他的結(jié)構(gòu)也達(dá)到了比較好的效果。隨著CNN網(wǎng)絡(luò)結(jié)構(gòu)層次的日益加深,距離實(shí)用場(chǎng)景反而越來(lái)越遠(yuǎn)。譬如,基于GAN的網(wǎng)絡(luò)結(jié)構(gòu)的訓(xùn)練很難穩(wěn)定,且結(jié)果具有不可解釋性;基于PixelCNN的網(wǎng)絡(luò)在使用中由于要在pixel級(jí)別生成,無(wú)法并行,導(dǎo)致生成效率極為低下。
更進(jìn)一步地,從實(shí)用出發(fā),可以在數(shù)據(jù)方向上進(jìn)行進(jìn)一步的優(yōu)化。譬如,現(xiàn)在的算法輸入圖像都是由低清圖像三次插值而來(lái),那么,是否可以先用一個(gè)小網(wǎng)絡(luò)得到的結(jié)果來(lái)作為初始化的值呢?再如,多個(gè)小網(wǎng)絡(luò)串聯(lián)是否能得到比一個(gè)大網(wǎng)絡(luò)更好的結(jié)果等等。