單目標(biāo)跟蹤小綜述
點擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
首先用一張圖羅列下本文涉及到的paper:
一. 關(guān)于單目標(biāo)跟蹤
本人不了解傳統(tǒng)的相關(guān)濾波法,所有想法總結(jié)僅僅建立在深度學(xué)習(xí)的基礎(chǔ)上。對于單目標(biāo)跟蹤而言一般的解釋都是在第一幀給出待跟蹤的目標(biāo),在后續(xù)幀中,tracker能夠自動找到目標(biāo)并用bbox標(biāo)出。關(guān)于SOT(single object track),有兩條思路。第一種,我們可以把跟蹤粗暴地當(dāng)做一個配對問題,即把第一幀的目標(biāo)當(dāng)做模板,去匹配其他幀。基于這種思路,網(wǎng)絡(luò)并不需要“理解”目標(biāo),只需當(dāng)新的一幀圖像來到時,拿著模板“連連看”找相同就可;siam系列實質(zhì)上就是這個思路,每次兩個輸入,模板和新圖片,然后通過網(wǎng)絡(luò)在新圖片上找和模板最相似的東西,所以這條思路的關(guān)鍵在于如何配得準(zhǔn)。另一種思路是通過第一幀給出的目標(biāo)“理解”目標(biāo),在后續(xù)幀中,不需要再輸入模板,即只有一個輸入,網(wǎng)絡(luò)可以根據(jù)自己理解的模板,在新圖片中預(yù)測出目標(biāo),所以這條思路的關(guān)鍵在于如何讓網(wǎng)路僅僅看一眼目標(biāo)(第一幀)就能向目標(biāo)檢測那樣,“理解”目標(biāo),這就涉及到單樣本學(xué)習(xí)問題,也是檢測和跟蹤的gap。
二. SiamFC
目前基于siamese系列的網(wǎng)絡(luò)已經(jīng)占據(jù)了單目標(biāo)跟蹤大半壁江山。這一切都源于2016年siamFC的提出,siamfc實際上就是將跟蹤當(dāng)做匹配問題,下面具體介紹siamfc。

