[論文導讀]Blur2Blur: Blur Conversion for Unsupervised Image Deblurring on Unknown Domains

Adam He
11 min readApr 9, 2024

--

CVPR2024, 本篇論文主要探討針對image deblurring的domain gap問題,並提出一種unsupervised的方法來解決這個問題。

Introduction-Task

本篇論文主要探討的task為image deblurring,顧名思義就是透過Deblurring model(去模糊模型),來將模糊的圖片變得清晰。而常見的Deblurring model設計從傳統的CNN, RNN,到比較新的Transformer、Diffusion都有。

Introduction-Problem

最常見的訓練image deblurring model的方法主是supervised training,我們會需要成對的訓練資料,如左下圖,模糊的圖以及它對應的清晰的圖。而這樣的訓練過程不管在哪一種task都會出現domain gap的問題,也就是說當我們訓練模型在training domain,並且inference在unseen domain時,模型的表現就會非常差。可以想像最主要的原因是因為模型沒有學過unseen domain中的知識,所以沒辦法針對沒看過的圖片來去模糊。

而常見的domain gap除了圖片光源、環境等等,針對image deblurring這個task,相機的快門速度、曝光時間等等也都會是domain gap。

Introduction-Goal

本篇論文就在於要解決不同dataset之間的domain gap。因此本篇論文提出了一個unsupervised的方法來解決這個問題。

Related Work

在講正文之前先來介紹image deblurring的dataset。一般情況下,想要取得成對的blur-sharp圖片是非常困難的,會需要特殊的設備來拍攝。所以這裡要來介紹一種方法,可以透過人工合成來取得成對資料。首先透過GOPRO,以240fps來拍攝一部清晰的影像。接著我們sample一段連續的frame出來(這裡取7張)。我們將這7張圖片根據公式合成成一張模糊的圖片,作為這個pair的blur image。而原本sequence內中間的那張清晰圖片就是這個pair對應的sharp image。

下方為我們的合成公式,先講一下這裡的物理意義,一般自然情況下,我們在取得一張模糊圖片是透過相機在一段曝光時間內對畫面光線的捕捉,所以我們可以將公式定為如下:

B為輸出的blur image、H(t)為sequence中第t張sharp image、T為曝光時間、g為camera reponse function。我們將H(t)針對T這段時間做積分,來模擬這段曝光時間的模糊影像捕捉。而我們又可以把左式近似於右式。我們將積分改成離散的sumation。將連續Ns張圖片全部相加取平均就能模擬出blur image。

camera reponse function:簡單來說就是相機把真實世界的亮度轉換為我們電腦儲存的灰階值的一個映射函式。而這裡我們可以省略這項,因為我們輸入的清晰圖片原本就是我們要的灰階值了,所以不需要再額外映射。

經過上面這個方式,我們就能取得成對的sharp-blur資料來訓練deblurring model。然而,你會發現我們用這種synthesized的data來練模型,那模型在真實場景表現是不是也會有前面提到的domain gap?畢竟模型學到的知識都是來自這些假的資料,而不是真實的資料。而本篇論文可以針對這種問題來做處理。

Proposed Method-Pipline

下圖為本篇論文的主要想法,假設我們的deblurring model是透過前面介紹的那種synthesized data來訓練。那麼假設我們輸入一張real-world的blur image,那模型的表現就會非常差。而這篇論文的核心思想是針對輸入的blur image先透過Blur Translation來將圖片上方的這些unkonwn blur轉換成known blur。換句話說,就是把real-world的blur圖片,轉換變成synthesized風格的圖片。有點類似style transfer。把real-world風格轉換成synthesized風格,而且只轉換blur的資訊,不影響原本圖片的content。如此一來我們就能把這個synthesized風格的圖拿去餵給透過synthesized data訓練的deblurring model。而實驗也證明這樣做確實是可以非常顯著的提升performance。

首先來定義本篇方法的一些符號。根據下圖,我們的deblurring model是訓練在known blur dataset。正如前面所說,我們想捕捉到real-world的sharp-blur pairs是非常困難的。因此這裡假設我們的相機只能捕捉這種unpair的資料。因此有一組unknown blur image稱為B,而另外一組unkown sharp image稱為S。我們先經過一個Blur Kernel Transfer來將這個unknown sharp image轉換為known blur image稱為K。

接著來講本篇論文的主要架構。我們今天想要訓練一個Blur Translator來將unknown-blur image轉換成converted image。而我們希望這個converted image可以越像known blur image越好。所以這裡除了要保有原來圖片的content以外,我們還希望圖片的blur可以轉換成已知的blur。因此這裡使用了reconstruction loss以及adversarial loss。

這裡的reconstruction loss使用了pretrained的VGG19 backbone作為feature extractor。並針對輸入和輸出的圖的feature來算reconstruction loss,目的是想要保留content資訊卻又能影響blur資訊。

這裡的adversarial loss,主要是和前面介紹的K來進行計算。這裡會有一個Dsicriminator來辨別誰才是真正的known blur image。而這裡並不是直接拿known blur image來使用,而是使用前面介紹的K。這個K的取得方式:先將右下角的known blur image pair經過一個Blur Kernel Extractor,取得blur資訊以後,將unknown-sharp image轉換成known blur image。

所以總結來說左邊是透過Blur Translator來做Blur to Blur,而右邊是透過Blur kernel Extractor來做Sharp to Blur。再拿兩張經過轉換後的圖片給Discriminator來辨別以此計算adversarial loss。

Blur Kernel Extractor:它也是一個deep learning model。而這裡是拿一個別人pretrained好的模型來使用。這個模型可以用來做這種sharp to blur的操作。主要核心概念是,這篇的作者把sharp-blur視為一種function的映射關係。將sharp image輸入一個function,就能得到它對應的blur image。而這個Blur Kernel Extractor就是希望當我們輸入sharp-blur pair時,我們可以得到這個對應的function。只要我們有了這個function,我們就能將任意一張sharp image輸入這個function來產生相同blur資訊的blur image.

而為什麼會需要上面這個Blur Kernel Extractor呢?為什麼不要直接拿下面的known blur image來訓練Discriminator就好?(如下圖)

如果我們直接拿真正的known blur image來用,很有可能Discriminator會根據圖片的其他資訊來做判斷,例如顏色、圖片中的物體、圖片解析度等等資訊,而不是依據blur pattern來做判斷。因此我們希望這個用來比較的known blur image可以和我們的converted image的content domain可以相同。

Proposed Method-Model architecture

上面介紹的Blur Translator主要是使用了下方這個架構。這個架構主要來自MIMO-UNet(multi-input, multi-output UNet)這篇論文。本篇作者是直接拿這個模型架構來使用,沒有做其他修改,而這個模型架構核心思想就是將輸入的圖片down sample成不同size,然後對應的ground truth也down sample成不同size。所以在做supervised training時會有三組圖片要計算loss。除此之外,在模型中間會有不同scale的資訊交換。詳細模型細節再請看MIMO-UNet那篇論文。

Experiments-Setting

實驗設定的部份如下:

Target dataset:訓練Deblurring model以及Blur Kernel Extractor。

Source dataset: 將訓練資料集切分成兩個subset(0.6:0.4),分別是B和S。B裡面只有blur image,S裡面只有sharp image。如此一來就能模擬前面說的unpair data的情境。接著我們就能拿B和S來訓練Blur Translator。

Experiments Results

下圖為實驗結果。

w/ GoPro代表deblurring model只使用GoPro訓練, w/ Synthetic Data是指deblurring model使用一些傳統影像處理的方式將前面得到的subset S變模糊來產生新的training pair,並以此training pair來訓練。w/ Blur2Blur(GoPro)是指使用本篇論文提出的方法,並且deblurring model pretrained在GoPro上。w/ the source domain*是指直接拿source dataset的training pair來練,所以可以視為upper bound。

Conclusion

•We proposed Blur2Blur for image deblurring to handle unseen blur.

•The key is to learn to convert an unknown blur to a known blur that can be effectively deblurred using a deblurring network specifically trained to handle the known blur.

•Blur2Blur consistently exhibited superior performance, delivering impressive quantitative and qualitative outcomes.

--

--