《GA-Net: Guided Aggregation Net for End-to-end Stereo Matching》筆記

GA-Net

《GA-Net: Guided Aggregation Net for End-to-end Stereo Matching》
CVPR2019的一篇雙目匹配論文,借鑑了一些傳統方法SGM和濾波的思想,提出了兩個網絡層。
論文:https://arxiv.org/pdf/1904.06587v1.pd
代碼:https://github.com/feihuzhang/GANet

一、摘要

在雙目匹配任務裏,傳統方法和深度學習方法裏代價聚合都非常重要,可以獲得更準確的視差。提出了兩個新的網絡層分別來獲取局部和全局的代價依賴關係;
SGA(半全局聚合層):SGM算法的可微近似,提高遮擋區域、大的無紋理區域和反光區域(玻璃等);
LGA(局部指導聚合層):借鑑傳統方法裏的代價濾波策略,處理薄結構和物體邊緣,彌補下采樣和上採樣的細節損失;
一個GA層相當於3D卷積層1/100的計算量,速度15-20fps,可以直接把這兩層來替換常用的3D卷積,參數會少很多;
設計了一引導聚合網絡GA-Net;
Scene Flow和KITTI上達到最佳效果。

二、相關工作

1.局部代價聚合:

匹配代價C是由每個像素在每個候選視差值d的地方計算來的代價,形狀是 HWDmaxH * W * D_{max} , 可以按照 DD 來劃分成 DmaxD_{max} 個切片。局部代價過濾的方法比較高效,對每一個像素p=(x,y)p=(x,y)在視差爲d時候的代價爲相同切片裏周圍像素的加權平均。

公式:

CA(p,d)=qNpω(p,q).C(q,d) C^A(p,d)=\sum_{q\in{N_p}}\omega(p,q).C(q,d)

C(q,d)C(q,d):位置 pp 處候選視差爲 dd 時候的代價值;
CA(p,d)C^A(p,d) :局部聚合之後的代價。
有很多圖像濾波方法都可以用到生成指導過濾的權重 ω\omega,局部聚合方法很快,可以達到實時。

2.半全局匹配:

半全局聚合方法,匹配代價和平滑性約束都被包含在一個能量函數 E(D)E(D) 裏, 問題是如何找到一個視差圖 DD^*可以讓 E(D)E(D) 最小。

E(D)=p{Cp(Dp)+qNpP1.δ(DpDq=1)+qNpP2.δ(DpDq>1)}E(D)=\sum_p \{C_p(D_p) + \sum_{q \in N_p}P_1.\delta(|D_p-D_q|=1)+\sum_{q \in N_p}P_2.\delta(|D_p-D_q|>1)\}

其中:
1)pCp(Dp)\sum_p C_p(D_p) 是所有像素位置p的代價和;
2)P1P1 是對像素 pp 的所有鄰域像素 qq的常數懲罰,如果它們在視差圖上有小的不連續(視差相差爲1);
3)P2P2 是較大的懲罰,針對鄰域視差和pp 點視差相差大的時候(>1).

SGM從16個方向進行1維代價聚合,當方向爲 rr 且候選視差爲 dd時的代價 CrA(p,d)C_r^A(p,d)聚合整合1維路徑上的代價,定義爲:

CrA(p,d)=C(p,d)+min{CrA(pr,d),CrA(pr,d1)+P1CrA(pr,d+1)+P1miniCrA(pr,i)+P2 C^A_r(p,d)=C(p,d)+min \begin{cases} C^A_r(p-r,d),\\ C^A_r(p-r,d-1)+P_1, \\ C^A_r(p-r,d+1)+P_1,\\ min_i{C^A_r(p-r,i)}+P_2,\\ \end{cases}
其中:
1)C(p,d)C(p,d) 是當前位置p在視差爲d時候的代價;
2)CrA(pr,d)CrA(pr,d1)CrA(pr,d+1)C^A_r(p-r,d)、C^A_r(p-r,d-1)、C^A_r(p-r,d+1)是在當前方向 rr =上視差爲dd1d+1d、d-1、d+1 時的代價;
3)miniCrA(pr,i)min_i{C^A_r(p-r,i)} 是當前路徑任意視差時的最小代價;
4)P1P2P1、P2是懲罰值。

三、Guided Aggregation Net

PSMNET,GCNET這些目前最好雙目匹配網絡都是通過疊加雙目圖像特徵構造4D的匹配代價(HWDmaxF)(H*W*D_{max}*F),其中FF 是特徵的大小,下一步就是代價聚合,最後是視差估計。GA-Net用的是SGA和LGA。

3.1 SGA

傳統的SGM算法從各個方向迭代聚合匹配代價,是不可微的難以端到端訓練神經網絡。

3.1.1 直接用SGM會出現一些問題?

