AI帶來的穿越,老電影重現新畫質

老照片、老電影總能讓人們的思緒飄回那些久遠的年代,沉淀于其中,可與此同時,模糊的畫面又不免給記憶蒙上了一層薄霧。如今,隨著人工智能技術的發(fā)展,SRGAN(超分辨率生成對抗網絡)使得撥散云霧始見真,成倍還原了畫面質量。

2019年底,WAIC開發(fā)者·上海臨港人工智能開發(fā)者大會的開幕式上,上海市經濟和信息化委員會副主任張英為上海市人工智能創(chuàng)新中心授牌,深蘭科技等7家企業(yè)首批入選,同時深蘭科技兩項應用場景方案入圍“上海市第二批人工智能試點應用場景”。

其中,在AI+文化旅游場景中,深蘭科技入圍成為上海文化廣告影視集團有限公司的解決方案供應商,將為其提供視頻圖像質量增強技術,通過智能算法提高視頻畫面質量,使2K高清素材達到4K超高清要求,優(yōu)化提升老舊節(jié)目的圖像清晰度。

今天,就來個承上啟下,回顧前一年成績的同時,也用創(chuàng)新和進步為新的一年注入能量。獲獎方案的團隊負責人、深蘭科學院深度學習科學家方林博士,給出了實現超分辨率的SRGAN模型的網絡結構、訓練步驟和損失函數,將幫助GAN的初學者理解對抗網絡的實質,為今后設計更加復雜的超分模型打下基礎。

超分辨率

超分辨率的目的是把低分辨率的圖像或者視頻轉為高分辨率,比如:

我們利用超分辨率生成式對抗網絡(SRGAN, Super Resolution Generative Adversarial Network)實現超分辨率。

下面我們通過一個簡單的SRGAN模型來說明超分模型的基本結構和訓練步驟。

圖片準備

超分模型由兩張圖片組成,第一張是模糊圖片,形狀為[128, 128, 3];第二張是對應的清晰圖片,形狀為[512, 512, 3]。清晰圖片的長寬分別是模糊圖片的長寬的4倍。我們的目標是把模糊圖片的分辨率提高16倍。

圖片必須是一一對應的,即一張模糊圖片必須有對應的一張清晰圖片。為了準備圖片,我們先收集足夠數量(最好2萬張以上)的清晰圖片,圖片的長度和寬度應該都大于等于512。然后選取任意一個512*512的部分進行剪裁。

注意:

不要把一個大的圖片resize成512*512大小,因為這會導致圖片變形;

由于我們可以在大圖片的任意位置剪裁出512*512的圖片,所以長度或者寬度大于512的圖片可以生成多個清晰圖片。比如520*520的圖片可以生成64個清晰圖片。

當我們獲得了所有清晰圖片之后,再把每張清晰圖片resize到128*128大小,這樣我們就獲得了模糊圖片。OpenCV的resize()方法可以幫助我們改變圖片大小。

SRGAN模型

1、主要結構

SRGAN模型結構如下圖所示:

圖中“模糊”是指模糊圖片,“清晰”是指清晰圖片,“生成”是指生成器生成的圖片。生成圖片的分辨率與清晰圖片相同,為512*512。模糊圖片的分辨率是128*128,為清晰圖片的1/16。

上圖中的模型主要由生成器和辨別器兩部分組成。生成器的目的是輸入模糊圖片(圖中的“模糊”),輸出生成圖片(圖中的“生成”)。辨別器的輸入由a、b兩個參數組成。其中b是模糊圖片,a是生成圖片或者清晰圖片。辨別器的目的是判斷圖片a是否是真實的清晰圖片。b是用來協助辨別器進行判斷的。辨別器的輸出p是一個概率,1表示a是100%的真實清晰圖片,0%表示a是100%的生成圖片。

訓練上述模型時,生成器總是盡可能生成像真實圖片的圖片,而辨別器則盡可能分辨出a是真實圖片還是生成圖片。所以辨別器和生成器之間存在著一種對抗:生成器越優(yōu)化,辨別器越不能分辨生成圖片的真假;辨別器越優(yōu)化,生成器生成的圖片就越不能通過辨別器的檢查。對抗的結果是雙方的能力都得到了提高,最后達到納什均衡:即生成器生成了很像真實圖片的圖片,連辨別器也無法分辨其中的真假。這就是SRGAN的基本原理。

2、生成器結構

生成器的輸入是128*128的3通道圖片,輸出是512*512的3通道圖片。SRGAN使用U型網絡實現這種圖片到圖片的轉化,結構如下:

請注意:

第一,整個U型網絡的左半部分全部由卷積操作組成,用來抽取輸入圖像的特征。右半部分全部由反卷積操作組成,用來根據特征構建清晰圖片。由于輸出圖片比輸入圖片大4倍,所以右邊比左邊高出一截。