首先簡單介紹下siamfc的網(wǎng)絡(luò)框架,圖中z是模板(即待跟蹤的目標(biāo)),x是當(dāng)前幀的圖像,
是用于提取圖像特征的卷積網(wǎng)絡(luò),因為作用于x(srch_img)的
與作用于z(template)的
完全一樣所以稱為孿生網(wǎng)絡(luò)(siamese),經(jīng)過卷積網(wǎng)絡(luò)提取特征后分別得到x和z的feature map,然后將二者卷積(
表示卷積),即將6×6×128的feature map當(dāng)做卷積核,在22×22×128上進(jìn)行卷積得到17×17×1的heatmap,heatmap上值最大的點就對應(yīng)于x圖像中目標(biāo)的中心。
下面說一些細(xì)節(jié),首先
網(wǎng)絡(luò)是5層不帶padding的AlexNet。顯然5層不符合深度學(xué)習(xí)“深”的理念,但是由于網(wǎng)絡(luò)不能加padding所以限制了網(wǎng)絡(luò)深度,為什么不能padding呢,事實上target在x上的位置,我們是從heatmap得到,這是基于卷積的平移等變性,即target在x上平移了n,相應(yīng)的就會在heatmap上平移n/stride,且值不會變。但如果加入了padding,對于圖像邊緣的像素,雖然也會平移,但值會變,因為padding對圖像的邊緣進(jìn)行了改變。siamRPN++和siamDW解決了這個問題,后面會詳細(xì)講。然后是訓(xùn)練時,x和z的獲取方式:z是以第一幀的bbox的中心為中心裁剪出一塊圖像,再將這塊圖像縮放到127×127,255×255的srchimg也是類似得到的。
這里有幾個細(xì)節(jié)需要注意,
第一,template與srch_img的中心就是目標(biāo)的中心,且template是裁剪過的,如果不裁剪那么template中背景過多,導(dǎo)致匹配失敗。不過在siamfc中背景信息完全被丟棄,換句話說,siamfc對缺乏對背景的利用,也導(dǎo)致模型的判別性不足,后續(xù)有相關(guān)工作對此進(jìn)行改進(jìn)。
第二,訓(xùn)練階段的標(biāo)簽怎么得到呢,如果只是簡單將目標(biāo)所在位置標(biāo)為1,其他位置標(biāo)為0,就會產(chǎn)生嚴(yán)重的樣本不均衡問題,于是作者將離目標(biāo)中心點r半徑內(nèi)的label都設(shè)置為1,其他設(shè)為0,loss function為
,y為預(yù)測值,v為標(biāo)簽值,這里關(guān)于label的設(shè)置也有一些可以優(yōu)化的點,使用focal loss是否對模型的判別性是否會更高呢。
第三,在測試時,siamfc的template是不更新的,即一直為第一幀,這就導(dǎo)致模型的魯棒性不佳,例如隨著時間的變化template出現(xiàn)遮擋、模糊等情況,但是如果更新策略不佳又會引入模板污染、過擬合等問題,在這方面也有相關(guān)工作討論。在測試時,首先搜索區(qū)域不是整個srchimg而只是之前的四倍大小的搜索區(qū)域,其次在feature map上加了余弦窗,最后為了解決尺度問題,對srch_img進(jìn)行縮放了3種尺度。
三. Siam系列
1. SiamRPN
SiamRPN是CASIA在2018提出來的網(wǎng)絡(luò),它將siam與檢測領(lǐng)域的RPN進(jìn)行結(jié)合。關(guān)于RPN(faster RCNN)可以參看faster RCNN,這篇帖子寫得非常好。在檢測領(lǐng)域RPN本意是用作檢測,它將feature map上的各個點當(dāng)做錨點,并映射到映射到輸入圖片上,再在每個錨點周圍取9個尺度不同的錨框,對每個錨框進(jìn)行檢測是否有物體以及位置回歸。
siamRPN的網(wǎng)絡(luò)框架見上圖,這里可以從one-shot的思路理解sianRPN,我們把template分支的embedding當(dāng)作卷積核,srch_img分支當(dāng)作feature map,在template與srchimg卷積之前,先將卷積核(即template得到的feature map)通過1*1卷積升維到原來的2k(用于cls)和4k(用于位置的reg)倍。然后拉出分類與位置回歸兩個分支。(建議沒看多RPN的朋友看下上面推薦的那篇講faster rcnn的帖子,看完這里就自然懂了)。這里的anchor到底是什么呢,根據(jù)筆者粗淺的理解,siamfc相當(dāng)于直接將template與srching直接卷積匹配,而siamRPN在template上引入k個anchor相當(dāng)于選取了k個尺度與srch_img進(jìn)行匹配,解決了尺度問題。(筆者對anchor的理解還不夠深入,后面深入研究下再寫一篇文章專門探討anchor的本質(zhì)及其優(yōu)缺點)
siamRPN無論是在A還是R上都優(yōu)于siamfc(這里補充一下,對于跟蹤而言主要有兩個子指標(biāo)A(accuracy)與R(robust), A主要是跟蹤的位置要準(zhǔn),R主要是模型的判別性要高,即能夠準(zhǔn)確識別哪些是目標(biāo),從而判斷出目標(biāo)的大致位置。關(guān)于R與A可參見VOT評價指標(biāo)),也就是說siamrpn的模型判別性與準(zhǔn)確性都比siamfc好,結(jié)果見下圖。

