Test time adaptation方法總結

語言: CN / TW / HK

本站內容均來自興趣收集,如不慎侵害的您的相關權益,請留言告知,我們將盡快刪除.謝謝.

Domain generalization(DG: 域泛化)一直以來都是各大頂會的熱門研究方向。DA假設我們有多個個帶標籤的訓練集(源域),這時候我們想讓模型在另一個數據集上同樣表現很好(目標域),但是在訓練過程中根本不知道目標域是什幺,這個時候如何提升模型泛化性呢?核心在於如何利用多個源域帶來的豐富信息。DG最困難的地方在於test-sample的不可知,訓練時不可用,近期有一系列方法開始嘗試假設test sample以online的形式出現,然後利用其信息增強泛化性,下表總結了test time daptation方法與傳統DA,DG方法的區別

傳統dg方法就是在源域finetune預訓練模型,然後部署時不經過任何調整。DA方法可以根據無標籤的目標域數據在訓練時調整模型,test-time training方法在測試時會有一些無監督損失比如檢測旋轉角度等,然後對每個test sample也會進行旋轉角度的檢測,本文所述的fully test-time adaptation在training 的時候不需要無監督損失,而只需要在test的時候進行adaptation。

NeurIPS 2021 [Spotlight] Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization

以往的DG方法都致力於研究如何利用好手頭的域信息,這篇文章另闢蹊徑。在test的階段,我們在依然會選擇更新模型頭部的linear層。但是這與直接使用test的數據進行訓練不同,主要的差異在於,本文假設在測試時,模型通常部署在某些環境中,並且必須在不斷出現的各種示例上工作良好, 樣本連續到來 是本文場景的主要特徵,在拿到樣本後模型需要立刻給出決策並更新。

本文的方法被稱之為test-time templates adjuster (T3A),接下來我們對其intuition和具體實現思路進行介紹。

首先,我們知道模型的分類是通過樣本特徵 z 和分類層對於 k 類的權重 w^k 進行點積然後softmax得到的,也就是説分類層的權重在這裏作為一個 prototype ,預測是在衡量樣本到每個prototype之間的相似度。

作者維護了 K 個不同的support set,對於每一個到來的樣本 x ,首先根據上式得到初始的預測結果,然後更新support set

初始化的support set就是源域訓練的分類器對每個類的權重 \mathbb{S}_0^k=\{\frac{w^k}{||w^k||}\} 。然後我們可以根據更新的support set完成預測

這裏新的prototype c^k=\frac{1}{\mathbb{S}^k}\sum_{z\in\mathbb{S}^k}z 。但是這裏還有一個問題,就是一旦模型初始時分配了錯誤的標籤,那幺這個噪音會一直存在,因此作者使用了預測的熵來排除不可信的pseudo-labeled data,熵的定義如下

也就是説在使用上述公式進行預測之前,作者首先會對support set進行過濾

這裏 \alpha^k 是 \mathbb{S}_t^k 中第 M 大的熵值, M 是一個超參。

T3A有如下幾個良好的性質:

    1. T3A隱式降低預測熵:預測熵一定程度上表徵了DG的難度;看不見的區域的熵往往大於可見區域的熵。使用T3A大大降低了模型在unseen dataset上的預測熵。
    1. 計算效率高:唯一的計算開銷是最後一個線性層的前向傳播的成本,與特徵提取器的前向和後向傳播相比,這通常可以忽略不計。
    1. 性能提升明顯,如上圖c所示,在各個數據集上都取得了明顯的提升,而而且和傳統的一些算法正交。

CVPR 2021 Adaptive Methods for Real-World Domain Generalization

本文的intuition在於,ERM本身是學一個在多個source domain D\sim\mathcal{E} 上表現很好的分類器 f_* ,即

f_*=\arg\min_{f\in\mathcal{F}}\mathbb{E}_{D\sim\mathcal{E}}\mathbb{E}_{x,y\sim D}[l(f(x),y)] \\

問題在於,在源域上表現好並不意味着在目標域上效果好,即本文所説的 “adaptivity gap”,如下圖所示目標域上的最優分類器和源域訓練出來的分類器差距是很大的。因此本文的目標是分類器既要依賴輸入x,也要依賴域D,即 f=F(\cdot,D) ,進而確保對於任何的測試集 D_T ,我們學到的分類器 f_T=F(\cdot,D_T) 和target domain的分類器 \bar{f}_T 不要太遠

具體實現分為如下幾步

    1. Computing domain embeddings ,這一步我們需要對每個domain計算一個嵌入,具體來説,我們每個domain給少量幾個data sample,然後訓練一個神經網絡 \Phi_D:\mathcal{X}\rightarrow \mathbb{R}^d 我們有 \mu(D_i)=\frac{1}{n_d}\sum_{x\in D}\Phi_D(x;\theta)\\ 這樣我們就可以計算每個data屬於某domain的概率