1)很多需要用戶設置的參數(如P1,P2P_1,P_2 )不能直接設置,會導致神經網絡訓練不穩定。
2)SGM的代價聚合和懲罰針對所有像素區域是固定的,沒有根據環境變化自適應。
3)直接選擇最小代價會導致視差估計時正面出現一些平行表面,屬於hard操作。

3.1.2 針對以上問題修改後的SGM?

CrA(p,d)=C(p,d)+sum{w1(p,q).CrA(pr,d),w2(p,q).CrA(pr,d1),w3(p,q).CrA(pr,d+1),w4(p,r).maxiCrA(pr,i). C^A_r(p,d)=C(p,d)+sum \begin{cases} w_1(p,q).C^A_r(p-r,d),\\ w_2(p,q).C^A_r(p-r,d-1),\\ w_3(p,q).C^A_r(p-r,d+1),\\ w_4(p,r).{max}_{i}C^A_r(p-r,i). \end{cases}
1)用戶定義參數變爲可學習參數,修改成了懲罰係數,可以更適應位置變化。
2)把外層的選擇最小值改成了求和(沒有損失精度),最大池化換成了步長卷積。
3)把內層的選擇最小值改成了求最大值,因爲現在的學習目標是最大化正確深度的概率而不是最小化代價。

3.1.3 防止代價越來越大繼續修改SGM?

CrA(p,d)C_r^A(p,d) 在一條路徑上會變的很大,SGM處理方法是減去一個值,這裏把各項權重歸一化處理:

公式如下:

