1. 程式人生 > >[翻譯]FlowNet: Learning Optical Flow with Convolutional Networks

[翻譯]FlowNet: Learning Optical Flow with Convolutional Networks

摘要

卷積神經網路(CNNs)最近在各種計算機視覺任務中非常成功,特別是那些與識別有關的任務。光流量估計並不在CNN能夠成功完成的任務當中。本文提出了一種能夠將光流估計問題作為監督學習任務的CNNs。我們提出並比較兩個架構:一個通用架構和另一個架構,包括一個在不同的影象位置關聯特徵向量的層。由於現有的地ground truth資料集不夠大,不足以訓練CNN,所以我們生成了一個大型的合成Flying Chairs dataset。我們發現,在這種不現實的資料上訓練的網路,仍然可以很好地推廣到現有的資料集,比如Sintel和KITTI,在5到10 fps的幀率上達到了有競爭的精度。

1.介紹

卷積神經網路已成為計算機視覺的許多領域被選擇使用的方法。它們通常適用於分類 [25, 24],但是最近提出的架構也允許對每個畫素的預測,如語義分割[28]或對單個影象的深度估計[10]。在本文中,我們提出端到端的訓練CNNs,學習對一對圖片預測光流場。

雖然光流估計需要精確的定位每個畫素,但它也需要在兩個輸入影象之間找到對應關係。這不僅涉及到學習影象特徵表示,還包括學習如何在兩個影象的不同位置匹配它們。在這方面,光流估計與以前的CNNs應用有本質上的不同。

由於不清楚這個任務是否可以用標準的CNN架構來解決,我們還額外開發了一個具有相關性層的結構,該層顯式提供匹配功能。這種結構是端到端訓練的。我們的想法是利用卷積神經網路的能力,在多個尺度和抽象層次上學習強大的特性,並幫助基於這些特徵找到實際的對應關係。在相關層之上的層學習如何從這些匹配中預測光流。令人驚訝的是,用這種方式幫助網路是不必要的,即使是原始網路也能學會預測光流動。

訓練一個網路來預測一般的光流需要一個足夠大的訓練集。儘管資料增加確實有幫助,但是現有的光流資料集仍然太小,不足以訓練一個與藝術狀態相媲美的網路。對於現實的視訊材料來說,獲得光流場的ground truth是非常困難的。在現實和數量之間平衡,我們生成了一個合成的Flying Chairs dataset,它由來自Flickr的隨機背景影象組成,我們將它們和[1]中分割的圖片疊加在一起。這些資料與現實世界沒有什麼共同之處,但是我們可以用定製的屬性生成任意數量的樣本。在這些資料上進行訓練的CNNs,即使沒有進行微調,也能很好地推廣到現實中的資料集。

利用CNNs高效的GPU實現,我們的方法比大多數競爭對手都要快。我們的網路在Sintel資料集的完整解析度下預測光流高達每秒10個影象對,在實時方法中達到最先進的精確度。

2. 相關工作

光流。自 Horn and Schunck [19]的工作以來,變分方法一直主導著光流估計。許多改進已經被引入[29, 5, 34]。最近的焦點是大規模的位移,組合匹配已經被整合到變分方法中[6,35]。[35] 的工作被稱為Deep-Matching,並且 DeepFlow與我們的工作有關,它通過稀疏的卷積和最大池從細到粗的聚合特性資訊。但是,它不執行任何學習,所有的引數都是手動設定的。繼承工作[30]被稱為EpicFlow,更強調了稀疏匹配的質量,因為[35]中的匹配只是在影象邊界的情況下被插入到密集的光流場中。我們只使用一個變分方法來對卷積網路所預測的流場進行可選的細化,並且不需要任何手工方法來進行聚合、匹配和插值。

幾位作者之前已經將機器學習技術應用於光流。Sun等人 [32]研究光流統計資料,並使用高斯比例混合學習規則; Rosenbaum等人[31]使用高斯混合模型建立光流的區域性統計模型。Black等人[4]計算訓練集光流場的主要組成部分。為了預測光流,他們估計了這些’basis flows’的線性組合的係數。其他方法訓練分類器在不同的慣性估計中選擇 [21] 或獲得遮擋概率[27]。