筆者認(rèn)為,準(zhǔn)確性的提升主要來自與siamrpn將位置回歸單獨拉出來作為一個分支,這一點在后續(xù)的siamfc++中也可以看到作者相關(guān)的論述。在模型判別性方面,筆者認(rèn)為,提升的關(guān)鍵在于siamrpn在進(jìn)行匹配(即template與srchimg卷積的過程)時,由于引入了k個anchors,相當(dāng)于從k個尺度對template與srch_img進(jìn)行更加細(xì)粒度的匹配,效果更好也是情理之中。另外很重要的一點就是sianrpn解決了尺度問題。
2. DaSiamRPN
關(guān)于這篇文章,筆者之前在github上做過一些筆記,這里就簡單摘錄一些,具體筆記見DaSiamRPN。
DasiamRPN并沒有對siamfc的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行過多的改進(jìn),而是從訓(xùn)練數(shù)據(jù),模板更新,搜索區(qū)域三個角度對模型的rubost進(jìn)行了提升。使得SiamRPN網(wǎng)絡(luò)能夠適應(yīng)長期跟蹤。
首先作者對siamrpn的缺點進(jìn)行了分析,主要有三點:
在訓(xùn)練階段,存在樣本不均衡問題。即大部分樣本都是沒有語義的背景(注:背景不是非target的物體,而是指那些既不屬于target,也不屬于干擾物,沒有語義的圖像塊,例如大片白色。)這就導(dǎo)致了網(wǎng)絡(luò)學(xué)到的僅僅是對于背景與前景的區(qū)分,即在圖像中提取出物體,但我們希望網(wǎng)絡(luò)還能夠識別target與非target物體。作者從數(shù)據(jù)增強的角度解決此問題。
模型判別性不足,缺乏模板的更新,即在heatmap中很多非target的物體得分也很高;甚至當(dāng)圖像中沒有目標(biāo)時,依然會有很高的得分存在。作者認(rèn)為與target相似的物體對于增強模型的判別性有幫助,因此提出了distractor-aware module對干擾(得分很高的框)進(jìn)行學(xué)習(xí),更新模板,從而提高siam判別性。但是排名靠前的都是與target很相似的物體,也就是說該更新只利用到了target的信息,沒有利用到背景信息。
由于第二個缺陷,原始的siam以及siamRPN使用了余弦窗,因此當(dāng)目標(biāo)丟失,然后從另一個位置出現(xiàn),此時siam不能重新識別target, (siamRPN的搜索區(qū)域是上一陣的中心加上預(yù)設(shè)的搜索區(qū)域大小形成的搜索框),該缺陷導(dǎo)致siam無法適應(yīng)長時間跟蹤的問題。對此作者提出了local-to-global的搜索策略,其實就是隨著目標(biāo)消失幀數(shù)的增加,搜索區(qū)域逐漸擴(kuò)大。
針對這三個問題,作者給出了相應(yīng)的解決方案。首先對于數(shù)據(jù)問題,當(dāng)然是使用數(shù)據(jù)增強,主要方法有:增加訓(xùn)練集中物體的類別;訓(xùn)練時使用來自同一類別的負(fù)樣本,以及來自不同類別的正樣本輔助訓(xùn)練;增加圖像的運動模糊。關(guān)于template的更新問題,作者對heatmap得到目標(biāo)先NMS去除一些冗余框,然后將相似度靠前的框(干擾物)拿出來,讓網(wǎng)絡(luò)對其學(xué)習(xí),拉大target_embedding與這些干擾物之間的相似度。這樣的優(yōu)點在于既綜合了當(dāng)前幀的信息,同時因NMS靠前的都與目標(biāo)很相似,這就抑制了模板污染問題。
3. siamMask
關(guān)于siamMask,先放一張效果圖,就可以知道他做的是什么工作。
簡單來說siamMask就是將跟蹤與分割結(jié)合到了一起,從其結(jié)果上,相比與之前的視頻分割工作,其提升了速度,相比與之前的DasaimRPN其提升了A與R.
這里不對分割進(jìn)行探討,僅從跟蹤的角度來看,筆者認(rèn)為saimMask的提升相比與siamRPN主要來源與多任務(wù)學(xué)習(xí)(即更加精細(xì)的像素級的數(shù)據(jù)集與學(xué)習(xí)任務(wù))。

