一、該論文主要工作
- 設計了一個深度卷積神經網絡來捕獲degradation image的特點
- 該卷積神經網絡以一種新奇的方法結合了傳統基於優化的方案和神經網絡結構
- 引入可分離的卷積結構
- 該卷積神經網絡分爲兩個模塊,這兩個模塊都使用監督方式來訓練
二、Degradation image的形成
Degradation image就包括圖像模糊、圖像壓縮等等一系列的操作
|
(1) |
其中 是非線性壓縮算子 k是已知的卷積核
三、分析
我們的目標是訓練網絡結構,可以通過最小化下面的式子(代價函數)得到:
(2) |
我們最近使用了兩個深度神經網絡來求解這個問題,但是失敗了。一個是SSDAE,另一個是CNN,這兩個神經網絡都被設計用來去燥。對於SSDAE,我們使用的圖像塊大小爲 ,CNN使用了[16]的作者提供的代碼實現。我們收集了數百萬幅清晰的圖像塊和它們對應的模糊圖像。
3.1 求解pseudo inverse
反捲積任務本質上可以近似的使用卷積操作來表示,我們考慮下面的線性模糊模型:
|
(3) |
空間域的卷積操作可以轉換爲頻域的乘法操作:
|
(4) |
表示離散傅里葉變換, 代表元素方式的乘法操作,在傅里葉域,x可以通過下面的式子求得:
|
(5) |
表示傅里葉逆變換,求x可以被寫成使用與y卷積,當產生噪音的時候,我們加入正則項來避免除零操作,這也讓pseudo inverse在頻域下降的非常快,經典的Wiener反捲積就等於使用Tikhonov正則項,Wiener反捲積可以被表示爲:
|
(6) |
SNR表示信噪比,表示pseudo inverse kernel。強噪音會導致很大的 ,這個忽悠很強的regularized inversion。
總之,與足夠大的卷積核卷積可以近似的來表示反捲積操作。SSDA和CNN失敗的原因如下:
- SSDA使用全連接不能很好的捕獲卷積的本質
- CNN性能更好,因爲反捲積操作可以使用圖像與大卷積核卷積來近似表示
- 先前的CNN使用了小卷積核,然而它在我們的反捲積任務裏面並不是一種很好的配置
四、網絡結構
直接將CNN裏面的小卷積核替換成更大的卷積核會導致訓練困難,因此本文提出了自己設計的卷積核,並使用核分離(矩陣分解)操作來簡化訓練問題。
4.1 核分離
核分離就是矩陣分解,可以使用SVD算法來實現,原始的pseudo deconvolution可以被表示爲如下:
|
(7) |
上式表示,2D卷積操作可以看做單獨的1D卷積操作的加權和。我們使用和分別表示U和V的第j列,表示第j個奇異值
4.2 圖像反捲積CNN(DCNN)
我們基於上面的理論來描述我們的卷積神經網絡,該網絡可以表示爲:
|
(8) |
其中 是第層到層的映射(也就是的卷積核,卷積後得到層),代表偏差向量,表示非線性函數(也就是激活函數)。它可以是sigmoid函數或者是tanh(雙曲線正切)函數。
本網絡包含兩個隱藏層,介紹如下:
- 第一個隱藏層 :由38個大小爲的一維核組成,38和121都是由經驗得到的。
- 第二個隱藏層:由38個大小爲的一維核組成,通道數爲38,分別對應着層的38個輸出
爲了得到最後的結果,本文應用了一個 的模糊核,類似於使用奇異值的線性結合。也就是說,最後一層是使用大小的模糊核,一共38個通道,分別對應着上一層的38個輸出。
4.3 完整的網絡結構
完整的網絡結構分爲兩個子網絡,第一個子網絡是反捲積CNN網絡,第二個子網絡是去燥CNN神經網絡。第一個子網絡的輸出作爲第二個子網絡的輸入,中間沒有非線性激活函數。
數據集是從Flickr下載的2500幅清晰圖像,然後隨機從這些圖像中採樣出了兩百萬幅圖像塊。然後自己去模糊它們,最後生成的圖像用來給我們的網絡進行訓練。
在訓練過程中,這兩個子網絡是單獨訓練的。
網絡結構如圖:
圖 1 完整的卷積神經網絡 |
可以看到上面一共有6層,分爲兩個子網絡,分別是Deconvolution Sub-network(反捲積神經網絡)和Outlier Rejection Sub-network(去燥神經網絡),下面分別介紹這兩個子網絡:
第一個子網絡 |
|
第一層卷積操作 |
輸入大小的圖像,然後將該圖像與一維核卷積之後得到的feature map大小爲,因爲一共有38個卷積核,所以有38個feature map |
第二層卷積操作 |
輸入大小的圖像,因爲上面的輸出,所以一共有38個通道,即輸入的圖像爲,因此該層設計的卷積核爲(分別代表卷積核的大小爲,卷積核的通道數爲38,因此代表一個卷積),卷積核的數量跟上面一樣,一共有38個,最後輸出的圖像爲 |
(單獨訓練第一個子網絡時會有這層卷積) |
爲了給第一個子網絡進行監督訓練,在單獨訓練該子網絡時會有一個卷積核,輸出一副 的圖像,然後就可以與清晰圖像進行MSE代價函數優化。 |
第二個子網絡,將上一個子網絡的第二層卷積輸出作爲該子網絡的輸入 |
|
第一層卷積操作 |
輸入的圖像爲 ,512個大小爲 的卷積核,最後輸出的圖像爲 |
第二層卷積操作 |
輸入的圖像爲 ,512個大小爲 的卷積核,最後輸出的圖像爲 |
第三層卷積操作 |
輸入的圖像爲 ,1個大小爲 的卷積核,最後輸出的圖像爲,該圖像就是我們恢復的圖像 |
訓練集:包含了所有帶噪音的degradation image,這裏面就包括saturation, compression artifacts等。
按照上面表格所講,第二個子網絡的輸入是 ,也就是第一個子網絡的第二層卷積的輸出,但是在單獨訓練第一個子網絡的時候,第一個子網絡會加上一層卷積,卷積核爲,單獨訓練第二個子網絡時沒有這一層卷積操作。
Appendix 1 矩陣分解——SVD
對於矩陣x,總能找到一個正交矩陣U和一個正交矩陣V,以及一個對角矩陣 ,使得
|
式子成立,其中,U被稱爲左奇異向量,V被稱爲右奇異向量,而對角矩陣 的主對角線上的值稱爲矩陣X的奇異值,並按照從大到小降序排列。
Appendix 2 VGG網絡
表格 1 各種VGG網絡結構
ConvNet configuration |
|||||
A |
A-LRN |
B |
C |
D |
E |
11 weight layers |
11 weight layers |
13 weight layers |
16 weight layers |
16 weight layers |
19 weight layers |
input( RGB image) |
|||||
con3-64 |
con3-64 |
con3-64 |
con3-64 |
con3-64 |
con3-64 |
|
LRN |
con3-64 |
con3-64 |
con3-64 |
con3-64 |
max-pool |
|||||
con3-128 |
con3-128 |
con3-128 |
con3-128 |
con3-128 |
con3-128 |
|
|
con3-128 |
con3-128 |
con3-128 |
con3-128 |
max-pool |
|||||
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
con3-256 |
|
|
|
con1-256 |
con3-256 |
con3-256 |
|
|
|
|
|
con3-256 |
max-pool |
|||||
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
|
|
|
con1-512 |
con3-512 |
con3-512 |
|
|
|
|
|
con3-512 |
max-pool |
|||||
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
con3-512 |
|
|
|
con1-512 |
con3-512 |
con3-512 |
|
|
|
|
|
con3-512 |
max-pool |
|||||
FC-4096 |
|||||
FC-4096 |
|||||
FC-1000 |
|||||
soft-max |
解釋:VGG網絡全部是由的卷積核組成的,兩層 的卷積核的感受野就跟一層卷積核的感受野一樣大,三層相當於一層 。
A、B、C、D、E:不同的VGG網絡
con3-512:代表卷積核爲大小,一共512個卷積核
max-pool:代表池化層
FC-4096:一共4096個節點的全連接層
soft-max:多分類都有該函數,輸出每一種分類的概率