對 x\in D_x ,整個過程的訓練目標為

    1. ERM using augmented inputs . 在第一步對每個domain,我們能夠得到一個embedding,本文的另一個特殊點在於,網絡的輸入並不只是x,而是 (x,\mu(D_x)) ,具體而言, x 首先通過一個encode得到feature z , 然後特徵和域特徵concatenate起來 , CONCAT(z,u) 一起作為分類器的輸入,這裏的訓練目標就是簡單的交叉熵損失。
    1. Inference. 測試的時候同樣的需要先得到domain embedding和image embedding,將二者結合起來一起輸入分類器得到最終結果。

文章在傳統的DG benchmark和更大的真實數據集上都進行了實驗,與傳統ERM相結合就能夠取得不錯的結果。

ICLR 2021 [Spotlight] Tent: Fully Test-Time Adaptation by Entropy Minimization

本文並不僅僅關注DG問題,所提出的方法可以general到任意場景。本文的setting在測試過程中,模型必須在給定參數和目標數據的情況下進行適應。這種測試時間適應設置不能依賴於源數據或監督信息,因為當模型第一次遇到新的測試數據是在它可以被收集和註釋之前,而如果每次遇到新的test data都和源域數據合併重新訓練的話需要的成本太高了。

本文最主要的intuition是 最小化模型預測的entropy ,具體實現如下所示。

測試時的訓練目標即

這裏的 \hat{y}=f_\theta(x) 是預測出的標籤, H(\cdot) 是預測結果的entropy。但是更新模型參數 \theta 會有如下問題,因為 \theta 是源域訓練結果的參數,直接alter這個參數會導致模型發散,而且 \theta 的維度太高了,這就導致了整個優化過程過於敏感並且不高效。

為了穩定性和效率,本文只更新線性(尺度和位移)和低維(通道)的參數,即如下的歸一化和轉化參數,

實現上只需重新定義源模型的歸一化層。在測試過程中更新所有層和通道的歸一化統計數據和仿射參數

實驗在CIFAR-10-C, CIFAR-100-C ,ImageNet-C的各種有Corruption的數據集上都表現得非常好。

ICCV 2021 Test-Agnostic Long-Tailed Recognition y Test-Time Aggregating Diverse Experts with Self-Supervision

這篇文章的主題並不是DG,而是長尾分佈。這項工作研究了一個更實際的任務設置,稱為測試不可知性長尾識別,其中 訓練類分佈是長尾的,而測試類分佈是未知的 ,可以任意傾斜。除了類不平衡的問題之外,這個任務還帶來了另一個挑戰:在訓練樣本和測試樣本之間的類分佈轉移是未知的。為了處理這個任務,本文提出了一種新的方法,稱為測試時間聚合多樣化專家Test-time Aggregating Diverse Experts,顧名思義,也是用到了test-time adaptation的技術,因此我們對它的方法做一個簡單介紹。

本文的主要出發點如下所示(a)現有的長尾識別方法旨在訓練在類分佈均勻的測試數據上表現良好的模型。然而,產生的模型可能無法處理任意傾斜的實際測試類分佈。(b)我們的方法試圖學習一個多專家模型,不同的專家熟練地處理不同的類分佈。通過在測試時合理地聚集這些專家,我們的方法能夠處理任何未知的測試類分佈。

Test-time Self-supervised Aggregation。

我們主要對其test-time adapt的部分進行介紹並假設以及通過訓練得到了多個專家模型 v_1,v_2,v_3 ,其中每個專家擅長處理不同的類。本文的關鍵見解是,強大的專家應該更穩定地預測來自他們技能階層的樣本,即使這些樣本受到了干擾。為了驗證這一點,我們通過比較樣本的兩個增強視圖的預測之間的餘弦相似度來估計專家的預測穩定性。

Prediction stability maximization 本文設計了一種新的自我監督方法,即預測穩定性最大化,通過最大化未標記測試樣本的模型預測穩定性來學習專家(帶有凍結參數)的聚集權值。如上圖所示,該方法由以下三個主要組件組成。

    1. Data view generation: 像moco v2一樣生成數據增強樣本
    1. Learnable aggregation weight: 給定一組可學習的權重 w=[w_1,w_2,w_3];w_1+w_2+w_3=1 ,我們根據對每個expert的結果的加權組合得到最終結果 \hat{y}=\sigma(w_1v_1+w_2v_2+w_3v_3)
    1. Objective function:對每個測試樣本我們最大化他的預測穩定性,從而更新加權權重。

所提出的方法總體稱為TADE,在多個數據集上都取得了不錯的效果

Conclusion

測試分佈相對於訓練分佈的偏移不管是在哪個領域都是很常見的事情,傳統的DG任務假設測試數據不可見因此一定不能使用,但是近期很多的方法開始嘗試利用 online 的test sample,目前這類方法相比於傳統方法還比較少,有較多的改進空間。

最後,歡迎大家關注github,聚合了OOD,causality,robustness,optimization以及一些前沿研究方向的一些閲讀筆記