上圖是siamMask的網(wǎng)絡(luò)框架,從中我們也可以看出,就網(wǎng)絡(luò)本身而言,siamMask只是比siamRPN多了一個(分割)分支,即多了一個學(xué)習(xí)任務(wù)。
4. siamRPN++
siamRPN++可以說是將siam系列網(wǎng)絡(luò)又推向一個高峰,它解決的是如何將siam網(wǎng)絡(luò)加深的問題。筆者在寫siamfc那部分時提到,siamfc中的backbone使用的是只有5層的AlexNet,且不含padding, 其實在siamrpn的backbone也很淺。這是因為網(wǎng)絡(luò)不能加padding, 不能加padding,那么隨著網(wǎng)絡(luò)深度的增加,feature map就會越來越小,特征丟失過多。而加padding則會破壞卷積的平移等變性。在siamrpn++中,作者是從實驗效果的角度對padding進(jìn)行探究。作者認(rèn)為padding會給網(wǎng)絡(luò)帶來空間上的偏見。具體來說,padding就是在圖片邊緣加上黑邊,但是黑邊肯定不是我們的目標(biāo),而黑邊總是在邊緣,那么對于神經(jīng)網(wǎng)絡(luò)來說,它就會認(rèn)為邊緣都不是目標(biāo),即離邊緣越遠(yuǎn)的越可能是目標(biāo)。這就導(dǎo)致了神經(jīng)網(wǎng)絡(luò)總是習(xí)慣認(rèn)為圖像中心的是目標(biāo),而忽視目標(biāo)本身的特征,而siamfc的訓(xùn)練方法target也確實是在圖片中央。(這里需要指明的是,在siamfc的訓(xùn)練過程中,總是讓template與srch_img處于圖片的中央,作者在siamfc中說因為他們使用了全卷積的結(jié)構(gòu),所以在siamfc中不會有空間上的bias,顯然這里的結(jié)果和siamrpn++的結(jié)果有矛盾,這也是筆者在寫這篇貼子時想到的,siamfc到底有沒有空間的bias還有待筆者代碼測試,也歡迎評論區(qū)小伙伴討論。)
回到siamrpn++上來,有了上面的分析,解決辦法自然也就有了,既然網(wǎng)絡(luò)總是習(xí)慣認(rèn)為中心是目標(biāo),那讓target不要總是在圖片中央不就好了,于是siamrpn++最大的貢獻(xiàn)就產(chǎn)生了,在訓(xùn)練時讓目標(biāo)相對于中心偏移幾個像素,論文中實驗表明偏移64個像素最佳.
關(guān)于網(wǎng)絡(luò)結(jié)構(gòu)方面,siamrpn++也在siamrpn的基礎(chǔ)上做了一些改進(jìn),見上圖,首先當(dāng)然是加深backbone,論文中使用了resNet50。此外在核相關(guān)環(huán)節(jié),siamrpn是直接將template與srch_img的經(jīng)過backbone后的embedding都先升維至原來的2k倍和4k倍,這樣做的缺點是參數(shù)量的不平衡,即在核相關(guān)環(huán)節(jié)的參數(shù)量是其余環(huán)節(jié)的4倍,這為訓(xùn)練增加了難度(為什么增加了難度?)。這種參數(shù)量的不平衡主要來自與核相關(guān)的卷積操作,因此siamrpn++使用depthwise cross correlation的卷積方式,用下面這張網(wǎng)上截來的圖來說明這種操作。
除此之外,siamrpn++還綜合了更多的特征,見網(wǎng)絡(luò)框架圖。這中融合使得網(wǎng)絡(luò)學(xué)會更多的圖像特征,在最近的siamCAR中也使用了類似的方法,分刷得很高,看來特征融合確實是提分利器。
最后放下siamrpn++的測試結(jié)果,
不得不承認(rèn),siamrpn++的EAO(綜合了A和R的指標(biāo))還真是高得驚人,不過仔細(xì)看A與R可以發(fā)現(xiàn),siamrpn++的Accuracy非常出眾,但robustness提升空間還很大,也就是說,網(wǎng)絡(luò)的判別性并沒有那么驚艷,但是講道理網(wǎng)絡(luò)深度加深而且還有特征融合的助力,最受益的應(yīng)該就是R,這其中原因還有待筆者跑跑代碼再做評論(盲猜是不是模板未更新的緣故,然而加入了模板更新的Dasiamrpn的R值更高)。
5. siamDW
與siamrpn++一樣siamDW也是解決siam系列網(wǎng)絡(luò)深度的問題,兩篇都同為CVPR2019的oral。
siamDW認(rèn)為siam系列網(wǎng)絡(luò)不能加深原因有二:第一,隨著網(wǎng)絡(luò)深度的增加,網(wǎng)絡(luò)的感受野增加,從而減少了網(wǎng)絡(luò)的判別性與回歸的準(zhǔn)確度;第二,padding會引入spatial bias,因為如果使用padding的話,對于卷積核(template)來說是一定帶來說是一定帶padding,而對于search image中間部分是沒有padding的,只有邊緣的才有padding,作者認(rèn)為這會導(dǎo)致不連續(xù),導(dǎo)致對于search image邊緣的目標(biāo)識別很差。因此本文的作者從兩個方面探究了加深siam系列網(wǎng)絡(luò)的辦法:第一,感受野的問題,作者探究發(fā)現(xiàn)siam系列網(wǎng)絡(luò)prefer small stride,4~8最宜,同時網(wǎng)絡(luò)最后的感受野最好在整幅exemplar的60%至80%最佳,stride也要根據(jù)這個來調(diào)整;針對padding問題,作者設(shè)計了一種新的殘差網(wǎng)絡(luò)結(jié)構(gòu),先padding,得到feature map后再刪除feature map上受padding影響元素。
再來看下結(jié)果
6. siamFC++
針對siam網(wǎng)絡(luò)分析了之前的工作不合理的地方,提出了4條guidelines,并就這4條guidelines對siamfc進(jìn)行了改進(jìn),個人認(rèn)為這幾點guidelines非常有意義。
跟蹤網(wǎng)絡(luò)分為兩個子任務(wù),一個是分類,一個是位置的準(zhǔn)確估計。即網(wǎng)絡(luò)需要有分類與位置估計兩個分支。缺少分類分支,模型的判別性會降低,表現(xiàn)到VOT評價指標(biāo)上就是R不高;缺少位置估計分支,目標(biāo)的位置準(zhǔn)確度會降低,表現(xiàn)到VOT評價指標(biāo)上就是A不高。
分類與位置估計使用的feature map要分開。即不能分類的feature map上直接得到位置的估計,否則會降低A。
siam匹配的要是原始的exemplar,不能是與預(yù)設(shè)定的anchors匹配,否則模型的判別性會降低,siamFC++的A值略低于siamRPN++,但是R值在測試過的數(shù)據(jù)集上都比siamRPN++高,作者認(rèn)為就是anchors的原因,在論文的實驗部分,作者進(jìn)行了實驗發(fā)現(xiàn)siamRPN系列都是與anchors進(jìn)行匹配而不是exemplar本身,但是anchors與exemplar之間存在一些差異,導(dǎo)致siamRPN的魯棒性不高。
不能加入數(shù)據(jù)分布的先驗知識,例如原始siamFC的三種尺度變換,anchors等實際上都是對目標(biāo)尺度的一種先驗,否則會影響模型的通用性。
網(wǎng)絡(luò)結(jié)構(gòu)如上圖,值得注意的是siamfc++未使用anchors那么她是怎么解決尺度問題的呢,筆者在論文中似乎未見到作者關(guān)于這方面的提及,如果有朋友注意到還請在評論區(qū)告知,此外作者在論文中說他們追隨了“per-pixel prediction fashion”,這是指什么也還有待開源代碼后筆者再研究下。
另外值得注意的是作者在訓(xùn)練時是如何定義正副樣本的。作者認(rèn)為落在bbox內(nèi)部的點都算positive,在計算loss時,只考慮positive的點,在對位置回歸時,作者實驗發(fā)現(xiàn)PSS loss比IOU loss高0.2個點,所以位置回歸分支使用PSS loss,分類分支使用focal loss,quality分支使用BCE(即作者使用了兩種不同的loss來訓(xùn)練分類分支)。在訓(xùn)練時,只使用了positive的點,該模型對背景的區(qū)分度可能不夠(還是要運行代碼看呀),如果把背景也加上會不會進(jìn)一步提升模型的判別性。跟蹤不僅僅是單純的根據(jù)exemplar圖像本身特征尋找,目標(biāo)周圍的環(huán)境對跟蹤也有幫助,對loss進(jìn)行改進(jìn)。
最后看下消融實驗以及最后的結(jié)果

