看得“深”、看得“清” 深度學習在影象超清化的應用

語言: CN / TW / HK

作者:張雨石

日復一日的人像臨摹練習使得畫家能夠僅憑几個關鍵特徵畫出完整的人臉。同樣地,我們希望機器能夠通過低清影象有限的影象資訊,推斷出影象對應的高清細節,這就需要演算法能夠像畫家一樣“理解”影象內容。至此,傳統的規則演算法不堪重負,新興的 深度學習 照耀著影象超清化的星空。

圖1. 最新的Pixel遞迴網路在影象超清化上的應用。左圖為低清影象,右圖為其對應的高清影象,中間為演算法生成結果。這是4倍超清問題,即將邊長擴大為原來的4倍。

得益於硬體的迅猛發展,短短几年間,手機已更新了數代,老手機拍下的照片在大解析度的螢幕上變得模糊起來。同樣地,影象解析度的提升使得網路頻寬的壓力驟增。如此,影象超清化演算法就有了用武之地。

對於存放多年的老照片,我們使用超清演算法令其細節栩栩如生;面對網路傳輸的頻寬壓力,我們先將影象壓縮傳輸,再用超清化演算法復原,這樣可以大大減少傳輸資料量。

傳統的幾何手段如三次插值,傳統的匹配手段如碎片匹配,在應對這樣的需求上皆有心無力。

深度學習的出現使得演算法對影象的語義級操作成為可能。本文即是介紹深度學習技術在影象超清化問題上的最新研究進展。

深度學習最早興起於影象,其主要處理影象的技術是卷積神經網路,關於卷積神經網路的起源,業界公認是Alex在2012年的ImageNet比賽中的煌煌表現。雖方五年,卻已是老生常談。因此卷積神經網路的基礎細節本文不再贅述。在下文中,使用CNN(Convolutional Neural Network)來指代卷積神經網路。

CNN出現以來,催生了很多研究熱點,其中最令人印象深刻的五個熱點是:

深廣探索:VGG網路的出現標誌著CNN在搜尋的深度和廣度上有了初步的突破。結構探索:Inception及其變種的出現進一步增加了模型的深度。而ResNet的出現則使得深度學習的深度變得“名副其實”起來,可以達到上百層甚至上千層。內容損失:影象風格轉換是CNN在應用層面的一個小高峰,湧現了一批以Prisma為首的小型創業公司。但影象風格轉換在技術上的真正貢獻卻是通過一個預訓練好的模型上的特徵圖,在語義層面生成影象。對抗神經網路(GAN):雖然GAN是針對機器學習領域的架構創新,但其最初的應用卻是在CNN上。通過對抗訓練,使得生成模型能夠借用監督學習的東風進行提升,將生成模型的質量提升了一個級別。Pixel CNN:將依賴關係引入到畫素之間,是CNN模型結構方法的一次比較大的創新,用於生成影象,效果最佳,但有失效率。

這五個熱點,在影象超清這個問題上都有所體現。下面會一一為大家道來。

CNN的第一次出手

圖2. 首個應用於影象超清問題的CNN網路結構.輸入為低清影象,輸出為高清影象.該結構分為三個步驟:低清影象的特徵抽取、低清特徵到高清特徵的對映、高清影象的重建。

影象超清問題的特點在於,低清影象和高清影象中很大部分的資訊是共享的,基於這個前提,在CNN出現之前,業界的解決方案是使用一些特定的方法,如PCA、Sparse Coding等將低解析度和高解析度影象變為特徵表示,然後將特徵表示做對映。

基於傳統的方法結構,CNN也將模型劃分為三個部分,即特徵抽取、非線性對映和特徵重建。由於CNN的特性,三個部分的操作均可使用卷積完成。因而,雖然針對模型結構的解釋與傳統方法類似,但CNN卻是可以同時聯合訓練的統一體,在數學上擁有更加簡單的表達。

不僅在模型解釋上可以看到傳統方法的影子,在具體的操作上也可以看到。在上述模型中,需要對資料進行預處理,抽取出很多patch,這些patch可能互有重疊,將這些Patch取合集便是整張影象。上述的CNN結構是被應用在這些Patch而不是整張影象上,得到所有影象的patch後,將這些patch組合起來得到最後的高清影象,重疊部分取均值。

更深更快更準的CNN

圖3. 基於殘差的深度CNN結構。該結構使用殘差連線將低清影象與CNN的輸出相加得到高清影象。即僅用CNN結構學習低清影象中缺乏的高清細節部分。

