論文筆記:Learning Denoising from Single Noisy Images

Introduction

上次看過文章Noise2Noise(簡稱爲N2N吧),其使用noisy-noisy image pairs對網絡進行訓練,可以達到使用noisy-clean image pairs的效果。但在N2N中,使用的noisy-noisy image pairs要求有相同的圖像內容帶有不同的噪聲,即 ( s + n , s + n ) (s+n, s+n') ,其中 s s 是圖像信號, n n n n' 是相互獨立的噪聲。也就是說我們對同一場景要獲得兩張以上的噪聲圖像才能進行訓練。那能不能只有一張噪聲圖像就可以訓練網絡進行去噪吶?最近看到網上出了好幾篇文章都是對這個問題進行討論的。我看到了三篇分別是《Noise2Void - Learning Denoising from Single Noisy Images》、《SELF-SUPERVISED DEEP IMAGE DENOISING》、《Noise2Self: Blind Denoising by Self-Supervision》,文章鏈接放在最後了。我只通讀了第一篇,後兩篇只大體瀏覽了一下,雖然方法不同,但內容和效果也有相似之處。下面重點介紹一下第一篇Noise2Void(簡稱N2V)。

Method

對於一張帶噪聲的圖像 x = s + n x=s+n ,作者做了兩個假設:
(1) 信號 s s 是像素相關的。
p ( s i s j ) p ( s i ) p(s_i|s_j) \neq p(s_i)

這個不難理解,圖像信號的像素不是相互獨立的,這也是爲什麼我們能用各種濾波器對圖像進行平滑濾波去噪的原因。
(2) 噪聲 n n 在給定信號 s s 的條件下是像素無關的。
p ( n s ) = i p ( n i s i ) p(n|s)=\prod_i p(n_i|s_i)

也就是說各個像素之間的噪聲是獨立同分布的。
除此之外,作者還做了和N2N相同的一個假設,即噪聲的均值爲0,
E [ n i ] = 0 , E [ x i ] = s i E[n_i]=0, E[x_i]=s_i

也就是說如果能對同一個信號獲取多張有不同噪聲的圖像,對它們取平均可以接近真實的信號值。

Supervised Training

一般我們用來做去噪的網絡都是CNN,進一步說是全卷積網絡(FCN)。對於一個FCN來說,網絡輸出的每一個像素的預測值 s ^ i \hat{s}_i 都有一個確定的感受野 x R F ( i ) x_{RF(i)} 。也就是說輸入圖像的一個範圍內的像素都會對輸出預測值有形象。
在這裏插入圖片描述
基於這個想法,可以把去噪網絡看做一個函數 f f ,其輸入是一個patch x R F ( i ) x_{RF(i)} ,輸出是一個位於位置 i i 的像素 s ^ i \hat{s}_i
f ( x R F ( i ) ; θ ) = s ^ i f(x_{RF(i)};\theta)=\hat{s}_i

其中, θ \theta 表示網絡參數。
在傳統監督學習中,使用noisy-clean image pairs ( x j , s j ) (x^j, s^j) 對網絡進行訓練,就可以表示爲
arg min θ j i L ( f ( x R F ( i ) j ; θ ) = s ^ i j , s i j ) \arg\min_{\theta} \sum_j\sum_i L(f(x^j_{RF(i)};\theta)=\hat{s}^j_i,s^j_i)

在N2N中,使用noisy-noisy image pairs ( x j , x j ) (x^j, x'^j) 對網絡進行訓練,其中
x j = s j + n j , x j = s j + n j x^j=s^j+n^j, x'^j=s^j+n'^j

噪聲部分都來自於同一個噪聲分佈的獨立採樣。雖然網絡學習得是從一張噪聲圖像到另一張噪聲圖像的映射,但訓練仍然能夠收斂到正確的解。這個現象的關鍵在於噪聲圖像的期望值等於乾淨的圖像。

在N2V訓練中,只有單張噪聲圖像 x j x^j ,如果只是簡單得提取一個patch作爲輸入,而用其中心像素作爲目標進行訓練,網絡將只會學到恆等映射,即直接把輸入patch的中心值映射到輸出。爲此,文章設計了一種有着特殊感受野的網絡結構——盲點網絡(blind-spot network)。如下圖所示,該網絡的感受野中心是一個盲點。網絡的預測值 s ^ i \hat{s}_i 受其鄰域所有輸入像素的影響,除了其自身位置的輸入像素 x i x_i
在這裏插入圖片描述
該網絡的優點在於其不會學到恆等映射。因爲我們假設了噪聲在像素間是不相關的,所以只利用鄰域信息是不能恢復噪聲的,而只能恢復圖像信息。也因此網絡不能產生比期望值更好的估計結果。
當然,文章也提到了,由於該網絡在預測時並沒有使用所有可用信息,所以其結果精確度可能比起正常網絡會有略微的下降。
文章也提出在實際使用中,爲了網絡的有效性,並不直接使用該網絡,而是使用一種等價策略:在每個輸入patch中,隨機選擇一個鄰域值替代中心像素。如下圖所示。
在這裏插入圖片描述
在具體應用中,文章仿照CARE的設置,使用U-net結構,並在每個激活層之前加入batch normlization。

Experiment Results

文章與現有的方法做了對比,結果如下圖。可以看出,雖然結果略遜於傳統N2C(Noise2Clean),N2N方法,但比起BM3D還有有一定優勢。
在這裏插入圖片描述

Errors and Limitations

文章在一開始便做出了一些先驗假設,不滿足這些假設的情況當然會出現錯誤。
如下圖所示,在第一行中,孤立的白點與其鄰域像素相比是獨立的,所以不能用其鄰域像素正確地預測。也就是說信號要有可預測性。同樣,在第二行中,許多紋理細節也因不能正確地預測而丟失了。
在這裏插入圖片描述
除此之外,如下圖所示,N2V不能區分信號和結構性噪聲,這違反了噪聲是像素獨立的假設。
在這裏插入圖片描述

Something More

整體來說,N2V提出了一種新的思路,使用單張噪聲圖像來訓練去噪網絡。其關鍵在於建立盲點網絡,避免網絡變成恆等映射。同樣地思路也出現在《SELF-SUPERVISED DEEP IMAGE DENOISING》文章中,只不過其用了另一種方式來實現盲點網絡。除此之外,《SELF-SUPERVISED DEEP IMAGE DENOISING》還利用最大後驗概率的方法將被去掉的像素給利用起來,增加輸入信息,從而提高結果質量。
在《Noise2Self: Blind Denoising by Self-Supervision》中,文章主要證明了在一定條件下( g θ ( x ) g_{\theta}(x) 的值不依賴於 x x ),損失函數
L ( g θ ) = E g θ ( x ) x 2 L(g_{\theta})=E\| g_{\theta}(x)-x \|^2

是可以取得除恆等映射外的最優解的。且對於傳統的去噪函數 f θ f_{\theta} 可以變爲 g θ g_{\theta} ,使得損失函數
L ( f θ ) = E f θ ( x ) y 2 L(f_{\theta})=E\| f_{\theta}(x)-y \|^2


L ( g θ ) = E g θ ( x ) x 2 L(g_{\theta})=E\| g_{\theta}(x)-x \|^2

在相同參數 θ \theta 下取得最優解。

這三篇論文基於相同的假設,即噪聲在像素間是獨立同分布的,且主要都是基於鄰域像素去預測當前像素值。我沒有仔細地閱讀文章(主要是很多地方還看不懂……),理解地可能有偏差,具體內容請參考原文。

參考文獻:

  1. Noise2Void - Learning Denoising from Single Noisy Images [arxiv]
  2. SELF-SUPERVISED DEEP IMAGE DENOISING [arxiv]
  3. Noise2Self: Blind Denoising by Self-Supervision [arxiv] [github]