[論文導讀]Learning Single Image Defocus Deblurring with Misaligned Training Pairs

Adam He
9 min readNov 9, 2023

--

本篇論文目標為Image Defocus Deblurring,而他們想解決的是因為訓練資料的Misalignment產生的問題。

Introduction

Misaligned image pairs in dataset

首先來定義本篇論文關注的問題,也就是訓練資料的Misalignment。一般來說,做deblur的資料集都是一張清晰圖片對應一張模糊圖片,而如果是real-world的資料集,資料的搜集方法是透過兩台相機根據不同光圈、快門、焦距,同時拍攝來得到我們要的一組清晰與模糊的圖片。

但這樣的搜料搜集方法難免會出現兩張圖片沒辦法完全對齊的情況,如下圖。觀察左圖可以發現兩張圖片放大來看,其實是有一段shift的,而右圖則是兩張圖的不一樣大。

然而,大多數deblurring的訓練方式都是計算deblur image 和 ground-truth之間的pixel-wise的loss,例如:L1 loss,因此用這種沒有對齊的訓練資料就可能導致下圖這種輸出結果,左圖是輸入的blur image,右圖是模型輸出的deblur image,可以發現deblur image的細節出現很多變形。

為了解決這個問題,作者提出了一個joint deblurring and reblurring learning (JDRL) framework,這個framework可以有效地處理這樣的問題,並且還可以應用在現有的deblur模型上。

除此之外作者還提出了一個新的dataset稱為SDD。

Method

JDRL的具體架構如下。主要分成Reblurring module (M_r) 和Deblurring module (M_d),接下來會分別介紹。

M_r: Reblurring module

M_d: Deblurring module

R: Reblurring model

F:Deblurring model

L_r: Reblurring loss

L_d: Deblurring loss

F_flow: Optical flow estimating network

W: Linear deformation operation

Deblurring Module (M_d)

輸入的blur image(IB) 經過deblurring model以後得到一張deblur image。一般的做法會將這張deblur image和ground-truth直接計算loss。但因為前面說的Misalignment問題,如果直接計算pixel-wise loss,其對應的deblur image就容易出現變形。

因此作者在這裡使用了一個Optical flow estimation network (F_flow),去計算deblur image和ground-truth之間的optical flow。再根據這個optical flow去對ground-truth做linear deformation。這個linear deformation就是將這張圖片和deblur image做pixel-wise的對齊。

Calibration mask M

由於optical flow的估計不一定是準確的,因此作者設計了一個calibration mask M來過濾不準確的optical flow。這個M是一個和圖片同大小H x W的map,每一個位置代表的是該pixel各自對應的係數,1代表通過,0代表不通過。過濾的方法如下,下面公式的Phi bar代表的是整張圖optical flow的平均值,作者認為兩張圖其實差異不大,只有細微的misaligned,平均optical flow不會差太多,因此只要估計出來的optical flow不在下面這個範圍,就算是一個異常且錯誤的估計,那麼那一個pixel對應的calibration mask的係數就是0。

最後Deblurring loss可以定義為下面的公式,epsilon設定是0.001。左項是前面說的這些,右項和左項只差在optical flow的流向,兩者是相反的。簡單來說左項是將ground-trouth對齊到deblur image,右項是將deblur image對齊到ground-truth。

Reblurring Module M_r

Reblurring module較為複雜,我們先來看他想要得到的結果。

右邊是我們想要reblur的結果,可以發現整張圖片有清晰也有模糊,前景的白色花是清晰的,背景的綠色葉子是模糊的。作者想做的是生成多張不同模糊程度的圖片,將這些圖片做某種加權以後生成我們要的圖片。

以下圖來看,由左至右圖片是越來越模糊的,最左邊的圖片是最清晰的,而最下方的W代表的是每一張圖片的weighted map。觀察最左方圖片下方的W1,可以發現W1在白色花的pixel權重比較高,而最右方的Wm綠色葉子的部分權重比較高,因此透過這種加權方式就能得到我們要的結果。

Architecture of M_r

Reblurring module的具體架構如下,主要分成kernel prediction network (Rkpn) 和weight prediction network (Rwpn)。接下來會分別介紹這兩個network。

Kernel Prediction Network

這個network想要達成的目的如下:輸入的deblur image會和blur image concate起來一起輸入model,並產生一組features,這組features會轉成kernel seeds,每一個pixel都會有8個kernel seeds,這8個kernel seeds又會轉成8個不同的blur kernels。最後這8個blur kernel會和輸入的deblur image做convolution來生成不同程度的模糊圖片。

Kernel seeds

首先來介紹生成kernel seeds的方法,Rkpn輸出的feature會是一組M x H x W的feature,我們針對每一個pixel都會有一個M維的feature vector。將這組feature vector切割成M個獨立的feature,如下圖。

接著就能拿這M個feature用下圖這種方式來組合8個kernel seeds。舉例來說s2就是f0和f1的組合。

(這裡的u, v代表的是pixel的桌標)

Blur kernel

再來我們要將kernel seeds轉成blur kernel,作法如下公式。

k代表的是blur kernel,p代表的是極座標的純量,theta是角度。

舉例來說,我們想生成kernel seed S3的blur kernel,那結果就如下圖。

Convolution with blur kernel

最後,如下圖,將剛剛取得的8個blur kernel去和輸入的deblur image做convolution。得到我們要的不同程度的模糊圖片。

Weight Prediction Network

這裡有另外一個網路是專門預測每一張blur圖片的每一個pixel的權重。

Reblurring Loss

最後reblurring loss如下。

Total Loss

Experiment

Conclusion

The proposed JDRL framework can be adopted with existing defocus deblurring methods

Experimental results on SDD, DPDD and RealDOF datasets validate the effectiveness of JDRL.

--

--