圖2中的方法雖然效果遠高於傳統方法,但是卻有若干問題:

訓練層數少,沒有足夠的視野域;訓練太慢,導致沒有在深層網路上得到好的效果;不能支援多種倍數的高清化。

針對上述問題,圖3演算法提出了採用更深的網路模型。並用三種技術解決了圖2演算法的問題。

第一種技術是殘差學習,CNN是端到端的學習,如果像圖2方法那樣直接學習,那麼CNN需要儲存影象的所有資訊,需要在恢復高清細節的同時記住所有的低解析度影象的資訊。如此,網路中的每一層都需要儲存所有的影象資訊,這就導致了資訊過載,使得網路對梯度十分敏感,容易造成梯度消失或梯度爆炸等現象。而影象超清問題中,CNN的輸入影象和輸出影象中的資訊很大一部分是共享的。殘差學習是隻針對影象高清細節資訊進行學習的演算法。如上圖所示,CNN的輸出加上原始的低解析度影象得到高解析度影象,即CNN學習到的是高解析度影象和低解析度影象的差。如此,CNN承載的資訊量小,更容易收斂的同時還可以達到比非殘差網路更好的效果。

高清影象之所以能夠和低清影象做加減法,是因為,在資料預處理時,將低清影象使用插值法縮放到與高清影象同等大小。於是雖然影象被稱之為低清,但其實影象大小與高清影象是一致的。

第二種技術是高學習率,在CNN中設定高學習率通常會導致梯度爆炸,因而在使用高學習率的同時還使用了自適應梯度截斷。截斷區間為[-θ/γ, θ/γ],其中γ為當前學習率,θ是常數。

第三種技術是資料混合,最理想化的演算法是為每一種倍數分別訓練一個模型,但這樣極為消耗資源。因而,同之前的演算法不同,本技術將不同倍數的資料集混合在一起訓練得到一個模型,從而支援多種倍數的高清化。

感知損失

在此之前,使用CNN來解決高清問題時,對影象高清化的評價方式是將CNN生成模型產生的影象和實際影象以畫素為單位計算損失函式(一般為歐式距離)。此損失函式得到的模型捕捉到的只是畫素級別的規律,其泛化能力相對較弱。

而感知損失,則是指將CNN生成模型和實際影象都輸入到某個訓練好的網路中,得到這兩張影象在該訓練好的網路上某幾層的啟用值,在啟用值上計算損失函式。

由於CNN能夠提取高階特徵,那麼基於感知損失的模型能夠學習到更魯棒更令人信服的結果。

圖4. 基於感知損失的影象風格轉換網路。該網路也可用於影象超清問題。左側是一個待訓練的轉換網路,用於對影象進行操作;右側是一個已訓練好的網路,將使用其中的幾層計算損失。

圖4即為感知損失網路,該網路本是用於快速影象風格轉換。在這個結構中,需要訓練左側的Transform網路來生成影象,將生成的影象Y和內容影象與風格影象共同輸入進右側已經訓練好的VGG網路中得到損失值。如果去掉風格影象,將內容影象變為高清影象,將輸入改為低清影象,那麼這個網路就可以用於解決影象超清問題了。

對抗神經網路(GAN)

圖5. 對抗訓練的生成網路G和判別網路結構D。上半部分是生成網路G,層次很深且使用了residual block和skip-connection結構;下半部分是判別網路D。

對抗神經網路稱得上是近期機器學習領域最大的變革成果。其主要思想是訓練兩個模型G和D。G是生成網路而D是分類網路,G和D都用D的分類準確率來進行訓練。G用於某種生成任務,比如影象超清化或影象修復等。G生成影象後,將生成影象和真實影象放到D中進行分類。使用對抗神經網路訓練模型是一個追求平衡的過程:保持G不變,訓練D使分類準確率提升;保持D不變,訓練G使分類準確率下降,直到平衡。GAN框架使得無監督的生成任務能夠利用到監督學習的優勢來進行提升。

基於GAN框架,只要定義好生成網路和分類網路,就可以完成某種生成任務。

而將GAN應用到影象高清問題的這篇論文,可以說是集大成之作。生成模型層次深且使用了residual block和skip-connection;在GAN的損失函式的基礎上同時添加了感知損失。

