深度目標跟蹤教程之必讀系列

原文鏈接  單目標跟蹤paper小綜述 - y.lei的文章 - 知乎 https://zhuanlan.zhihu.com/p/96631118

-----------------------------------------------------------------以下均屬於轉載內容-----------------------------------------------------------------------------

首先用一張圖羅列下本文涉及到的paper:


一. 關於單目標跟蹤

  本人不瞭解傳統的相關濾波法,所有想法總結僅僅建立在深度學習的基礎上。對於單目標跟蹤而言一般的解釋都是在第一幀給出待跟蹤的目標,在後續幀中,tracker能夠自動找到目標並用bbox標出。關於SOT(single object track),有兩條思路。第一種,我們可以把跟蹤粗暴地當做一個配對問題,即把第一幀的目標當做模板,去匹配其他幀。基於這種思路,網絡並不需要“理解”目標,只需當新的一幀圖像來到時,拿着模板“連連看”找相同就可;siam系列實質上就是這個思路,每次兩個輸入,模板和新圖片,然後通過網絡在新圖片上找和模板最相似的東西,所以這條思路的關鍵在於如何配得準。另一種思路是通過第一幀給出的目標“理解”目標,在後續幀中,不需要再輸入模板,即只有一個輸入,網絡可以根據自己理解的模板,在新圖片中預測出目標,所以這條思路的關鍵在於如何讓網路僅僅看一眼目標(第一幀)就能向目標檢測那樣,“理解”目標,這就涉及到單樣本學習問題,也是檢測和跟蹤的gap。

二. SiamFC

  目前基於siamese系列的網絡已經佔據了單目標跟蹤大半壁江山。這一切都源於2016年siamFC的提出,siamfc實際上就是將跟蹤當做匹配問題,下面具體介紹siamfc。

  首先簡單介紹下siamfc的網絡框架,圖中z是模板(即待跟蹤的目標),x是當前幀的圖像, [公式] 是用於提取圖像特徵的卷積網絡,因爲作用於x(srch_img)的[公式]與作用於z(template)的[公式]完全一樣所以稱爲孿生網絡(siamese),經過卷積網絡提取特徵後分別得到x和z的feature map,然後將二者卷積( [公式] 表示卷積),即將6×6×128的feature map當做卷積核,在22×22×128上進行卷積得到17×17×1的heatmap,heatmap上值最大的點就對應於x圖像中目標的中心。

  下面說一些細節,首先[公式]網絡是5層不帶padding的AlexNet。顯然5層不符合深度學習“深”的理念,但是由於網絡不能加padding所以限制了網絡深度,爲什麼不能padding呢,事實上target在x上的位置,我們是從heatmap得到,這是基於卷積的平移等變性,即target在x上平移了n,相應的就會在heatmap上平移n/stride,且值不會變。但如果加入了padding,對於圖像邊緣的像素,雖然也會平移,但值會變,因爲padding對圖像的邊緣進行了改變。siamRPN++和siamDW解決了這個問題,後面會詳細講。然後是訓練時,x和z的獲取方式:z是以第一幀的bbox的中心爲中心裁剪出一塊圖像,再將這塊圖像縮放到127×127,255×255的srchimg也是類似得到的。這裏有幾個細節需要注意,第一,template與srch_img的中心就是目標的中心,且template是裁剪過的,如果不裁剪那麼template中背景過多,導致匹配失敗。不過在siamfc中背景信息完全被丟棄,換句話說,siamfc對缺乏對背景的利用,也導致模型的判別性不足,後續有相關工作對此進行改進。第二,訓練階段的標籤怎麼得到呢,如果只是簡單將目標所在位置標爲1,其他位置標爲0,就會產生嚴重的樣本不均衡問題,於是作者將離目標中心點r半徑內的label都設置爲1,其他設爲0,loss function爲 [公式] ,y爲預測值,v爲標籤值,這裏關於label的設置也有一些可以優化的點,使用focal loss是否對模型的判別性是否會更高呢。第三,在測試時,siamfc的template是不更新的,即一直爲第一幀,這就導致模型的魯棒性不佳,例如隨着時間的變化template出現遮擋、模糊等情況,但是如果更新策略不佳又會引入模板污染、過擬合等問題,在這方面也有相關工作討論。在測試時,首先搜索區域不是整個srchimg而只是之前的四倍大小的搜索區域,其次在feature map上加了餘弦窗,最後爲了解決尺度問題,對srch_img進行縮放了3種尺度。

三. Siam系列

