看得「深」、看得「清」——深度學習在圖像超清化的應用

  1. 本文首發於《程序員》雜誌
看得“深”、看得“清”——深度學習在圖像超清化的應用

圖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的出現迎刃而解。

看得“深”、看得“清”——深度學習在圖像超清化的應用


分享到:


相關文章: