[論文導讀]Back to the Source: Diffusion-Driven Adaptation to Test-Time Corruption

Adam He
7 min readMay 15, 2024

--

CVPR2023,本篇論文主要探討如何用diffusion來做test-time adaptation

Introduciton

Task

本篇論文的task主要是針對image classification,我們希望分類器訓練在高品質、乾淨的資料上(下圖中間)。但又能再低品質、破壞的資料(下圖的blur、noise、elastic等等)上進行分類。往往分類模型對於沒有看過的這些破壞資料沒辦法很好的進行分類,因此許多針對這種議題的研究被提出,而這樣的研究議題也稱作test-time adaptation。顧名思義就是在測試時(test-time),可以去對模型做某種調整(adaptation)來讓模型可以在這些訓練時沒看過的資料表現變好。

Two main idea of test-time adaptation

首先我們先定義模型的訓練資料叫做source domain(高品質、乾淨的圖)。而模型的測試資料叫做target domain(低品質、破壞的圖)。在這種test-time adaptation的議題中,主要有兩種研究方向。

  1. Updating model to target domain

針對模型進行某種fine-tune來讓模型可以fit到target domain。優點:針對任何的target domain都能很好的fine-tune。缺點:計算資源高、表現容易被target domain的資料量影響。

  1. Adapting input data to source domain

針對輸入的資料進行某種轉換,把這些資料通通轉到source domain。缺點:現有的方法往往需要成對的source/target資料來學習如何轉換。除此之外,一次只能針對一種domain進行轉換,沒辦法一次解決多種domain的轉換問題。

This paper

本篇論文提出了第一個diffusion-driven adaptation method(DDA)。透過訓練一個diffusion model在source domain上,那麼測試時就能直接拿這個diffusion model將輸入的target domain(低品質、破壞)的資料轉成source domain(高品質、乾淨)。

Proposed method

以下是本篇論文提出的diffusion-driven adaptation method(DDA)。
首先我們會先用source domain的資料訓練一個diffusion model,這個diffusion model就是原始、沒有condition的那個版本。

我們的目標是根據這個diffusion model將target domain(低品質、破壞)的資料轉成source domain(高品質、乾淨)。

根據下圖,首先我們將輸入資料根據diffusion model的forward process加入一些高斯雜訊(綠色箭頭)。接著我們根據backward process一步一步的去除這些雜訊(橘色箭頭denoise)。而這個去除的過程中會有一個guidance的操作來引導每一次denoise的的結果(藍色箭頭),目的是希望這個diffusion model產生的圖片的content可以跟輸入的資料一樣。舉例來說,輸入的是一張金色的鳥,那希望輸出也一樣是金色的鳥。而具體怎麼進行guidance,會在後面進行介紹。

最後,透過上面這一系列forward process, guidance, backward process,我們就能產生輸入的圖片的乾淨的版本。最後我們將這張圖片喂給預訓練在source domain的分類器進行分類。(後面那個ensemble只是將原圖和新圖都進行分類,再將分類結果進行加權而已)

以下是怎麼pipeline的細節。首先定義我們輸入的圖片為reference image x0、我們希望產生的圖片為generated image x0^g、N為diffusion model的加躁的次數。Phi D為一個low-pass filter、xN為x0經過forward process後的加了雜訊的圖。

我們仿照原始diffusion model的方式進行denoise,而pseudo code的第七行就是原始的ddpm的denoise公式。接著我們希望這個denoise的結果可以被引導至跟x0相似,也就是說我們希望reference image的content可以跟generated image相同。因此第8行這裡我們使用當前的xt去預測出x0,並標為x0 head(這裡的公式是直接將ddpm裡的forward process的公式進行移項)。接著我們將這個x0 head和x0都經過low-pass filter去取得low-level、structural的資訊。最後我們根據這個structural的差異來對xt-1 head進行微調。這個微調方法就是直接計算這個structural的差異的gradient,並根據這個gradient進行調整,最後就得到一個經過guidance的xt-1。

重複這個過程N次最後就能得到一張source domain的圖片,且這個圖片保有和target domain相同的content。

Experimental results

實驗結果證明此方法比以往的方法都還要好

Ablation Study

作者有針對diffusion的訓練過程進行ablation study。

首先是forward+reverse,意思是沒有使用reference image來對每一次denoise的過程做guidance。reverse+guidance,意思是直接從一張random noise去denoise,並且加上作者設計的guidance方法。DDA則是前面介紹的,先加上N次noise,在denoise N次,過程中加上reference image的guidance。最終結果顯示DDA是最佳的。

下圖為ablation study的視覺化結果,可以發現如果沒有guidance的話,產出的圖片的content會和原來的圖片差異非常大。

Conclusion

•We propose DDA as the first diffusion-based method for test-time adaptation to corruption and include a novel self-ensembling scheme to choose how much to adapt.

•We experiment on the ImageNet-C benchmark to show that DDA improves over existing test-time adaptation methods across corruptions, models, and data regimes.

--

--