1. SiamRPN

  SiamRPN是CASIA在2018提出來的網絡,它將siam與檢測領域的RPN進行結合。關於RPN(faster RCNN)可以參看faster RCNN,這篇帖子寫得非常好。在檢測領域RPN本意是用作檢測,它將feature map上的各個點當做錨點,並映射到映射到輸入圖片上,再在每個錨點周圍取9個尺度不同的錨框,對每個錨框進行檢測是否有物體以及位置迴歸。

  siamRPN的網絡框架見上圖,這裏可以從one-shot的思路理解sianRPN,我們把template分支的embedding當作卷積核,srch_img分支當作feature map,在template與srchimg卷積之前,先將卷積核(即template得到的feature map)通過1*1卷積升維到原來的2k(用於cls)和4k(用於位置的reg)倍。然後拉出分類與位置迴歸兩個分支。(建議沒看多RPN的朋友看下上面推薦的那篇講faster rcnn的帖子,看完這裏就自然懂了)。這裏的anchor到底是什麼呢,根據筆者粗淺的理解,siamfc相當於直接將template與srching直接卷積匹配,而siamRPN在template上引入k個anchor相當於選取了k個尺度與srch_img進行匹配,解決了尺度問題。(筆者對anchor的理解還不夠深入,後面深入研究下再寫一篇文章專門探討anchor的本質及其優缺點)

  siamRPN無論是在A還是R上都優於siamfc(這裏補充一下,對於跟蹤而言主要有兩個子指標A(accuracy)與R(robust), A主要是跟蹤的位置要準,R主要是模型的判別性要高,即能夠準確識別哪些是目標,從而判斷出目標的大致位置。關於R與A可參見VOT評價指標),也就是說siamrpn的模型判別性與準確性都比siamfc好,結果見下圖。

  筆者認爲,準確性的提升主要來自與siamrpn將位置迴歸單獨拉出來作爲一個分支,這一點在後續的siamfc++中也可以看到作者相關的論述。在模型判別性方面,筆者認爲,提升的關鍵在於siamrpn在進行匹配(即template與srchimg卷積的過程)時,由於引入了k個anchors,相當於從k個尺度對template與srch_img進行更加細粒度的匹配,效果更好也是情理之中。另外很重要的一點就是sianrpn解決了尺度問題。

2. DaSiamRPN

  關於這篇文章,筆者之前在github上做過一些筆記,這裏就簡單摘錄一些,具體筆記見DaSiamRPN

  DasiamRPN並沒有對siamfc的網絡結構進行過多的改進,而是從訓練數據,模板更新,搜索區域三個角度對模型的rubost進行了提升。使得SiamRPN網絡能夠適應長期跟蹤。

  首先作者對siamrpn的缺點進行了分析,主要有三點:

  • 在訓練階段,存在樣本不均衡問題。即大部分樣本都是沒有語義的背景(注:背景不是非target的物體,而是指那些既不屬於target,也不屬於干擾物,沒有語義的圖像塊,例如大片白色。)這就導致了網絡學到的僅僅是對於背景與前景的區分,即在圖像中提取出物體,但我們希望網絡還能夠識別target與非target物體。作者從數據增強的角度解決此問題。
  • 模型判別性不足,缺乏模板的更新,即在heatmap中很多非target的物體得分也很高;甚至當圖像中沒有目標時,依然會有很高的得分存在。作者認爲與target相似的物體對於增強模型的判別性有幫助,因此提出了distractor-aware module對干擾(得分很高的框)進行學習,更新模板,從而提高siam判別性。但是排名靠前的都是與target很相似的物體,也就是說該更新只利用到了target的信息,沒有利用到背景信息。
  • 由於第二個缺陷,原始的siam以及siamRPN使用了餘弦窗,因此當目標丟失,然後從另一個位置出現,此時siam不能重新識別target, (siamRPN的搜索區域是上一陣的中心加上預設的搜索區域大小形成的搜索框),該缺陷導致siam無法適應長時間跟蹤的問題。對此作者提出了local-to-global的搜索策略,其實就是隨着目標消失幀數的增加,搜索區域逐漸擴大。

  針對這三個問題,作者給出了相應的解決方案。首先對於數據問題,當然是使用數據增強,主要方法有:增加訓練集中物體的類別;訓練時使用來自同一類別的負樣本,以及來自不同類別的正樣本輔助訓練;增加圖像的運動模糊。關於template的更新問題,作者對heatmap得到目標先NMS去除一些冗餘框,然後將相似度靠前的框(干擾物)拿出來,讓網絡對其學習,拉大target_embedding與這些干擾物之間的相似度。這樣的優點在於既綜合了當前幀的信息,同時因NMS靠前的都與目標很相似,這就抑制了模板污染問題。