CrA(p,d)=sum{w0(p,r).C(p,d),w1(p,q).CrA(pr,d),w2(p,q).CrA(pr,d1),w3(p,q).CrA(pr,d+1),w4(p,r).maxiCrA(pr,i). C^A_r(p,d)=sum \begin{cases} w_0(p,r).C(p,d),\\ w_1(p,q).C^A_r(p-r,d),\\ w_2(p,q).C^A_r(p-r,d-1),\\ w_3(p,q).C^A_r(p-r,d+1),\\ w_4(p,r).{max}_{i}C^A_r(p-r,i). \end{cases}

s.t.i=0,1,2,3,4wi(p,r)=1 s.t. \sum_{i=0,1,2,3,4}w_i(p,r)=1
這裏是4個方向而不是SGM的16個方向,w0,w1,w2,w3,w4w_0,w_1,w_2,w_3,w_4 對所有視差切片共享;

3.4.4 如何選擇聚合值?

最後的聚合值CA(p)C^A(p) 是選擇的四個方向最大的:

CA(p,d)=maxrCrA(p,d) C^A(p,d)=max_rC_r^A(p,d)
最大值保留了最佳信息,保證聚合值不被其他方向模糊。

3.2 LGA

雙目匹配裏廣泛使用的上採樣和下采樣會讓薄結構和邊界模糊,LGA通過學習幾個指導濾波器來細化匹配代價,恢復薄結構信息。

3.2.1 代價過濾器定義爲:

CA(p,d)=sum{qNpω0(p,q).C(q,d),qNpω1(p,q).C(q,d1),qNpω2(p,q).C(q,d+1). C^A(p,d)=sum \begin{cases} \sum_{q \in N_p}\omega_0(p,q).C(q,d),\\ \sum_{q \in N_p}\omega_1(p,q).C(q,d-1),\\ \sum_{q \in N_p}\omega_2(p,q).C(q,d+1). \end{cases}

s.t.qNpω0(p,q)+ω1(p,q)+ω2(p,1)=1 s.t. \sum_{q \in N_p}\omega_0(p,q)+\omega1(p,q)+\omega_2(p,1)=1

3.2.2 和傳統過濾方法的區別?

匹配代價的不同切片(一共DmaxD_{max}個切片)共享權重,但是傳統代價過濾算法只用一個KKK*K的過濾核來過濾鄰域的代價,LGA是用3個KKK*K的過濾器(ω0,ω1,ω2\omega_0,\omega_1,\omega_2)過濾像素pp在視差d,d1,d+1d,d-1,d+1時候的代價。用 KK3K*K*3 的矩陣在 KKK*K 區域聚合,針對的是每一個像素位置p的局部區域。

四、高效實現

匹配代價形狀HWDFH*W*D*F,F是特徵大小,引導子網的輸出是HWKF(K=5)H*W*K*F(K=5),四個方向在一個切片d上共享聚合參數。
LGA權重矩陣HW3K2F(K=5)H*W*3K^2*F(K=5)。SGA和LGA都可以並行進行計算。爲了增加LGA的感受野用相同參數矩陣計算兩次。

五、網絡結構

在這裏插入圖片描述
在這裏插入圖片描述

5.1 網絡四個部分

特徵抽取模塊:左右圖共享權值抽取特徵,堆疊的沙漏結構(PSM用的也是)最後輸出4D代價;
代價聚合模塊:幾個SGA和LGA層;
引導子網:幾個2D卷積層,輸出reshape爲SGA和LGA權重的形狀;
視差迴歸:用softmax層和迴歸層;

5.2 和PSMNET、GCNET等的區別?

主要是代價聚合的地方不是純堆疊3D卷積,用引導子網生成權重來做SGA和LGA。

六、Loss函數

用smooth L1,相比L2在視差不連續處更魯棒,對離羣點和噪聲不敏感。

6.1 損失公式:

L(d^,d)=1Nn=1Nl(d^d) L(\hat{d}, d)=\frac{1}{N} \sum_{n=1}^{N} l(|\hat{d}-d|)
l(x)=.{x0.5,x>=1x2/2,x<1 l(x)=. \begin{cases} x-0.5,x>=1 \\ x^2/2, x<1 \end{cases}
d^d|\hat d - d| :預測視差和真值的絕對值誤差;
N:有效像素總數,根據真值看是否有效。

6.2 怎麼做視差估計:

d^=d=0Dmaxdσ(CA(d)) \hat d = \sum_{d=0}^{D_{max}} d* \sigma(-C^A(d))
σ\sigma是softmax操作,對代價聚合後的代價softmax找到每個視差d的概率,然後對所有候選視差加權求和作爲某位置最終視差。這樣做比直接分類更魯棒。

七、實驗

Adam(β1=0.9,β2=0.999\beta1=0.9, \beta2=0.999)、batch_size=16(8個GPU),random crop(240 * 576),maxidsparity=192;
對所有圖像通道減均值除標準差;
ScenceFlow數據集訓練10個epochs,學習率0.001;
KITTI數據集在ScenceFlow預訓練模型上繼續訓練640個epochs,前300個學習率0.001,後300個學習率0.0001。

7.1 GA層的實驗

  • 針對SGA層和LGA層數目和有無實驗
    在這裏插入圖片描述

結論:3個SGA和1個LGA層在ScenceFlow和KITTI都達到最佳,ScenceFlow的逐點誤差EPE爲0.84,預測結果相差一個像素的爲9.9%,KITTI相差一個像素的爲2.71%。

  • GA層對精度的影響
    在這裏插入圖片描述

結論: GA層對EPE平均提升0.5-1.0像素

  • 代價聚合方法對比
    在這裏插入圖片描述
    實驗固定特徵抽取部分,
    GA-Net-2:2個GA層+3個3D卷積的GA-Net超過了GCNET;
    GA-Net-7:3個GA層+7個3D卷積的GA-Net超過了PSMNET;
    結論:GA-Net參數少,精度高,幾層3D卷積就可以達到很高的精度。

  • softmax後的不同視差值的概率分佈
    在這裏插入圖片描述
    結論:
    帶SGA和LGA的模型針對大的無紋理區域、反射區域、目標邊界三種困難情況效果都更;

區域 問題 GA層效果
無紋理區域 沒有有分辨性的特徵,所以噪聲多 SGA 用周圍信息抑制噪聲,LGA更關注真值處的峯值,可以細化結果
反射區域 亮度,光滑表面影響,出現一些錯誤匹配 修正錯誤視差匹配,更關注真值處的峯值
目標邊界 容易被周圍背景影響導致邊界模糊 選擇最大的空間聚合結果,有效的去除來自背景的錯誤匹配信息

7.2 GA層和3D卷積對比

7.2.1 SGA相比SGM的改變?

SGA是SGM近似可微表示;
1)無需用戶定義參數(P1,P2),端到端學習參數;
2)聚合方式由權重矩陣控制,引導子網學習幾何和上下文信息來控制聚合的方向、範圍和強度;

7.2.2 SGA在無紋理區域爲什麼比SGM更好?

SGA在大無紋理區域中避免了大多數的正面平行近似。
原因可能是:
1)不選最大或最小值,而用加權求和(更soft);
2)迴歸損失比分類損失魯棒;
9)有助於達到亞像素精度。

7.2.3 SGA和3D卷積比?

SGA更高效。
3D卷積是所有局部位置共享卷積核,必須要很多層纔有好結果;
SGA一層就可以聚合半全局的信息,並且聚合方向、範圍、強度都根據位置變化(不同幾何和上下文信息)得到不同權重。

比如:SGA在遮擋和大的光滑處處理方式不同,而3D卷積在全圖都進行相同處理。

  • 最好的模型和經典模型對比

在這裏插入圖片描述

八. 推導

在這裏插入圖片描述
在這裏插入圖片描述

九、總結

提出了SGA和LGA層,可以替換常用的3D卷積代價聚合方式,更高效更快速。
雖然SGM也被引入到深度學習裏,LGA的過濾方法也很多,估計很多人想過弄個類似的(global+local)方法,但是作者把他弄出來了,並且做了實驗證實確實不錯,挺不錯的工作,算是比較靠譜的文章。
論文涉及到了SGM、SGM-NET和濾波相關內容可以簡單看看也。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章