Noise2Noise 不用乾淨圖片也能訓練出圖像去噪器

陳宗彥
Taiwan AI Academy
Published in
6 min readFeb 18, 2020

一般基於神經網路的圖像去噪的方式都是利用一個CNN regression model 來完成。輸入一張有噪點的圖片給神經網路,然後神經網路會給出一張去噪後的圖片。

這種方法取得了不錯的成果,但是有一個最大的問題,這樣的方式需要乾淨無噪點的圖片來訓練,也就是說大量的噪點圖片和相對應的乾淨圖片。然而在需要實際應用的場合,乾淨的圖片通常難以取得(ex:天文觀測照片,醫學MRI影像),而好取得的都是有噪點的圖片。

來自Nvidia,Aalto University和MIT的學者2018年在ICML聯合發表了一篇論文解決了這個問題。作者指出,在某些情況下,神經網路並不需要看過乾淨的圖片就能學到如何將噪點去除。

假設我們現在有一連串的測量到的有noise的數據(y1, y2, y3, …)。一種估計真實值的方法是,先產生一個數字z,利用某個Loss Function計算z和y的偏差,然後找到一個z使得z和y有最小的平均偏差,也就是最小化z和y的Loss Function。

對於不同的損失函數,找到的z也會不太一樣。

假設使用L2損失函數,L(z,y)=(z-y)²,找到的z會是y的期望值。

假設使用L1損失函數,L(z,y)=|z-y|,找到的z會是y的中位數。

在這種情形下,假設我們加入一些隨機的噪音給y,只要這個噪音具有零期望值的特性,在使用L2損失函數時找到的z還是會是一樣的。

作者將相同的概念套用到神經網路,作者發現即使在訓練時對目標圖像加入噪點,只要噪點的特性並不會被損失函數學習到,那麼使用有噪點的圖片和使用沒有噪點的圖片訓練出來的效果其實會是一樣的。

白話一點的說就是選用正確的損失函數讓神經網路沒辦法學習到噪點是如何生成的,所以即使用有噪點的圖片當作神經網路的目標,神經網路因為不會學習到噪點的規律,所以生成的圖片還是會是乾淨的。

作者利用這個概念訓練出了許多不同的神經網路來去除不同的噪聲。訓練的一個關鍵是要利用噪聲的統計學性質來選擇訓練時使用的損失函數。

Additive Gaussian Noise(加性高斯雜訊)

加性高斯雜訊有零期望值,所以作者利用L2 loss function 作為損失函數。順便比較了利用乾淨圖片訓練和利用有噪點圖片來訓練的差別。作者在訓練過程中隨機添加了不同標準差 (σ ∈ [0, 50]) 的噪點。

X軸是迭代次數,Y軸是去噪品質(dB in Kodak Dataset)

可以觀察到使用乾淨的圖片訓練和使用有噪點的圖片訓練,他們在幾乎一樣的迭代次數收斂到了一樣的去噪品質。如果進一步使用不同大小的高斯濾波器去模糊影像,由於低頻噪聲的存在,網路需要更多的迭代次數去收斂,但最後也都收斂於相似的去噪品質。

由左至右分別是高斯噪聲圖片,原始圖片和經過神經網路去噪的圖片,這是只利用噪聲圖片訓練出來的結果

Poisson Noise(泊松雜訊)

泊松雜訊和高斯雜訊一樣有零期望值,但是比起高斯雜訊更難去除,因為其和信號本身相關。一樣使用L2損失函數。訓練時作者一樣隨機變化雜訊的強度(λ ∈ [0, 50]),網路需要自行判斷需要的去噪強度。

由左至右分別是柏松噪聲圖片,原始圖片和經過神經網路去噪的圖片,這是只利用噪聲圖片訓練出來的結果

Multiplicative Bernoulli noise (乘性白努利雜訊)

這個雜訊是對圖片每個像素隨機採樣,每個像素有p的機率被採樣,被採樣的像素點被設為0或1,在訓練過程中 p ∈ [0, 0.95],而在測試過程中p = 0.5。作者在這個case使用的 loss function比較特別。

主要是為了避免對被汙染的pixel做backpropogation。詳細可參考 Ulyanov, Dmitry, Vedaldi, Andrea, and Lempitsky, Victor S. Deep image prior. CoRR, abs/1711.10925, 2017。

由左至右分別是原圖,輸入,作者訓練的模型的輸出和比較用的模型(Deep Image Prior)的輸出

文字去除

同樣的應用也可以被用在圖片上文字的去除,訓練時利用不同的被文字汙染的圖片來做為輸入和訓練目標。被汙染像素的可能性p訓練過程p ∈ [0, 0.5],而測試時p=0.25。

訓練時需要利用L1損失函數來找到圖片像素的中位數,不該使用L2損失函數,因為文字汙染不是零期望值的雜訊。

隨機脈衝雜訊

作者在此用了一個非常有挑戰性的雜訊做為例子。每一個像素有p的機率被採樣,被採樣到的像素的RGB值會從[0,1]之間的均勻分布產生。作者在這個例子使用了一個特別的L0損失函數

其中ϵ=10^-8,而在訓練時γ會從2到0線性下降。訓練時被汙染像素的可能性p ∈ [0, 0.95]

結果與討論

作者在後續還有使用了同樣的概念去應用在使用了蒙地卡羅渲染的圖片和MRI的圖片。都有取得相當不錯的效果。詳細的損失函數的設計可以參考作者文章。

對蒙地卡羅渲染的圖片做去噪
對MRI影像作去噪

作者展示了新的對於圖像去噪神經網路訓練的想法。其最重要的貢獻在於提供了一個不需要清晰圖片也能夠獲得良好去噪結果的可能性。作者也在GitHub上分享了這篇論文的官方程式碼,裡面包含了利用Gaussian Noise和Poisson Noise訓練出來的成果,大家可以自己去玩看看。

Reference:

  1. 作者文章arxiv https://arxiv.org/pdf/1803.04189.pdf
  2. 作者GitHub https://github.com/NVlabs/noise2noise

--

--