3. siamMask

  關於siamMask,先放一張效果圖,就可以知道他做的是什麼工作。

  簡單來說siamMask就是將跟蹤與分割結合到了一起,從其結果上,相比與之前的視頻分割工作,其提升了速度,相比與之前的DasaimRPN其提升了A與R.

這裏不對分割進行探討,僅從跟蹤的角度來看,筆者認爲saimMask的提升相比與siamRPN主要來源與多任務學習(即更加精細的像素級的數據集與學習任務)。

  上圖是siamMask的網絡框架,從中我們也可以看出,就網絡本身而言,siamMask只是比siamRPN多了一個(分割)分支,即多了一個學習任務。

4. siamRPN++

  siamRPN++可以說是將siam系列網絡又推向一個高峯,它解決的是如何將siam網絡加深的問題。筆者在寫siamfc那部分時提到,siamfc中的backbone使用的是隻有5層的AlexNet,且不含padding, 其實在siamrpn的backbone也很淺。這是因爲網絡不能加padding, 不能加padding,那麼隨着網絡深度的增加,feature map就會越來越小,特徵丟失過多。而加padding則會破壞卷積的平移等變性。在siamrpn++中,作者是從實驗效果的角度對padding進行探究。作者認爲padding會給網絡帶來空間上的偏見。具體來說,padding就是在圖片邊緣加上黑邊,但是黑邊肯定不是我們的目標,而黑邊總是在邊緣,那麼對於神經網絡來說,它就會認爲邊緣都不是目標,即離邊緣越遠的越可能是目標。這就導致了神經網絡總是習慣認爲圖像中心的是目標,而忽視目標本身的特徵,而siamfc的訓練方法target也確實是在圖片中央。(這裏需要指明的是,在siamfc的訓練過程中,總是讓template與srch_img處於圖片的中央,作者在siamfc中說因爲他們使用了全卷積的結構,所以在siamfc中不會有空間上的bias,顯然這裏的結果和siamrpn++的結果有矛盾,這也是筆者在寫這篇貼子時想到的,siamfc到底有沒有空間的bias還有待筆者代碼測試,也歡迎評論區小夥伴討論。)

  回到siamrpn++上來,有了上面的分析,解決辦法自然也就有了,既然網絡總是習慣認爲中心是目標,那讓target不要總是在圖片中央不就好了,於是siamrpn++最大的貢獻就產生了,在訓練時讓目標相對於中心偏移幾個像素,論文中實驗表明偏移64個像素最佳.

關於網絡結構方面,siamrpn++也在siamrpn的基礎上做了一些改進,見上圖,首先當然是加深backbone,論文中使用了resNet50。此外在覈相關環節,siamrpn是直接將template與srch_img的經過backbone後的embedding都先升維至原來的2k倍和4k倍,這樣做的缺點是參數量的不平衡,即在覈相關環節的參數量是其餘環節的4倍,這爲訓練增加了難度(爲什麼增加了難度?)。這種參數量的不平衡主要來自與核相關的卷積操作,因此siamrpn++使用depthwise cross correlation的卷積方式,用下面這張網上截來的圖來說明這種操作。

除此之外,siamrpn++還綜合了更多的特徵,見網絡框架圖。這中融合使得網絡學會更多的圖像特徵,在最近的siamCAR中也使用了類似的方法,分刷得很高,看來特徵融合確實是提分利器。

最後放下siamrpn++的測試結果,

不得不承認,siamrpn++的EAO(綜合了A和R的指標)還真是高得驚人,不過仔細看A與R可以發現,siamrpn++的Accuracy非常出衆,但robustness提升空間還很大,也就是說,網絡的判別性並沒有那麼驚豔,但是講道理網絡深度加深而且還有特徵融合的助力,最受益的應該就是R,這其中原因還有待筆者跑跑代碼再做評論(盲猜是不是模板未更新的緣故,然而加入了模板更新的Dasiamrpn的R值更高)。

5. siamDW

與siamrpn++一樣siamDW也是解決siam系列網絡深度的問題,兩篇都同爲CVPR2019的oral。

siamDW認爲siam系列網絡不能加深原因有二:第一,隨着網絡深度的增加,網絡的感受野增加,從而減少了網絡的判別性與迴歸的準確度;第二,padding會引入spatial bias,因爲如果使用padding的話,對於卷積核(template)來說是一定帶來說是一定帶padding,而對於search image中間部分是沒有padding的,只有邊緣的纔有padding,作者認爲這會導致不連續,導致對於search image邊緣的目標識別很差。因此本文的作者從兩個方面探究了加深siam系列網絡的辦法:第一,感受野的問題,作者探究發現siam系列網絡prefer small stride,4~8最宜,同時網絡最後的感受野最好在整幅exemplar的60%至80%最佳,stride也要根據這個來調整;針對padding問題,作者設計了一種新的殘差網絡結構,先padding,得到feature map後再刪除feature map上受padding影響元素。