在使用神經網路模型的視訊幀之間,已經有了關於不受監督的學習差異或運動的研究。這些方法通常使用乘法互動來模擬一對影象之間的關係。然後可以從潛在的變數中推斷出差異和光流。泰勒等人用分解的受限的、受限制的、有限制的、有限制的機器來完成任務。Konda和Memisevic 23使用了一種叫做“同步自動編碼器”的特殊自動編碼器。雖然這些方法在受控的設定中很好地工作,並且學習了在視訊中對活動識別有用的特性,但是它們在現實的視訊中並沒有與經典的方法競爭。

卷積網路。用反向傳播25的卷積神經網路最近被證明在Krizhevsky等人的大規模影象分類中表現良好。這使得在各種計算機視覺任務中應用cnn的工作開始激增。

雖然目前還沒有研究用CNNs進行光學流動的研究,但已經有了與神經網路相匹配的研究。菲捨爾等人12種提取的特徵表示,在受監督或無人監督的情況下接受訓練,並根據歐氏距離來匹配這些特徵。Zbontar和LeCun 36訓練CNN的一個暹羅架構來預測影象的相似度。這些方法與我們的方法有很大的不同,那就是它們是基於補丁的,並且將空間聚合留給後處理,而本文中的網路直接預測了完整的流場。

CNNs最近的應用包括語義劃分11、15、17、28、深度預測10、關鍵點預測17和邊緣檢測13。這些任務類似於光流估計,因為它們涉及到每個畫素的預測。由於我們的體系結構很大程度上受到了這些畫素預測任務最近的進展的啟發,我們簡要地回顧了不同的方法。

最簡單的解決辦法是在“滑動視窗”中應用傳統的CNN,因此為每個輸入影象8、11計算一個單一的預測(例如類標籤)。這種方法在許多情況下都很有效,但也有缺點:高計算成本(即使使用了優化的實現,包括重新使用中間特性圖)和每個補丁的特性,不允許考慮全域性輸出屬性,例如銳邊。另一種簡單的方法是將所有的特性圖都新增到所需的全部解析度,並將它們堆疊在一起,從而形成一個連線的每個畫素特徵向量,可以用來預測感興趣的值。

艾根等人通過訓練一個額外的網路來完善一個粗糙的深度地圖,這個網路可以作為輸入的粗略預測和輸入影象。Longetal。28和Dosovitskiy等人9次迭代地改進粗糙的功能圖,並使用“向上卷積”層。我們的方法融合了兩種作品的思想。與Long等人不同,我們的“卷積”不僅是粗糙的預測,還包括整個粗糙的特徵圖,允許將更多的高階資訊傳輸到精細的預測中。與Dosovitskiy等人不同的是,我們將“up卷積”的結果與網路的“收縮”部分連線起來。


3.網路結構

給出了足夠的標記資料,卷積神經網路被認為非常擅長學習輸入——輸出關係。因此,我們採用一種端到端的學習方法來預測光流:給定一個數據集包含影象對和ground truth flows,我們訓練一個網路來直接從影象中預測x-y光流場。但是,為了達到這個目的,什麼是好的架構呢?


為了使網路訓練在計算上可行,而且更根本的是允許在輸入影象的大範圍內聚合資訊,池化必要的。但是,池的導致解析度降低,所以為了提供密集的畫素預測,我們需要細化粗糙的池化表示。為了達到這個目的,我們的網路包含了一個擴充套件的部分,它可以智慧地細化光流到高解析度。包含收縮和擴充套件部分的網路,通過反向傳播來進行整體訓練。我們使用的架構在圖2和圖3中描述。現在,我們更詳細地描述了網路的兩個部分。


contractive部分。一個簡單的選擇是將兩個輸入影象疊加在一起,並將他們餵給一個相當通用的網路,從而允許網路自行決定如何處理影象對以提取運動資訊。圖2(上圖)說明了這一點。我們稱這個只包含卷積層的架構“FlowNetSimple”。