由該圖可以看到siamFC++改進(jìn)的各部分對于最后結(jié)果的提升(與原始的siamFC比較),位置回歸對EAO提升最大,the regression branch (0.094), data source diversity (0.063/0.010), stronger backbone (0.026), and better head structure (0.020).

四. GradNet
GradNet主要解決的是網(wǎng)絡(luò)在線更新template的問題,對于template的更新主要有兩種一種是類似與Dasiamrpn融合template,另一種是梯度下降對template進(jìn)行修正。作者的方法對標(biāo)第二種,第二種最大的缺點在于要迭代很多次,GradNet思路清奇的訓(xùn)練了一個網(wǎng)絡(luò)來替代這么多次梯度下降迭代優(yōu)化。
關(guān)于這篇論文的筆記,請參考我在github上寫的GradNet筆記
五. 統(tǒng)一檢測與單目標(biāo)跟蹤的網(wǎng)絡(luò)
詳細(xì)筆記同樣參見我在github上寫的統(tǒng)一檢測與單目標(biāo)跟蹤筆記
首先闡述下筆者關(guān)于將檢測直接應(yīng)用到單目標(biāo)跟蹤領(lǐng)域的難點:
如何將exemplar與srch img 融合到一起,目的就是告訴網(wǎng)絡(luò)需要跟蹤的對象,實際上也就是作者提出的第一個難點。
網(wǎng)絡(luò)不可能提前知道要跟蹤的目標(biāo)從而進(jìn)行相應(yīng)的訓(xùn)練,如何使得網(wǎng)絡(luò)能夠識別出“臨時”挑選的目標(biāo)。采用meta-learning的方法如何避免過擬合。
siam成功的地方在于將上述兩個問題轉(zhuǎn)化為匹配問題,即在srch img中匹配exemplar,siam的問題在于網(wǎng)絡(luò)的判別性,即不會匹配到背景,另外exemplar是否更新,如何更新,尺度變換問題如何解決。
然后這篇論文對于這幾個問題的解決方案summary是:
提出了target-guidance module(TGM)將exemplar圖像融合到檢測的feature map里。
在線學(xué)習(xí)Meta-learning對classification head微調(diào)。
在線更新權(quán)重
anchored updating strategy減少Meta-learning的overfitting。
參考文獻(xiàn)
[1]SiameseFC:Luca Bertinetto, Jack Valmadre, Jo?o F. Henriques, Andrea Vedaldi, Philip H.S. Torr. "Fully-Convolutional Siamese Networks for Object Tracking." ECCV workshop (2016).
[2]SiamRPN:Bo Li, Wei Wu, Zheng Zhu, Junjie Yan. "High Performance Visual Tracking with Siamese Region Proposal Network." CVPR (2018Spotlight).
[3]DaSiamRPN:Zheng Zhu, Qiang Wang, Bo Li, Wu Wei, Junjie Yan, Weiming Hu."Distractor-aware Siamese Networks for Visual Object Tracking." ECCV (2018).
[4]SiamDW:Zhipeng Zhang, Houwen Peng."Deeper and Wider Siamese Networks for Real-Time Visual Tracking." CVPR (2019oral).
[5]SiamMask:Qiang Wang, Li Zhang, Luca Bertinetto, Weiming Hu, Philip H.S. Torr."Fast Online Object Tracking and Segmentation: A Unifying Approach." CVPR (2019).
[6]SiamRPN++:Bo Li, Wei Wu, Qiang Wang, Fangyi Zhang, Junliang Xing, Junjie Yan."SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks." CVPR (2019oral).
[7]GradNet:Peixia Li, Boyu Chen, Wanli Ouyang, Dong Wang, Xiaoyun Yang, Huchuan Lu."GradNet: Gradient-Guided Network for Visual Object Tracking." ICCV (2019oral).
[8]Lianghua Huang, Xin Zhao, Kaiqi Huang."Bridging the Gap Between Detection and Tracking: A Unified Approach." ICCV (2019).
[9]Yinda Xu,Zeyu Wang,Zuoxin Li,Yuan Ye,Gang Yu."SiamFC++: Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines." AAAI 2020
END
下載1:leetcode 開源書
在「AI算法與圖像處理」公眾號后臺回復(fù):leetcode,即可下載。每題都 runtime beats 100% 的開源好書,你值得擁有!
下載2 CVPR2020
在「AI算法與圖像處理」公眾號后臺回復(fù):CVPR2020,即可下載1467篇CVPR 2020論文 個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
覺得不錯就點亮在看吧