第二,左右兩邊相同大小的圖片之間的連線稱為捷徑,表示左邊的圖片與右邊的圖片進行加法操作,結果保留在右邊。這是借用了殘差神經網絡(ResNet)的做法。不過ResNet中的捷徑跨越相同數量的操作,而這里的捷徑跨越不同數量的操作,并且越上方的捷徑離輸入和輸出越近,快速傳播梯度的效果越好。

第三,左邊最后的卷積和最后的反卷積操作都不含激活函數,并且整個網絡中不使用Dropout,這樣做的原因超出了本文的討論范疇,這里不敘述。

3、辨別器結構

辨別器有兩個輸入,a表示要判斷真假的圖片,b是輔助辨別器判斷的模糊圖片。兩者的分辨率分別是512*512和128*128。對于參數a,我們采用卷積操作不斷提純其特征,最后全連接到一個神經元,最后經過sigmoid激活后得到一個概率。這條路徑我們稱為主路徑。參數b,我們通過resize改變其大小,然后從側面切入到主路徑中去,從而影響特征的提取。下圖顯示了辨別器結構:

請注意,全連接之后使用sigmoid激活函數,這樣可以獲得概率值。

SRGAN訓練

SRGAN的訓練分三步完成。第一步,訓練辨別器識別真樣本。這一步圖示如下:

這一步的目的是用每一對模糊和清晰圖片訓練辨別器,使得辨別器的輸出盡可能趨近于1。注意:清晰圖片對應于參數a,模糊圖片對應于參數b,辨別器的期望輸出是1。

假設我們用函數 disc(a,b) 表示辨別器的輸出(表示a為真實樣本的概率),則這一步的損失可以用交叉熵表示為:

其中a和b分別表示真實的清晰圖片和對應的模糊圖片。

第二步,訓練辨別器識別假樣本。這一步圖示如下:

請注意:生成器在這一步中是固定不變的,只有辨別器才被優(yōu)化。這是因為這一步只是為了訓練辨別器識別假樣本,也就是說辨別器的期望輸出是0,所以就不能改動生成器。否則就會導致生成器試圖生成讓辨別器輸出為0的圖片,這不是生成器所期望的。生成器應該期望生成能讓辨別器以為是真(即辨別器輸出為1)的圖片。

很多算法工程師不清楚在這一步訓練中如何達到僅訓練一個模塊(比如說辨別器),而固定其他模塊(比如說生成器)的目的。

在Tensorflow中,一般地,我們可以調用函數:

來實現梯度的反向傳播和對模型參數的優(yōu)化。此時我們只需指定第二個參數varlist等于辨別器中所有可訓練參數的列表(list)即可。其他未被指定的參數(比如生成器中的參數)就不會被優(yōu)化,也就是說,被固定了。

假設我們用函數gen()表示生成的輸出,則這一步辨別器的輸出是:

由于這一步辨別器的期望輸出是0,所以這一步的損失可以用交叉熵表示為:

第三步,訓練辨別器識別假樣本。這一步圖示如下:

請注意,在這一步訓練中辨別器被固定住了,保持不變,被訓練優(yōu)化的是生成器。因為這一步的目的是要讓生成器生成辨別器以為是真實圖片的圖片,所以辨別器的期望輸出是1。此時我們必須固定住辨別器,否則辨別器會變成這個樣子:不管生成器輸出什么樣的圖片,辨別器都盡可能輸出1。顯然,這不是我們所期望的。

這一步訓練的結構跟第二步相同,不同的是固定的是什么,訓練的是什么,以及辨別器的期望輸出不同。

由于這一步辨別器的期望輸出是1,所以這一步的損失可以用交叉熵表示為:

我們可以發(fā)現,第二步和第三步訓練的輸入數據都是b,網絡的輸出都是disc(gen(b),b), 但是期望輸出一個是0,另一個是1。對抗由此產生,最終的結果將達到納什均衡。理想情況下,disc(gen(b),b) 的結果既不是0也不是1,而是接近0.5。

結束語

我們有了三個訓練步驟,有了三個損失函數,并且知道每一步訓練什么、固定什么,則依次循環(huán)執(zhí)行這三步訓練就能達到實現超分模型的目的。

本文是對GAN和SRGAN的一個簡單說明,是給初學者理解SRGAN模型看的,沒有涉及到GAN更高深的知識(比如WGAN和推土機距離等)。如有錯漏之處希望給以批評指正。

(免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。 )

贊助商
2020-03-10
AI帶來的穿越,老電影重現新畫質
老照片、老電影總能讓人們的思緒飄回那些久遠的年代,沉淀于其中,可與此同時,模糊的畫面又不免給記憶蒙上了一層薄霧。

長按掃碼 閱讀全文