另一種方法是為這兩個影象建立兩個獨立但相同的處理流,並在稍後的階段將它們組合在一起,如圖2(底部)所示。有了這個體系結構,網路就被限制首先獲取這兩個影象進行有意義的表示,然後在一個更高的層次上將它們組合。這與標準匹配方法類似,當第一次從兩個影象的patches中提取特徵,然後比較這些特徵向量。然而,給定兩個影象的特徵表示,網路如何找到對應的資訊?

為了在這個匹配的過程中幫助網路,我們引入了一個“關聯層”,它在兩個特性圖之間執行乘法patch比較。圖2(下圖)顯示了包含這一層的網路架構“FlowNetCorr”的說明。給定兩個多通道特徵對映f 1,f 2:R^2->R^c,其中w、h和c是它們的寬度、高度和通道數,我們的相關層讓網路比較f 1和f 2的每個patch。

目前,我們只考慮對兩個patch進行比較。在第一張圖中,第一個對映的patch的中心x_1,第二個對映中patch的中心x_2,兩個patch的“相關性”被定義為


對於一個大小為K=2k+1的正方形patch。請注意,Eq.1與神經網路中的卷積的一個步驟是相同的,但它不是用過濾器與資料進行卷積,而是將資料與其他資料進行卷積。由於這個原因,它沒有可訓練的引數。

計算c(x_1,x_2)涉及到c*K^2的乘法。比較所有的patch組合涉及到w^2*h^2這樣的計算,產生一個大的結果,使有效的向前和向後的傳遞變得棘手。因此,出於計算原因,我們限制了比較的最大位移,並在兩個特徵圖中引入了步長。

給定最大位移d,對於每一個位置x1,我們只在大小為D=2d+1的範圍內計算相關性c(x_1,x_2),通過限制x_2的範圍。我們使用步長s_1和s_2,在全域性上量化x_1,並在圍繞著以x_1為中心量化x 2。

從理論上講,這種相關性產生的結果是四維的:對於兩個二維位置的組合,我們得到了一個相關值,即兩個向量的標量積,它們分別包含了剪裁的patches的值。在實踐中,我們組織了通道中的相對位移。這意味著我們獲得了一個大小為(w*h*d^2)輸出。對於反向傳播,我們對每個底部的塊進行了相應的求導。

擴大的部分。擴充套件部分的主要組成部分是“upconvolutional”層,由unpooling(擴充套件特性圖,和pooling相反)和一個卷積組成。這些層以前被使用過 [38, 37, 16, 28, 9]。為了進行改進,我們將“向上卷積”應用到特徵圖中,並將其與來自網路“contractive”部分的相應特徵圖連線起來,並使用一個向上取樣的粗流預測(如果可用的話)。通過這種方式,我們既保留了較粗的特徵圖所傳遞的高階資訊,也保留了底層特徵圖中提供的精細的區域性資訊。每一步都增加到2倍的解析度。我們重複這個4次,結果是一個預測的光流,解析度仍然比輸入小4倍。總體架構如圖3所示。我們發現,與計算成本較低的雙線性向上取樣相比,該解析度的進一步改進並沒有顯著改善結果。

變分優化。在一個替代方案,在最後階段不是雙線性上取樣,我們使用[6]中的變分方法,沒有匹配的術語:我們從4倍的下采樣解析度開始,然後使用粗到細的計劃進行20迭代,並將光流用到整個解析度。最後,我們在完整的影象解析度下運行了5個迭代。我們還用[26]的方法來計算影象邊界,並通過用α = exp(−λb(x,y) κ ),代替平滑係數來計算檢測到的邊界,b(x,y)表示在各自的尺度和畫素之間重新取樣的細邊界強度。這種向上擴充套件的方法比簡單的雙線性向上取樣要複雜得多,但它增加了變分方法的優點,以獲得平滑和畫素精確的光流場。在下面,我們用一個“+v”字尾來表示這個變分改進所得到的結果。圖4中可以看到一個變分改進的例子。

