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

Method

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

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

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

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

Supervised Training

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

其中,θ\theta表示網絡參數。
在傳統監督學習中,使用noisy-clean image pairs (xj,sj)(x^j, s^j)對網絡進行訓練,就可以表示爲
argminθjiL(f(xRF(i)j;θ)=s^ij,sij)\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 (xj,xj)(x^j, x'^j)對網絡進行訓練,其中
xj=sj+nj,xj=sj+njx^j=s^j+n^j, x'^j=s^j+n'^j

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

在N2V訓練中,只有單張噪聲圖像xjx^j,如果只是簡單得提取一個patch作爲輸入,而用其中心像素作爲目標進行訓練,網絡將只會學到恆等映射,即直接把輸入patch的中心值映射到輸出。爲此,文章設計了一種有着特殊感受野的網絡結構——盲點網絡(blind-spot network)。如下圖所示,該網絡的感受野中心是一個盲點。網絡的預測值s^i\hat{s}_i受其鄰域所有輸入像素的影響,除了其自身位置的輸入像素xix_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)的值不依賴於xx),損失函數
L(gθ)=Egθ(x)x2L(g_{\theta})=E\| g_{\theta}(x)-x \|^2

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


L(gθ)=Egθ(x)x2L(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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章