GAN的生成網路和分類網路如圖5,其中,生成網路自己也可以是一個單獨的影象超清演算法。論文中分析了GAN和non-GAN的不同,發現GAN主要在細節方面起作用,但無法更加深入地解釋。“無法解釋性”也是GAN目前的缺點之一。

畫素遞迴網路(Pixel CNN)

圖5中的GAN雖然能夠達到比較好的效果,但是由於可解釋性差,難免有套用之嫌。

其實,對於影象超清這個問題來說,存在一個關鍵性的問題,即一張低清影象可能對應著多張高清影象,那麼問題來了。

假如我們把低解析度影象中需要高清化的部分分成A,B,C,D等幾個部分,那麼A可能對應A1,A2,A3,A4,B對應B1,B2,B3,B4,以此類推。假設A1,B1,C1,D1對應一張完美的高清圖片。那麼現有的演算法可能生成的是A1,B2,C3,D4這樣的混搭,從而導致生成的高清影象模糊。

為了驗證上述問題的存在,設想一種極端情況。

圖6. 影象超清模糊性問題分析圖示。上半部分為分析問題所用資料集的構建。下半部分為現有的損失函式在這個問題上的效果。可以通過對比看出,PixelCNN能夠防止這種模糊的出現。

為了分析影象模糊問題的成因,在圖6的上半部分,基於MNist資料集生成一個新的資料集。生成方法如下:將MNIST資料集中的圖片A長寬各擴大兩倍,每張圖片可以生成兩張圖片A1和A2,A1中A處於右下角,A2中A處於左上角。

把原圖當做低清圖片,生成的圖當成高清圖片。使用圖6下半部分所列舉的三種方法進行訓練,得到的模型,在生成影象的時候,會產生圖6下半部分的結果。即每個畫素點可能等概率地投射到左上部分和右下部分,從而導致生成的圖片是錯誤的。而引入PixelCNN後,由於畫素之間產生了依賴關係,很好地避免了這種情況的發生。

為了解決上述問題,需要在生成影象的同時引入先驗知識。畫家在擁有了人臉的知識之後,就可以畫出令人信服的高清細節。類比到影象超清問題中,先驗知識即是告知演算法該選擇哪一種高清結果。

在影象超清問題中,這樣的知識體現為讓畫素之間有相互依賴的關係。這樣,就可以保證A、B、C、D四個不同的部分對於高清版的選擇是一致的。

圖7. 基於PixelCNN的解決影象超清問題的CNN網路結構。其中先驗網路(prior network)為PixelCNN;條件網路(conditioning network)為影象生成網路,其結構與作用同GAN中的生成網路、感知損失中的轉換網路均類似。

模型架構如圖7。其中條件網路是一個在低清影象的基礎上生成高清影象的網路。它能以畫素為單位獨立地生成高清影象,如同GAN中的G網路,感知損失中的轉換網路。而先驗網路則是一個Pixel CNN元件,它用來增加高清影象畫素間的依賴,使畫素選擇一致的高清細節,從而看起來更加自然。

那麼Pixel CNN是如何增加依賴的呢?在生成網路的時候,Pixel CNN以畫素為單位進行生成,從左上角到右下角,在生成當前畫素的時候,會考慮之前生成的畫素。

若加上先驗網路和條件網路的混合, PixelCNN在生成影象的時候,除了考慮前面生成的畫素,還需要考慮條件網路的結果。

總結

上述演算法是影象超清問題中使用的較為典型的CNN結構,此外,還有很多其他的結構也達到了比較好的效果。隨著CNN網路結構層次的日益加深,距離實用場景反而越來越遠。譬如,基於GAN的網路結構的訓練很難穩定,且結果具有不可解釋性;基於PixelCNN的網路在使用中由於要在pixel級別生成,無法並行,導致生成效率極為低下。

更進一步地,從實用出發,可以在資料方向上進行進一步的優化。譬如,現在的演算法輸入影象都是由低清影象三次插值而來,那麼,是否可以先用一個小網路得到的結果來作為初始化的值呢?再如,多個小網路串聯是否能得到比一個大網路更好的結果等等。

影象超清問題是一個相對來說比較簡單的影象語義問題,相信這只是影象語義操作的一個開始,今後越來越多的影象處理問題將會因為CNN的出現迎刃而解。

本文采用「CC BY-SA 4.0 CN」協議轉載自網際網路、僅供學習交流,內容版權歸原作者所有,如涉作品、版權和其他問題請給「我們」留言處理。