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的地方計算來的代價,形狀是 , 可以按照 來劃分成 個切片。局部代價過濾的方法比較高效,對每一個像素在視差爲d時候的代價爲相同切片裏周圍像素的加權平均。
公式:
:位置 處候選視差爲 時候的代價值;
:局部聚合之後的代價。
有很多圖像濾波方法都可以用到生成指導過濾的權重 ,局部聚合方法很快,可以達到實時。
2.半全局匹配:
半全局聚合方法,匹配代價和平滑性約束都被包含在一個能量函數 裏, 問題是如何找到一個視差圖 可以讓 最小。
其中:
1) 是所有像素位置p的代價和;
2) 是對像素 的所有鄰域像素 的常數懲罰,如果它們在視差圖上有小的不連續(視差相差爲1);
3) 是較大的懲罰,針對鄰域視差和 點視差相差大的時候(>1).
SGM從16個方向進行1維代價聚合,當方向爲 且候選視差爲 時的代價 聚合整合1維路徑上的代價,定義爲:
其中:
1) 是當前位置p在視差爲d時候的代價;
2)是在當前方向 =上視差爲 時的代價;
3) 是當前路徑任意視差時的最小代價;
4)是懲罰值。
三、Guided Aggregation Net
PSMNET,GCNET這些目前最好雙目匹配網絡都是通過疊加雙目圖像特徵構造4D的匹配代價,其中 是特徵的大小,下一步就是代價聚合,最後是視差估計。GA-Net用的是SGA和LGA。
3.1 SGA
傳統的SGM算法從各個方向迭代聚合匹配代價,是不可微的難以端到端訓練神經網絡。
3.1.1 直接用SGM會出現一些問題?
1)很多需要用戶設置的參數(如 )不能直接設置,會導致神經網絡訓練不穩定。
2)SGM的代價聚合和懲罰針對所有像素區域是固定的,沒有根據環境變化自適應。
3)直接選擇最小代價會導致視差估計時正面出現一些平行表面,屬於hard操作。
3.1.2 針對以上問題修改後的SGM?
1)用戶定義參數變爲可學習參數,修改成了懲罰係數,可以更適應位置變化。
2)把外層的選擇最小值改成了求和(沒有損失精度),最大池化換成了步長卷積。
3)把內層的選擇最小值改成了求最大值,因爲現在的學習目標是最大化正確深度的概率而不是最小化代價。
3.1.3 防止代價越來越大繼續修改SGM?
在一條路徑上會變的很大,SGM處理方法是減去一個值,這裏把各項權重歸一化處理:
公式如下:
這裏是4個方向而不是SGM的16個方向, 對所有視差切片共享;
3.4.4 如何選擇聚合值?
最後的聚合值 是選擇的四個方向最大的:
最大值保留了最佳信息,保證聚合值不被其他方向模糊。
3.2 LGA
雙目匹配裏廣泛使用的上採樣和下采樣會讓薄結構和邊界模糊,LGA通過學習幾個指導濾波器來細化匹配代價,恢復薄結構信息。
3.2.1 代價過濾器定義爲:
3.2.2 和傳統過濾方法的區別?
匹配代價的不同切片(一共個切片)共享權重,但是傳統代價過濾算法只用一個的過濾核來過濾鄰域的代價,LGA是用3個的過濾器()過濾像素在視差時候的代價。用 的矩陣在 區域聚合,針對的是每一個像素位置p的局部區域。
四、高效實現
匹配代價形狀,F是特徵大小,引導子網的輸出是,四個方向在一個切片d上共享聚合參數。
LGA權重矩陣。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 損失公式:
:預測視差和真值的絕對值誤差;
N:有效像素總數,根據真值看是否有效。
6.2 怎麼做視差估計:
是softmax操作,對代價聚合後的代價softmax找到每個視差d的概率,然後對所有候選視差加權求和作爲某位置最終視差。這樣做比直接分類更魯棒。
七、實驗
Adam()、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和濾波相關內容可以簡單看看也。