4. 訓練資料

與傳統方法不同的是,神經網路需要具有ground truth的資料,不僅要優化幾個引數,還要從頭開始學習執行任務。一般來說,獲得這樣的ground truth是很難的,因為真實世界場景的真實畫素對應很難被確定。表1給出了可用資料集的概述。


4.1. 現存資料集

Middlebury資料集2只包含[2]個用於訓練的影象對,使用四種不同的技術生成 ground truth光流。位移非常小,通常低於10個畫素。

KITTI資料集 [14]更大(194個訓練影象對),包括大量的位移,但只包含一個非常特殊的運動型別。ground truth是通過一個照相機和一個3D鐳射掃描器來記錄的真實世界場景。這假設場景是剛性的,運動是由一個移動的觀察者產生的。此外,遙遠物體的運動,如天空,不能被捕捉,從而導致稀疏的光流場ground truth。

MPI Sintel[7]資料集從渲染的人工場景中獲得 ground truth,並對現實的影象屬性進行了特別的關注。提供了兩個版本:最終版本包含了運動模糊和大氣效果,比如霧,而乾淨的版本不包括這些效果。Sintel是最大的資料集(每個版本都有1041個訓練影象對),併為小和大的位移大小提供了密集的ground truth。

4.2. Flying Chairs

Sintel的資料集仍然太小,無法訓練大型的CNN。為了提供足夠的訓練資料,我們建立了一個簡單的合成數據集,我們將其命名為“Flying Chairs”,通過將仿射轉換應用到從Flickr收集的影象,以及一組公開的3D椅子模型的渲染圖。我們從Flickr中檢索964張圖片,解析度為1024x768,來自“城市”(321)、“風景”(129)和“山”(514)。我們將影象切割成4個象限,並使用裁剪產生的512x384影象作為背景。我們從[1]中新增多個椅子圖片到背景作為前景目標。從原來的資料集,我們去掉了非常相似的椅子,產生了809個椅子型別和每個椅子62個圖片。示例如圖5所示。


為了產生運動,我們對背景和椅子隨機抽取二維仿射引數。這些椅子的轉換是相對於背景變換的,它可以被解釋為攝像機和物體移動。利用變換引數,生成第二幅影象, ground truth光流和遮擋區域。

對每個影象對,所有引數(數量、型別、大小和椅子的初始位置;轉換引數)都是隨機抽樣的。我們調整這些引數的隨機分佈,使產生的位移直方圖類似於Sintel(細節可以在補充材料中找到)。使用這個過程,我們生成一個數據集,其中包含22,872個影象對和流場(我們多次重用每個背景影象)。請注意,這個大小是任意選擇的,原則上可以更大。

4.3. 資料擴充

一種被廣泛使用的改進神經網路泛化的策略是資料增強[24, 10]。儘管Flying Chairs資料集相當大,但我們發現使用增強是避免過擬合的關鍵。我們在網路訓練期間進行線上進行增強。我們使用的增強包括幾何變換:平移、旋轉和縮放,以及加高斯噪聲和亮度、對比度、伽馬和顏色的變化。為了合理的快速,所有這些操作都是在GPU上處理的。圖5給出了一些增強的例子。

由於我們不僅要增加影象的多樣性,而且要增加流場的多樣性,我們對一對影象應用相同的強幾何變換,但在這兩個影象之間的相對變換也更小。

具體地說,我們從圖片寬度x和y[-20%,20%]範圍內取樣變換;旋轉 [−17 ◦ , 17 ◦ ];縮放從[0.9,2.0]。高斯噪聲的抽樣分佈是0 0.04;對比度是在 [−0.8, 0.4];每張圖片RGB通道顏色從 [0.5, 2];gamma值[0.7, 1.5],更新的亮度變換使用sigma 為0.2的高斯。

5. 實驗

我們報告了我們的網路在Sintel、KITTI和Middlebury資料集的結果,以及我們的合成Flying Chairs資料集。我們還試驗了在Sintel資料上對網路微調,以及對預測流場的變分改進。此外,與其他方法相比,我們報告了我們網路的執行時間。


