Flownet 2.0 閱讀筆記

weixin_41874599發表於2018-12-05

原論文標題:FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks
文章是對FlowNet的進一步改進,主要貢獻為如下三個方面:

  • 訓練資料集的排程對於模型的效能有較大的影響。

PS:光流的資料集都比較小,一般需要幾個資料集一起train,故如何使用這些資料集是至關重要的。

  • 使用中間光流warp圖片,並以此作為一個監督訊號輔助訓練。
  • 用一個子網路處理小位移。

經過這些改進,FlowNet 2.0只比前作慢了一點,卻降低了50%的測試誤差。

 

1. 資料集排程

最初的FlowNet使用FlyingChairs資料集訓練,這個資料集只有二維平面上的運動。而FlyingThings3D是Chairs的加強版,包含了真實的3D運動和光照的影響,且object models的差異也較大。

作者作了如下設定:

  • 使用前作中提出的兩種網路結構:FlowNetS和FlowNetC,S代表simple,C代表complex,具體細節可參閱前作。
  • 分別使用Chairs(22k)、Things3D(22k)、兩者混合(從44k中sample出22k)以及用Chairs預訓練再用Things3D finetune這四種資料集排程方案。
  • 學習率排程策略使用Sshort和Slong+Sfine兩種策略,如下圖。

得出的實驗結果如下圖,圖中的數字代表模型在Sintel資料集上的EPE,注意,Sintel是一個新的資料集,不包含在訓練資料中。

從實驗結果中可以得出幾個結論:

  • 訓練集的使用順序很重要。即使Thins3D包含了更復雜的運動,但得出的結果卻不如Chairs。(PS:根據筆者的經驗,如果要在C資料集上測試的話,A和B資料集訓練的模型哪個效果更好是比較玄學的,不是說哪個資料集更復雜,效果就越好。本質上還是取決於A與C和B與C之間的domain shift哪個更小。)最好的策略是現在Charis上預訓練,再用Things3D fientune,這在筆者之前做過的一個Kaggle比賽中證實過,雖然任務不一樣,但兩種資料mixed同時訓練確實效果極差。作者對此作出了猜測,Chairs幫助網路學習到顏色匹配這樣的一般概念,而更復雜的3D和真實光照等資訊不宜過早地強加給網路。這對於其他基於深度學習的任務也有一定的參考價值。
  • FlowNetC比FlowNetS更好。
  • 結果的提升。

2. Stacking Networks

傳統的光流演算法都依賴於迭代過程。作者嘗試也使用多個模型stacking,逐步refine的手法來得到更好的結果。首先,stack兩個模型。

第一個網路使用兩張圖片作為輸入,第二個網路使用兩張圖片以及第一個網路預測出的光流場作為輸入。

此外,作者嘗試了另一種方法,如Figure 2所示,第二個網路除了上述的三個輸入之外,又使用Image 2和Flow進行warp,這樣,第二個網路就可以集中學習warped image和Image 1的差別,這是一種增量學習的思想。注意,作者將warped image和Image 1的誤差圖也顯式地輸入給了第二個網路。實驗結果如Table 2所示。需要說明的是,warp的過程是用雙線性插值,是可微的,故整個網路可以e2e訓練。

從表中可以看出,(1)僅stacking模型而不使用wrap後的圖片在Chairs上有更好的結果,但在Sintel則不然;(2)Stacking with warping總是能提高結果;(3)e2e訓練時,在Net1之後加中間loss是比較好的;(4)產生最好結果的做法是固定Net1,只訓練Net2,當然,要加入warp操作。

出現這樣的結果是符合直覺的,若e2e訓練,引數量成倍增加,很容易overfitting,但分開train,引數量就沒有那麼大,能產生比較好的結果。

下面,作者嘗試堆疊多個不同模型,即FlowNetC和FlowNetS混合使用,綜合考慮速度和效能,CSS最為合理。另外,作者作了一些實驗,嘗試共享stacking前後模型的引數,發現沒什麼提升。

3. Small Displacements

上文中所用到的資料集所包含的運動往往比較快,而真實資料集如UCF101,幀間的運動往往比較小,大多在1px左右。所以,基於Chairs,作者按照UCF101的位移直方圖構建了一個小位移資料集,稱之為ChairsSDHom。

作者用FlowNet2-CSS網路在小位移資料上進一步訓練。具體的,作者在Things3D和ChairsSDHom中分別取樣了一些資料,具體的取樣方法參見文章的補充材料,這裡我就不去看了。經過這一輪訓練,網路對於小位移的效果有了提高,而且並沒有傷害大位移的效果。這個網路命名為FlowNet2-CSS-ft-sd。但是,對於subpixel motion(講道理我不知道這是指什麼,姑且理解為小於1px的運動吧),噪聲仍然是個問題,作者猜測FlowNet的網路結構還是不適應這種運動。所以,作者對FlowNetS做了輕微的修改,第一層的步長2改為1,7*7改成5*5,使得網路能夠更好地捕捉小位移,這個網路結構稱為FlowNet2-SD。

最後,作者又設計了一個小網路來fuse FlowNet2-CSS-ft-sd以及FlowNet2-SD的結果,具體的結構沒有說的太清楚,有需要的話可以去看程式碼。總的來看,結構還是非常複雜的,訓練過程也很有講究,改進的餘地應該挺大的。

4. Experiments

 這部分沒有太多好說的,總之就是各種SOTA了。值得一提的是,作者還用了Motion Segmentation和Action Recognition兩個任務來衡量光流的好壞,前者我瞭解不太多,後者就是用很常見的Two Stream模型,兩個任務都需要光流作為輸入。最後的結論當然是以FlowNet2得到的光流作為輸入,效果最好嘍!此處不再贅述。

相關文章