再來看下結果

6. siamFC++

針對siam網絡分析了之前的工作不合理的地方,提出了4條guidelines,並就這4條guidelines對siamfc進行了改進,個人認爲這幾點guidelines非常有意義。

  • 跟蹤網絡分爲兩個子任務,一個是分類,一個是位置的準確估計。即網絡需要有分類與位置估計兩個分支。缺少分類分支,模型的判別性會降低,表現到VOT評價指標上就是R不高;缺少位置估計分支,目標的位置準確度會降低,表現到VOT評價指標上就是A不高。
  • 分類與位置估計使用的feature map要分開。即不能分類的feature map上直接得到位置的估計,否則會降低A。
  • siam匹配的要是原始的exemplar,不能是與預設定的anchors匹配,否則模型的判別性會降低,siamFC++的A值略低於siamRPN++,但是R值在測試過的數據集上都比siamRPN++高,作者認爲就是anchors的原因,在論文的實驗部分,作者進行了實驗發現siamRPN系列都是與anchors進行匹配而不是exemplar本身,但是anchors與exemplar之間存在一些差異,導致siamRPN的魯棒性不高。
  • 不能加入數據分佈的先驗知識,例如原始siamFC的三種尺度變換,anchors等實際上都是對目標尺度的一種先驗,否則會影響模型的通用性。

網絡結構如上圖,值得注意的是siamfc++未使用anchors那麼她是怎麼解決尺度問題的呢,筆者在論文中似乎未見到作者關於這方面的提及,如果有朋友注意到還請在評論區告知,此外作者在論文中說他們追隨了“per-pixel prediction fashion”,這是指什麼也還有待開源代碼後筆者再研究下。

另外值得注意的是作者在訓練時是如何定義正副樣本的。作者認爲落在bbox內部的點都算positive,在計算loss時,只考慮positive的點,在對位置迴歸時,作者實驗發現PSS loss比IOU loss高0.2個點,所以位置迴歸分支使用PSS loss,分類分支使用focal loss,quality分支使用BCE(即作者使用了兩種不同的loss來訓練分類分支)。在訓練時,只使用了positive的點,該模型對背景的區分度可能不夠(還是要運行代碼看呀),如果把背景也加上會不會進一步提升模型的判別性。跟蹤不僅僅是單純的根據exemplar圖像本身特徵尋找,目標周圍的環境對跟蹤也有幫助,對loss進行改進。

最後看下消融實驗以及最後的結果

由該圖可以看到siamFC++改進的各部分對於最後結果的提升(與原始的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主要解決的是網絡在線更新template的問題,對於template的更新主要有兩種一種是類似與Dasiamrpn融合template,另一種是梯度下降對template進行修正。作者的方法對標第二種,第二種最大的缺點在於要迭代很多次,GradNet思路清奇的訓練了一個網絡來替代這麼多次梯度下降迭代優化。

關於這篇論文的筆記,請參考我在github上寫的GradNet筆記

五. 統一檢測與單目標跟蹤的網絡

詳細筆記同樣參見我在github上寫的統一檢測與單目標跟蹤筆記

首先闡述下筆者關於將檢測直接應用到單目標跟蹤領域的難點:

  • 如何將exemplar與srch img 融合到一起,目的就是告訴網絡需要跟蹤的對象,實際上也就是作者提出的第一個難點。
  • 網絡不可能提前知道要跟蹤的目標從而進行相應的訓練,如何使得網絡能夠識別出“臨時”挑選的目標。採用meta-learning的方法如何避免過擬合。
  • siam成功的地方在於將上述兩個問題轉化爲匹配問題,即在srch img中匹配exemplar,siam的問題在於網絡的判別性,即不會匹配到背景,另外exemplar是否更新,如何更新,尺度變換問題如何解決。

然後這篇論文對於這幾個問題的解決方案summary是:

  • 提出了target-guidance module(TGM)將exemplar圖像融合到檢測的feature map裏。
  • 在線學習Meta-learning對classification head微調。
  • 在線更新權重
  • anchored updating strategy減少Meta-learning的overfitting。


(突然發現寫blog還是挺累的,主要是好多paper細節筆者之前都沒深入思考過,暫時先寫到這吧,Martin組的那幾篇paper還沒介紹,等忙完期末再來更新,第一次寫文章比較水,讓大家見笑了,後面會越來越好的。最後,歡迎做目標跟蹤的小夥伴與我交流,我的郵箱lei_y 

@hotmail.com

 ,祝各位大佬科研順利!)

參考文獻

[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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章