5.1. 網路和訓練細節

我們所訓練的網路的確切架構如圖2所示。總的來說,我們試圖保持不同網路的架構是一致的:它們有9個卷積層,其中6個步長是2(最簡單的池形式),每一層鬥都有都有一個非線性的ReLU。我們沒有任何全連線層,這使得網路可以將任意大小的影象作為輸入。在更深的網路層方向卷積濾波器的大小會減少:第一層的7x7,下面兩層的5x5,從第4層開始的3x3。在更深層的層中,特徵圖的數量增加,每一個步長為2的層都增加了2倍。對於FlowNetC中的相關層,我們選擇了引數k=0,d=20,s_1=1,s_2=2。作為訓練損失,我們使用了endpoint error (EPE),這是光流估計的標準誤差測量方法。它是預測的光流向量和ground truth之間的歐氏距離,在所有畫素上平均超。

為了訓練CNNs,我們使用了一個修改版的caffe[20]框架。我們選擇Adam [22]作為優化方法,因為對於我們的任務,它顯示的收斂速度快於標準的帶有動量的隨機梯度下降。如[22]推薦的那樣,我們固定Adam的引數: β_1 = 0.9 and β_2 = 0.999。因為,從某種意義上說,每個畫素都是一個訓練樣本,我們使用相當小的小批量的8個影象對。我們從學習速率從 λ = 1e−4開始,然後在第一個300 k之後,每100 k次迭代除以2。使用FlowNetCorr,我們可以觀察到λ = 1e−4梯度爆炸。為了解決這個問題,我們從一個非常低的學習率 λ = 1e−6開始,在10 k次迭代之後慢慢地將它增加到 λ = 1e−4,然後按照剛才描述的時間表進行。

為了在訓練和微調過程中監測過度擬合,我們將 Flying Chairs的資料集分成了22,232個訓練和640個測試樣本,並將Sintel訓練集分成908個訓練和133個驗證對。

我們發現在測試過程中增加輸入影象可以提高效能。儘管最優的規模取決於具體的資料集,但是我們為每個網路所有任務固定了的規模。對於FlowNetS來說,我們並不上取樣,對於FlowNetC我們選擇了1.25的因數。

微調。所使用的資料集在物件型別和它們所包含的運動方面是非常不同的。標準的解決方案是在目標資料集上對網路進行微調。KITTI資料集很小,只有稀疏的流場ground truth。因此,我們選擇在Sintel訓練集上進行微調,我們使用來自Sintel的乾淨和最終版本的影象,並在使用低學習率λ = 1e−6迭代幾千次進行微調。為了獲得最佳效能,在定義了使用驗證集的最佳迭代次數之後,我們將對整個訓練進行微調,以獲得相同數量的迭代。在表格中,我們表示帶有“+ft”字尾的finetuned網路。

5.2. 結果

表2顯示了我們的網路的endpoint error (EPE) 和公共資料集(Sintel、KITTI、Middlebury)的幾個效能良好的方法,以及我們的Flying Chairs據集。另外,我們展示了在Sintel上不同方法的執行時間。

網路在不真實的Flying Chairs,在真實正的光學流資料集上表現得很好,例如打敗了著名的LDOF [6]方法。在Sintel進行微調之後,我們的網路可以Sintel Final和KITTI資料集中優於實時的方法,並且速度是它的兩倍。

Sintel。從表2中可以看出,FlowNetC比FlowNetS在Sintel Clean上好,而在Sintel Final,情況發生了變化。在這個困難的資料集上,FlowNetS+ft+v甚至與DeepFlow持平。由於平均end-point 錯誤通常傾向於過於平滑的解決方案,因此我們的方法的定性結果很有趣。圖6顯示了兩個FlowNets(沒有微調)所預測的原始光流的例子,與ground truth and EpicFlow對比。該圖顯示了網路通常如何產生視覺上吸引人的結果,但在endpoint錯誤方面仍然更差。仔細觀察一下就會發現,其中一個原因可能是網路的非平滑輸出,尤其是在大的光滑的背景區域。我們可以用不同的改進來部分補償。

