CVPR 2018 Best Paper Taskonomy 作者解讀

CVPR 2018 Best Paper Taskonomy 作者解讀

1,048 人贊了文章

大家好,我是沈博魁,斯坦福本科生/准博士生,Taskonomy的共同二作。鑒於poster session時發現很多人對Taskonomy的理解有偏差,萬年潛水的我寫了一篇Taskonomy的中文解讀,希望能對大家有幫助。很多專業辭彙的中文翻譯可能有偏差,希望大家見諒。如果有問題,歡迎大家評論私信。

Taskonomy的網站:taskonomy.stanford.edu.

梗概:

https://www.zhihu.com/video/994427188959207424

人類的視覺具備多種多樣的能力,計算機視覺屆基於此定義了許多不同的視覺任務。長遠來看,計算機視覺著眼於解決大多數甚至所有視覺任務,但現有方法大多嘗試將視覺任務逐一擊破。這種方法造成了兩個問題:第一, 逐一擊破需要為每一項任務收集大量數據,隨著任務數量的增多,這將會是不可行的;第二,逐一擊破會帶來不同任務之間的冗餘計算和重複學習。總的來說,逐一擊破的策略忽略了視覺任務之間的關聯性,比如法線 (Surface Normals) 是由深度 (Depth) 求導得來,語義分割 (Semantic Segmentation) 又似乎和遮擋邊緣測試 (Occlusion edge detection) 有著千絲萬縷的關聯。基於上述兩個問題,我們希望能有效測量並利用視覺任務之間的關聯來避免重複學習,從而用更少的數據學習我們感興趣的一組任務

Taskonomy是一項量化不同視覺任務之間關聯、並利用這些關聯來最優化學習策略的研究。如果兩個視覺任務A、B具有關聯性,那麼在任務A中習得的representations理應可為解決任務B提供有效的統計信息 。由此我們通過遷移學習計算了26個不同視覺任務之間的一階以及高階關聯。如圖一,如果有預測法線的網路和預測遮擋邊緣測試的網路,我們可以通過結合兩個網路的representations來快速通過少量數據解決Reshading和點匹配 (Point matching)。基於這些關聯,我們利用BIP (Binary Integer Programming) 求得對於一組我們感興趣的任務,如何去最優分配訓練數據量。 比如,如果想最高效地解決10個問題,利用Taskonomy提供的學習策略可以減少2/3的訓練數據量。

=================================================================

方法:

簡單概括,方法分為兩個大階段,四個小步。第一大階段涉及前三小步,我們要量化不同視覺任務之間的關聯,並將任務關聯表達成一個affinity matrix(關聯矩陣)。第二大階段,也就是最後一步,我們對求得的affinity matrix進行最優化,求得如何最高效地去學習一組任務。這個最高效的策略會由一個指向圖 (directed graph) 來表示,我們稱此指向圖為Taskonomy。詞語上Taskonomy是Task (任務) 和Taxonomy (分類論) 的合併簡稱。

問題定義:

首先,我們來定義我們想要解決的問題。我們想在有限的監督預算 gamma 下最大化我們在一組目標任務 (target tasks) mathcal{T}={t_1,...,t_n} 上的表現。同時,我們有一組起始任務 (source tasks) mathcal{S} ,其定義為我們可從零學習的任務。監督預算 gamma 的定義為多少起始任務我們願意從零開始學習(從零開始學習需要收集大量數據,監督預算表達了我們所面對的金錢、計算力和時間上的限制)。那麼, mathcal{T} setminus mathcal{S} 代表了我們感興趣但不能從零學習的任務,比如一個只能有少量數據的任務。 mathcal{S} setminus mathcal{T} 代表了我們不感興趣但可以從零學習(來幫助我們更好的學習 mathcal{T} )的任務,如jigsaw、colorization等自我監督的視覺任務。 mathcal{T} cap mathcal{S} 代表了我們感興趣也能從零學習的任務,但因為從零學習會消耗監督預算,我們希望從中選擇出符合預算的一組從零學習,餘下的通過少量數據的遷移學習來實現。我們稱 mathcal{V}= mathcal{T} cup mathcal{S} 為我們的任務詞典 (task dictionary)。最後,我們對視覺任務 t 的定義為一個基於圖片的方程 f_t

如下圖所示,我們收集了一個有四百萬張圖片的數據題,每張圖片均有26個不同視覺任務的標註(ground truth)。這26個任務涵蓋了2D的、3D的和語義的任務,構成了本項research的任務詞典。因為這26個任務均有標答, mathcal{S} 也為這26個任務。

