FlowNet2.0論文筆記

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

  • 訓練數據集的調度對於模型的性能有較大的影響。

PS:光流的數據集都比較小,通常須要幾個數據集一塊兒train,故如何使用這些數據集是相當重要的。網絡

  • 使用中間光流warp圖片,並以此做爲一個監督信號輔助訓練。
  • 用一個子網絡處理小位移。

通過這些改進,FlowNet 2.0只比前做慢了一點,卻下降了50%的測試偏差。dom

 

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是一個新的數據集,不包含在訓練數據中。spa

從實驗結果中能夠得出幾個結論:設計

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

2. Stacking Networksblog

傳統的光流算法都依賴於迭代過程。做者嘗試也使用多個模型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獲得的光流做爲輸入,效果最好嘍!此處再也不贅述。

相關文章
相關標籤/搜索