GeoNet
GeoNet是商湯科技在CVPR2018發表的關于
無監督
學習光流和估計深度的一篇論文。
其實作無監督機制的核心在于通過
可微分的warp
操作(詳見Spatial Transform Networks),來直接通過計算
warp(img1)
和
img2
之間的誤差。
GeoNet分為兩個stage,第一個stage計算圖檔整體的位移,在原文中稱之為
Rigid Structure Reconstructor
,這一部分屬于半監督學習。
因為在拍攝照片時相機位姿和内參數都是固定且預設已知的,是以對于估計每張照片拍攝時相機位姿的
PoseNet
而言,是有監督學習的。
由于在這一部分預設圖檔内是隻有整體的位移(因為相機位姿的改變),而沒有單個物體的位移的,是以可以根據 [ R , t ] [R,t] [R,t]使用純幾何學的方法,計算視差,進而對輸出的
DepthMap
進行監督學習。
第二個stage計算圖檔内每個物體的精細位移(motion),在原文中稱之為
Non-Rigid Motion Localizer
。精細化motion的學習采取
殘差(residual)
的方式。最終通過
可微分的warp
操作,實作隻用img1和img2來量化的計算flow的誤差。
GeoNet另外一個核心在于其提出了幾種
尺度歸一化
和
平滑系數(smoothness)
的loss-function。GeoNet一共有5個損失函數:
1. L r w L_{rw} Lrw:整體位移(Rigid)的loss-function。
其中 α \alpha α的預設值為0.85。
對于圖檔裡運動的物體,是違反了整體位移假設的,同時,因為相機抖動、噪聲等因素,也會有一些pixel違反該假設。是以需要引入一種魯棒性的方式來平衡噪聲的影響。本文中使用
結構相似性(SSIM)
損失函數(在SSIM中隻統計圖檔整體均值和方差的差異,而不會精确到pixel)。同時也要和1-範數配合使用來保證細節不丢失。
2. L d s L_{ds} Lds:深度估計的loss-function。
其核心設計在于,為了保留圖像
邊緣
細節(edge-aware),增加
平坦區
部分的loss,而減弱紋理細節細節比較豐富區域的loss。這種方式和導向濾波等濾波方式思想相似。
這裡的梯度指的是圖像内部梯度,即pixel之間的(而不是bp算法裡的梯度)。
3. L f w L_{fw} Lfw和 L f s L_{fs} Lfs:flow的誤差和flow的平滑誤差
這兩個loss原文中沒有給出,代碼看的也有點暈,大緻和前兩個loss對标,一個用到SSIM,一個用到平滑度。
5. L g s L_{gs} Lgs:光流一緻性loss-fuction
用來檢查在fwd和bwd過程中不一緻的點,并定義其為outlier
最後在網絡結構上還有一個小trick,同時輸出s->t和t->的光流(原文中成為
forward
和
backward
),增強魯棒性。