下面,我們進入第一大階段,量化視覺任務的關聯。

第一步:從零學習

對於每個起始任務, 我們為其從零開始學習一個神經網路。為了能更好地控制變數從而比較任務關聯,每個任務的神經網路具有相似的encoder decoder結構。所有的encoder都是相同的類ResNet 50結構。因為每個任務的output維度各不相同,decoder的結構對不同的任務各不相同,但都只有幾層,遠小於encoder的大小。(註:CVPR poster session期間有人問起,decoder泛指read out functions,比如classification的FC Layers也算為decoder )

第二步:遷移學習

如上圖所示,對於一個起始任務 sinmathcal{S} 和一個目標任務 tinmathcal{T} ,我們將以 s 的representation作為輸入來學習 t 。我們將freeze任務 s 的encoder 參數,並基於encoder的輸出 (representations) 學習一個淺層神經網路read out function。嚴謹來講,如果我們用 E_s 表示 s 的encoder, f_t 表示 t 的標註, L_t 表示 t 的loss函數, Iin mathcal{D} 來表示圖片和遷移訓練集, D 表示要遷移學習的淺層神經網路,學習目標為:

\ D_{s 
ightarrow t} :=arg min_{	heta} mathbb{E}_{I in mathcal{D}}Big[L_tBig(D_{	heta}ig(E_s(I)ig), f_t(I)Big)Big]

對於所有 st 組合,我們均訓練了一個 D_{s 
ightarrow t} 。如下圖所示,對於 t ,不同的 E_s(I) 會對 D_{s 
ightarrow t} 的表現造成不同的影響。更具關聯的 s 會為 t 提供更有效的統計信息,從而僅用1/60的訓練數據(相較於從零學習)就能取得不錯的結果;相反不具備關聯的 s 則並不能有此表現。因此,我們認為 D_{s 
ightarrow t}t 任務中的表現可以很好地代表了 s 之於 t 的關聯性。

上述遷移代表了任務之間一對一的關聯,我們稱其為一階關聯。如下圖,幾個任務之間可能具有互補性,結合幾個起始任務的representations會對解決目標任務起到幫助。因此,我們也研究了任務之間多對一的關聯,我們稱其問高階關聯。在這種情況下,我們將幾個起始任務的representation結合起來當作目標任務的輸入,其餘細節跟上段類似。

因為高階的任務組合數量太大,我們基於一階表現選擇了一部分的組合進行遷移學習。對於小於五階的高階,我們根據一階的表現,將前五的所有組合作為輸入。對於n>5階,我們選擇結合一階表現前n的起始任務作為輸入。

第三步:Ordinal Normalization

這一步的目標為用一個 affinity matrix 量化任務之間的關聯。雖然從上步習得的遷移網路中我們獲得了許多的loss值 L_{s
ightarrow t} ,但因這些loss值來自於不同的loss 函數,它們的值域有很大差別。如果我們把這些loss值直接放入一個矩陣(上圖左,縱軸為目標任務、橫軸為起始任務),那麼這個矩陣內的值及其不均勻,並不能有效反應任務之間的關聯。同時,簡單的線性規範化也並不能解決問題,因為任務的loss值和表現並不構成線性關係(0.01的 l_2 loss並不代表其表現兩倍好於0.02的loss)。由此,我們採用Ordinal Normalization(基於序數的規範化)來將loss值轉換為關聯度。該方法基於運籌學中的 AHP (Analytic Hierarchy Process)。概括來講,affinity matrix中的第 (i,j) 個值為利用第 i 個起始任務遷移後,其網路有多大的幾率表現好於用第 j 個網路(我們在下文稱其為 i 對於 j 的勝率)。

對於每個目標任務 t ,我們構建pairwise tournament矩陣 W_t ,其縱軸和橫軸均對應所有的起始任務及我們計算過的高階組合。給定一個測試集 D_{test}W_t(i,j) 項為 s_iD_{test} 的所有圖片輸入中有多大的幾率表現好於 s_j (有幾成 I in D_{test} 會使 L_t(D_{s_i 
ightarrow t}(I)) < L_t(D_{s_j 
ightarrow t}(I)) )。在將 W_t 的值clip到 [0.001,0.999] ,計算 W_t = W_t / W_t^TW_t(i,j)w_{i,j} 現在代表著 s_i 表現好於 s_j 幾倍。這樣:

