單目標跟蹤小綜述


本文轉載自Smarter。

最近看了幾篇關於單目標跟蹤的paper,爲了方便本身梳理脈絡同時和你們交流討論,將一些重要的paper整理在這。

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


一. 關於單目標跟蹤

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

二. SiamFC

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

  首先簡單介紹下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也是相似獲得的。網絡

這裏有幾個細節須要注意,app

第一,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種尺度。ide

三. Siam系列

1. SiamRPNsvg

  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。


參考文獻

[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



備註:跟蹤

目標跟蹤交流羣

目標跟蹤、視覺跟蹤等更多最新技術,

若已爲CV君其餘帳號好友請直接私信。


我愛計算機視覺

微信號:aicvml

QQ羣:805388940

微博知乎:@我愛計算機視覺

投稿:amos@52cv.net

網站:www.52cv.net

在看,讓更多人看到  

本文分享自微信公衆號 - 我愛計算機視覺(aicvml)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索