作者:嫩芽33
出處:http://www.cnblogs.com/nenya33/p/7122701.html
版權(quán):本文版權(quán)歸作者和博客園共有
轉(zhuǎn)載:歡迎轉(zhuǎn)載幻妓,但未經(jīng)作者同意,必須保留此段聲明;必須在文章中給出原文連接优俘;否則必究法律責(zé)任
學(xué)習(xí)了一篇用CNN做光流的paper: FlowNet: Learning Optical Flow with Convolutional Networks,簡(jiǎn)稱FlowNet。
1. 論文題目 ?FlowNet: Learning Optical Flow with Convolutional Networks
2.背景
為什么想到用CNN做光流:最近提出的CNN架構(gòu)可以做逐像素預(yù)測(cè),比如碑诉,語(yǔ)義分割和從單圖估計(jì)深度。所以本文提出end-to-end訓(xùn)練CNNs用于從圖像對(duì)中預(yù)測(cè)光流場(chǎng)侥锦。
光流和其他任務(wù)的區(qū)別:光流估計(jì)需要精確的逐像素定位进栽,也需要找到兩個(gè)輸入圖像的對(duì)應(yīng)。這不僅涉及到學(xué)習(xí)圖像特征表達(dá)恭垦,也要學(xué)習(xí)在兩個(gè)圖像的不同位置匹配這些特征表達(dá)快毛。所以從這方面來(lái)看,光流估計(jì)和CNNs的以前應(yīng)用基本上不一樣番挺。
3. 本文提出構(gòu)建CNNs唠帝,以有監(jiān)督的學(xué)習(xí)方式解決光流估計(jì)任務(wù)。提出兩種架構(gòu)玄柏,并做了對(duì)比實(shí)驗(yàn):
一種是通用的架構(gòu)
另外一種是包含一個(gè)不同圖像位置的特征向量關(guān)聯(lián)層襟衰。因?yàn)椴淮_定用標(biāo)準(zhǔn)的CNN架構(gòu)能否解決這個(gè)問(wèn)題,就提出了一個(gè)有關(guān)聯(lián)層的架構(gòu)禁荸,用來(lái)顯式地提供匹配功能右蒲。這個(gè)架構(gòu)采用end-to-end訓(xùn)練阀湿。思想是利用卷積網(wǎng)絡(luò)學(xué)習(xí)多級(jí)尺度和抽象化的強(qiáng)大特征的能力赶熟,然后幫助他基于這些特征找到實(shí)際的對(duì)應(yīng)。關(guān)聯(lián)層上面學(xué)習(xí)如何從這些匹配中來(lái)預(yù)測(cè)流陷嘴。令人驚訝的是映砖,用這種方式幫助網(wǎng)絡(luò)并不是 必要的,甚至是原始的網(wǎng)絡(luò)都能學(xué)會(huì)以具有競(jìng)爭(zhēng)力的準(zhǔn)確性來(lái)預(yù)測(cè)光流灾挨。
4. 已有光流數(shù)據(jù)集太小邑退,很多沒(méi)有標(biāo)注真實(shí)值,本文創(chuàng)建了一個(gè)新的光流數(shù)據(jù)集Flying Chairs劳澄,用來(lái)充分訓(xùn)練CNN地技。
5. 網(wǎng)絡(luò)架構(gòu)
給定足夠的有標(biāo)簽數(shù)據(jù),CNN 擅長(zhǎng)學(xué)習(xí)輸入-輸出關(guān)系秒拔。所以我們采用end-to-end的學(xué)習(xí)方法預(yù)測(cè)光流:給定一個(gè)包含圖像對(duì)真實(shí)流的數(shù)據(jù)集莫矗,我們訓(xùn)練一個(gè)網(wǎng)絡(luò)直接從圖像中預(yù)測(cè)x-y流場(chǎng)。但是需要設(shè)計(jì)合適的架構(gòu)來(lái)實(shí)現(xiàn)這個(gè)目的。
一個(gè)簡(jiǎn)單的選擇是把輸入圖像堆疊起來(lái)作谚,把他們通過(guò)一個(gè)相當(dāng)普通網(wǎng)絡(luò)三娩,讓網(wǎng)絡(luò)自己決定怎樣處理圖像對(duì)從而抽取出運(yùn)動(dòng)信息,如圖2(top)所示妹懒,這個(gè)只有卷積組成的架構(gòu)稱為“FlowNetSimple”
原則上雀监,如果這個(gè)網(wǎng)絡(luò)足夠大,就能學(xué)習(xí)預(yù)測(cè)光流眨唬,然而会前,我們無(wú)法保證像SGD那樣的局部梯度優(yōu)化能讓網(wǎng)絡(luò)達(dá)到全局最優(yōu)點(diǎn),因此单绑,手工設(shè)計(jì)一個(gè)不那么通用回官、但能用給定數(shù)據(jù)和優(yōu)化技巧得到好的性能的架構(gòu)是有好處的。
一個(gè)直接的想法就是:針對(duì)兩個(gè)圖像搂橙,創(chuàng)建兩個(gè)獨(dú)立但相同的處理流歉提,然后在后續(xù)進(jìn)程中把他們結(jié)合到一起,如圖2(bottom)区转。在這個(gè)架構(gòu)中苔巨,網(wǎng)絡(luò)需要要先分別產(chǎn)生兩個(gè)圖像的有意義的表達(dá),然后在更高級(jí)別把他們結(jié)合废离,這類似于標(biāo)準(zhǔn)的匹配方法中一個(gè)先從兩個(gè)圖像的patches抽取特征侄泽,然后結(jié)合這些特征向量。然而蜻韭,得到兩個(gè)圖像的特征表達(dá)后悼尾,網(wǎng)絡(luò)怎么找二者的對(duì)應(yīng)呢?
在匹配進(jìn)程,我們?cè)诰W(wǎng)絡(luò)中引入了一個(gè)“correlation layer”(關(guān)聯(lián)層)肖方,在兩個(gè)特征圖中做乘法patch比較闺魏,包含這個(gè)層的網(wǎng)絡(luò)結(jié)構(gòu)在圖2(bottom)中。給定兩個(gè)多通道的特征圖f1俯画、f2析桥,w、h和c是他們的寬度艰垂、高度和通道數(shù)泡仗,我們的關(guān)聯(lián)層就是讓網(wǎng)絡(luò)比較f1中的每個(gè)patch和f2中的每個(gè)patch。
現(xiàn)在我們只考慮兩個(gè)patch的單獨(dú)比較猜憎。第一個(gè)圖的以x1為中心的patch和第二個(gè)圖的以x2位中心的patch之間的關(guān)聯(lián)就定義為:
方形patch的尺寸為K=2k+1 ?(k=0)娩怎。公式1等同于神經(jīng)網(wǎng)絡(luò)中的一個(gè)卷積,但不是用濾波器卷積數(shù)據(jù)胰柑,而是用數(shù)據(jù)卷積數(shù)據(jù)截亦,所以辣辫,沒(méi)有可訓(xùn)練的權(quán)重。
計(jì)算c(x1,x2)涉及到cKK次乘法魁巩,比較所有的patch組合涉及到wwhh次計(jì)算急灭,所以很難處理前向后向過(guò)程。為了計(jì)算谷遂,我們限制最大位移d用于比較葬馋,而且在兩個(gè)特征圖中也引入了步長(zhǎng)stride。這樣通過(guò)限制x2的范圍肾扰,只在D=2d+1 (d=20)的鄰域中計(jì)算關(guān)聯(lián)c(x1,x2)畴嘶。我們用步長(zhǎng)s1(1)和s2(2),來(lái)全局quantize x1集晚,在以x1為中心的鄰域內(nèi)quantize x2窗悯。
理論上,關(guān)聯(lián)的結(jié)果是4D的:對(duì)兩個(gè)2D位置的每個(gè)組合偷拔,我們得到一個(gè)關(guān)聯(lián)值蒋院,即兩個(gè)分別包含截取patches值的向量的內(nèi)積。實(shí)際上莲绰,我們把相對(duì)位置用通道表示欺旧,這就意味著我們得到了w*h*D*D大小的輸出。在反向過(guò)程中蛤签,我們求關(guān)于每個(gè)對(duì)應(yīng)底層blob的導(dǎo)數(shù)辞友。
6. Refinement
Pooling會(huì)導(dǎo)致分辨率減少,為了提供密集的像素預(yù)測(cè)震肮,我們需要一種方法來(lái)refine ?pool后的coarse表達(dá)称龙。我們r(jià)efine的方法如圖3所示戳晌,主要的是upconvolutional上卷積層鲫尊,由unpooling(與pooling相反,擴(kuò)展特征圖)和卷積組成躬厌。為了做refinement马昨,我們?cè)谔卣鲌D上用上卷積竞帽,然后把它和網(wǎng)絡(luò)的收縮部分’contractive’ 得到的對(duì)應(yīng)特征圖扛施、以及一個(gè)上采樣的coarses流預(yù)測(cè)連接起來(lái)。這樣就能既保留coarser特征圖的高層信息屹篓,又能保留低層特征圖的好的局部信息疙渣。每個(gè)步驟兩次增加分辨率,我們重復(fù)這個(gè)過(guò)程4次堆巧,得到預(yù)測(cè)的流妄荔,此時(shí)的特征圖還是原圖的四分之一泼菌。
我們發(fā)現(xiàn),與對(duì)全圖像分辨率做計(jì)算量更少的雙線性上采樣相比啦租,從這個(gè)分辨率上做更多的refinement并不能顯著提升結(jié)果哗伯,這個(gè)雙線性上采樣的結(jié)果就是網(wǎng)絡(luò)的最終流預(yù)測(cè)。
我們替換雙線性上采樣篷角,采用沒(méi)有匹配項(xiàng)的變分方法:我們?cè)?次下采樣分辨率后開始焊刹,迭代20次做coarse-to-fine,把流場(chǎng)變?yōu)槿直媛士叶住W詈笈翱椋谌珗D像分辨率上又做了5次迭代。然后把平滑系數(shù)換為
嘉蕾,用文獻(xiàn)【26】的方法計(jì)算圖像邊界和對(duì)應(yīng)的檢測(cè)邊界贺奠,b(x,y)是各自尺度和像素之間的重采樣的thin邊界的strength。這種放大方法比簡(jiǎn)單的雙線性上采樣計(jì)算量大错忱,但是增加了變分方法的優(yōu)點(diǎn)儡率,得到平滑和亞像素準(zhǔn)確的流場(chǎng)。在下文中以清,用變分法refine的結(jié)果加后綴+v喉悴。變分結(jié)果見圖4
7. 訓(xùn)練的參數(shù)設(shè)置
k=0 ?d=20 ?s1=1 ?s2=2
loss:endpoint error (EPE) ,是光流估計(jì)中標(biāo)準(zhǔn)的error measure玖媚,是預(yù)測(cè)光流向量與真實(shí)光流向量的歐氏距離在所有像素上的均值箕肃。
優(yōu)化方法:Adam ,無(wú)需momentum就能比SGD快速收斂今魔。固定了一些參數(shù):
mini-batches :8
learning rate:開始λ= 1e-4勺像,在第300k次迭代后,每100k次迭代除以2错森。在FlowNetCorr中λ= 1e-4 會(huì)出現(xiàn)梯度爆炸吟宦,從較小的學(xué)習(xí)率λ= 1e-6開始, 在10k次迭代后慢慢增加
達(dá)到λ= 1e-4 ,然后再按照剛剛說(shuō)的減少涩维。
發(fā)現(xiàn)測(cè)試過(guò)程中擴(kuò)大輸入圖像能提升性能殃姓,盡管最優(yōu)尺度取決于數(shù)據(jù)集,我們?cè)谒械娜蝿?wù)的每個(gè)網(wǎng)絡(luò)固定了尺度瓦阐,F(xiàn)lowNetS 沒(méi)做擴(kuò)大蜗侈,F(xiàn)lowNetC 選擇1:25的參數(shù)