\ w_{i,j} = frac{mathop{mathbb{E}}_{I in mathcal{D_	extit{test}}}[D_{s_i 
ightarrow t}(I) > D_{s_j 
ightarrow t}(I)] }{mathop{mathbb{E}}_{I in mathcal{D_	extit{test}}}[D_{s_i 
ightarrow t}(I) < D_{s_j 
ightarrow t}(I)] }

在把 W_t 規範化成數值和為1的矩陣後,我們將 s_i 相對於 t 的關聯性(抑或可遷移性)定義為 W_t 的第 i 項principal eigenvector。將所有目標任務的 W_t 合併起來,我們獲得最終的affinity matrix P ,見上圖右。

至此第一大階段完結,我們通過上述affinity matrix量化了任務之間的關聯性。

第四步:BIP (Binary Integer Programming) 最優化

最後一步,我們要基於affinity matrix求得如何最有效地學習一組我們感興趣的任務。我們可以這個問題想像成一個subgraph selection的問題:選擇一些任務從零學習,剩下的任務用少量數據進行遷移學習,具體遷移學習的策略由subgraph中的edge來決定(對一條directed edge,起始點代表我們從零學習的一個任務,終點代表要進行遷移的目標任務)。基於此,我們可以通過解如下BIP最優化問題來得到最優解:

 \egin{align*} 	ext{maximize } & c^T x,,\ 	ext{subject to } & Ax preceq b\ 	ext{and } & x in {0, 1}^{|E| + |mathcal{V}|},. end{align*}

這個最優問題有三個限制條件:

  1. 如果我們選擇了一個遷移,那麼遷移的起始任務(可能為高階起始集)和目標任務均要出現在subgraph中;
  2. 每個目標任務有且僅有一個遷移(我們將從零學習在途中定義為從自己到自己的遷移,即一條自己到自己的edge);
  3. 不超過監督預算。

這三個限制條件的具體數學表達如下:

至此,我們通過解最優subgraph selection從而獲得了最有效遷移學習策略,如下圖:

=================================================================

實驗結果:

Taskonomy項目訓練了3000+個神經網路,總耗時~50000小時的GPU。從零學習消耗120k張圖片,遷移學習為16k張圖片。

我認為現有公眾號對Taskonomy翻譯中最不準確的是對Taskonomy實驗部分的評論。如文章一開頭所說,Taskonomy的目標為用有限的監督預算來最有效地解決一組任務,並不是將state of the art提高百分之幾。本文想宣揚的中心思想是計算機視覺屆應注重視覺任務間的關聯性,並讓這些關聯性為我們所用。回到本文的具體用途,Taskonomy的用途有兩個:

  1. Taskonomy作為解決一組任務的方法。
  2. 用Taskonomy的任務詞典解決一個只有少量數據的新任務

以下試驗結果分為兩個部分,分別對應以上兩點。

一:解決一組任務

如何衡量Taskonomy解決一組任務的有效性?我們設定了兩個評判標準。

  1. 遷移獲利 (Gain) : 如果我們不進行遷移學習,我們只能基於少量的數據從零學習。遷移獲利是指遷移學習相較於從零學習的勝率(見Ordinal Normalization部分)。
  2. 遷移質量 (Quality) : 用少量數據遷移學習相較於用大量數據從零學習的勝率。

下圖是Taskonomy的遷移獲利 (左) 和質量 (右) 的圖表。兩圖的縱軸為所有目標任務,橫軸為監督預算,勝率在0-1之間。可見,對於一個26個任務的目標集,在只有一半甚至1/3的監督預算時,Taskonomy 計算出的監督分配會使整體表現遠遠打敗從零學習(遷移獲利),並近似於(勝率超過40%)大量數據完全監督學習(遷移質量)。

二:解決新任務

對於解決新任務,我們可以把我們任務詞典里的目標任務當作一個新任務,模擬只有少量數據的情況。實驗結果如下,我們可以發現Taskonomy的表現超過了現有的行業pretrained features(包括imagenet fc7)。

總結:

在Taskonomy項目里,我們的目標是著眼於一組任務,並利用任務之間的關聯性減少總體數據使用量。為此,我們量化了視覺任務的關聯性,並基於求得的affinity matrix最優化得到如何分配任務監督數據量。實驗表明,視覺任務之間確實存在很強的關聯性,我們能通過更少的數據很好地解決一組任務。現在大家已經可以去Github來使用我們的任務詞典:StanfordVL/taskonomy。


推薦閱讀:

TAG:深度學習DeepLearning | CVPR | 計算機視覺 |