KITTI。KITTI資料集包含強大的對映轉換,這與網路在訓練Flying Chairs訓練時遇到的非常不同。儘管如此,原始的網路輸出已經相當不錯了,額外的微調和變分的細化會帶來進一步的提升。有趣的是,Sintel的微調改善了KITTI的結果,可能是因為Sintel中影象的動作比在 Flying Chairs上更自然。在這個資料集上,flownetS優於FlowNetC

Flying Chairs。我們的網路是在Flying Chairs上訓練的,因此人們期望在這些椅子上表現最好。在訓練時,我們不考慮由640張圖片組成的測試集。表2顯示了這個測試集中的各種方法的結果,一些示例預測顯示在圖7中。我們可以看到,FlowNetC的表現優於FlowNetS和於有最先進的方法。另一個有趣的發現是,這是唯一的資料集,在這種情況下,變分的細化不會提高效能,但會使事情變得更糟。顯然,網路可以比各種各樣的改進做得更好。這表明,通過更實際的訓練集,網路可能在其他資料上表現得更好。

時間。在表2中,我們顯示每幀在幾秒鐘內不同方法的執行時間。不幸的是,許多方法只在單個CPU上提供執行時,而我們的FlowNet只使用GPU來實現。雖然網路的錯誤率低於先進的水平,但它是實時方法中最好的。對於網路的訓練和測試,我們使用的是NVIDIA GTX Titan GPU。DeepFlow和EpicFlow的CPU時間是從 [30]獲得的,而LDOF的計時是在一個2.66 GHz的核心上計算的。

5.3. 分析

訓練資料。為了檢查我們是否從使用Flying Chairs 資料集而不是Sintel中獲益,我們在Sintel上訓練了一個網路,留出了一個驗證集來控制性能。多虧了積極的資料擴充,即使是Sintel也足以很好地學習光流。在Sintel進行測試時,專門在Sintel上進行訓練的網路其EPE比在Flying Chairs上訓練並對Sintel進行微調的網路要高1個畫素。

Flying Chairs資料集相當大,所以資料擴充仍然是必要的嗎?答案是肯定的:在不增加資料的情況下訓練一個網路,在Sintel測試中會增加大約2個畫素。

比較架構。表2中的結果允許我們對我們測試的兩個架構的優勢和劣勢得出結論。

首先,FlowNetS在Sintel Final優於FlowNetC。另一方面,FlowNetC在Flying chairs and Sintel Clean上表現優於FlowNetS。請注意,Flying chairs不包括運動模糊或霧,就像在Sintel Final中一樣。這些結果共同表明,儘管兩個網路的引數數量幾乎相同,但FlowNetC的引數略高於訓練資料。這並不意味著網路會記住訓練樣本,但它會適應訓練過程中所呈現的資料型別。儘管在我們目前的設定中,這可能被視為一個弱點,如果有更好的培訓資料可用,它將成為一個優勢。

其次,FlowNetC在大位移問題上似乎有更多的問題。這可以從上面討論的KITTI的結果中看到,也可以從Sintel Final的詳細效能分析中看到(表中沒有顯示)。flownetS+ft實現了s40+錯誤(在畫素上以至少40畫素的位移)為43.3 px,而對於FlowNetC+ft來說,這個值是48 px。一種解釋是,這種相關性的最大位移不允許預測非常大的運動。這個範圍可以增加,但是以計算效率為代價。

6. 結論

基於最近在卷積網路架構設計方面的進展,我們已經證明了可以訓練一個網路來直接預測來自兩個輸入影象的光流。有趣的是,訓練資料不一定是現實的。人工Flying Chairs資料集,包括合成剛性物體的仿射運動,足以預測自然場景中的光流,具有較強的準確性。這證明了所提供的網路的泛化能力。在Flying Chairs的測試中,CNNs甚至比DeepFlow和EpicFlow等最先進的方法更有優勢。隨著更加現實的培訓資料的出現,我們將會看到未來的網路是如何運作的。