1. 程式人生 > >對深度學習上的超解析度認知(一)

對深度學習上的超解析度認知(一)

從本質上對深度學習和超解析度進行梳理

溫故而知新

超解析度

作為處理影象的其中一個問題,和它同一個層次的還有降噪(Denoising),抗模糊(Deblurring),缺失修復(Inpainting)。難度(相對的)也是依次遞增的。傳統觀念上講,他們每一個的處理方式都有各自專門的演算法(包括SR)。比如說,去噪是為了去除影象中的干擾(噪聲),去模糊就是對影象進行銳化,超解析度是將低解析度影象重建為高解析度問題。
對於解析度,會存在一個誤區。影象的解析度是有單位的,一般使用畫素每英寸(DPI)來表徵。從單位來理解這個概念就很容易了。提高解析度根據這個單位來講有兩種方法,一個是增大畫素,一個是減小面積。在電腦上顯示一張圖片時解析度是沒有什麼意義的,因為顯示器的解析度是固定的。但是超解析度就不一樣了,超解析度得到的HR圖片是根本的畫素變多了,也就意味著在列印這張HR圖片的時候,尺寸會變大。可以這麼理解,原來的低解析度影象是用一部600W畫素的照相機拍攝的,高解析度影象是800W畫素拍攝的同一個場景。洗出來的時候大小一樣,但是明顯後者照片的質量更加高,更加清晰,也就間接的做了Deblurring的事情(當然deblurring還有別的更針對性的演算法)。那麼超解析度技術解決的就是把LR影象對映到HR影象。
上面說到了對映,如何做到解決超解析度其實就是如何找出這個對映的關係。
傳統的超解析度技術諸如稀疏編碼,貝葉斯等等,不多贅述。我們要做的是從深度學習的角度來找出這個對映。

深度學習

深度學習是機器學習的一個分支。是一個使用多重的神經網路的非線性變換來對資料進行抽象的演算法(使用神經網路這個詞也是跟人類大腦有著一定的關係)。比如說識別貓狗時,為什麼我覺得這是一隻貓,而不是一隻狗,需要對於影象給出的資訊進行一定的抽象。當然這裡的原理比較複雜,我也不怎麼理解。那我們從巨集觀來理解,就是模仿人的大腦來定義這個對映的結構。然後從大量的資料中來學習這個對映中的引數,最後得到的這個網路結構和引數,就是訓練完成的模型。簡單的說,深度學習就是,定義方法,判斷方法,擇優方法。 learning = looking for a best funcition。 當然內部有很多很多的細節要去學習理解,每一個步驟都可以說是至關重要。不僅僅是模型,包括loss function,normalization等等,都是學問。
為什麼要使用dl呢?深度學習這些年在算力的提升和大資料的崛起之後變得越來越火,他的成本是極低的,我們可以天馬行空的對自己想法進行實現(儘管可能無法做出合理科學的解釋)同時也需要對目標的領域的知識有足夠得了理解。
我比較相信,深度學習所作的逐層抽象能夠解決超解析度問題。

對映

在我的思路當中,學習到LR圖片到HR圖片的對映有兩個方向。
第一個是SR在DL上最常規的思路。通過大量的訓練集來訓練一個非常深,非常複雜的網路,這樣的一個網路就是LR到HR的對映。但是這個對映本質上是什麼呢,從我個人理解,就是從大量的圖片中,學習一個LR到HR的巨集觀對映,這是一個非常普遍的對映。但是存在兩個問題,首先,這個大量的資料集可能要相當的大才能夠涉及到整個世界所有的LR影象。其次,這個對映太普遍了,以至於最後不再具有針對性。因此在處理一些解析度很低的圖片時,效果很差。
第二個是近幾年SR論文中提出來的思路。利用的是內部學習(internal learning),這個根據的是幾年前的一些論文。前兩篇論文筆記中也有提到。影象中內部資料也是至關重要的。甚至說,超過了外部資料。比如ZSSR,取得了相當令人滿意的成績。
這兩者,孰優孰劣,也是需要視情況而定的, 那麼,是不是說,可以存在一種方法,將兩者結合起來呢。這也是我試圖去理解,去解決的問題。

計劃

計劃是尋找一個能夠將ZSSR方法和EDSR模型相結合的方法,或者說,其他的更加複雜的把internal learning 和external learning相結合的方法。

給自己

學而不思則罔,思而不學則殆。沒有知識的空想都是放屁