說一說最近很火的離線跟蹤

在跟蹤領域近幾年correlation filters統治的大環境下,深度學習方法始終在accuracy和fps上被壓制。然而,隨著CFCF奪下VOT17冠軍,深度方法最近又開始蠢蠢欲動了,其實拋開效果不談,深度方法一直都是很有潛力和研究價值的一個分支。

首先要闡明一點,深度跟蹤≠離線跟蹤,很多的深度方法不是training offline而是online finetune的,正是由於online finetune,造成了速度慢,過擬合的大問題。例如MDNet,Deeptrack,還有Naiyan Wang早期的一些工作,具體就不介紹了。

至於離線跟蹤的工作,現在還屈指可數。他的本質特點有幾條是不會改變的:

  1. 網路在training video set上訓練,然後對未知視頻序列,跑一次前向計算就出結果。(這個特點讓它可以運行的比較快甚至是實時的)
  2. 從跟蹤問題中抽離出更加一般的學習問題。這個其實很重要,所有離線方法學習的離線問題都不是跟蹤問題本身(好比輸入一幀圖像就能得到目標位置,我肯定不相信有這樣的模型存在,因為那麼多物體,你怎麼知道跟蹤那個。。。)所以,離線跟蹤在預測的時候還需要一個樣例輸入,而問題就變成了學習樣例和預測樣本之間的前後關係。例如,SiamFC就把問題轉換成similarity learning
  3. 必須是端到端的,也就是特徵提取和motion detect的誤差是一起反傳的,這顯然比傳統的先提特徵,再訓練檢測模型,好很多。後者兩個階段並不耦合,所以並不知道特徵的適用性。

為了理清離線跟蹤的timeline,我們按照時間順序介紹一下各個工作:

1.SINT,Siamese CNN(CVPR2016)

早期工作,主要是Siamese Network學習視頻中不同幀相似性的探索

2.GOTURN,SiamFC(ECCV2016)

這倆放在一起是因為他們都是ECCV16的工作。兩篇paper的大體思路差不多,但細節實現上差了很多。

GOTURN

SiamFC

主要不同點我用圈圈標了一下,以便觀看:

首先說說輸入,GOTURN的輸入是當前幀和前一幀的圖像,並且大小一致。而SiamFC的輸入是example image(127*127*3)和candidate image(225*225*3),論文當中說example image就是initial object appearence,也就是一個視頻中指定好的第一幀。

從這個輸入,可以看出兩篇論文核心思想上的差別,GOTURN主要學習視頻前後幀之間的運動關係,有點時序的感覺在裡面,然後根據前後幀的feature,直接回歸一個目標位置。SiamFC更像一個傳統CV的流程,我直接學習example image和candidate image各個區域的相似性(在φ空間當中),這裡還用到一個思想:卷積/相關操作即是一種信號相似性的度量。

再來看網路,GOTURN是卷積後接全連接層,SiamFC則是全卷積。我個人認為GOTURN的全連接層一直是這篇論文最大的敗筆,sptial information對於視覺任務實在是太重要了,可不能說拋棄就拋棄,尤其是跟蹤問題,讓網路估計最大響應點是很easy的事情,但是強行估計出四個數就很難了(況且估計最大響應點就相當於已經得出了四個數了),所以GOTURN拋棄了一種簡單的解法強行選擇了困難的,雖然速度是快,但是accuracy實在不堪入目。這也是GOTURN完敗給SiamFC的根本原因(個人觀點)。

最後看輸出,GOTURN的輸出是四維向量(x,y,width,height),SiamFC的輸出是17*17*1的score map,所以模型設計無論怎麼看,還是覺得SiamFC更合理一些。

兩個工作都證明了跟蹤任務是可以在一般數據集上離線訓練,並泛化到特殊視頻序列的,這也是他們最大的貢獻。另外實在忍不住吐槽一下SiamFC,前面的實驗都很嚴謹,結果最後對17*17*1的score map直接做了個bicubic插值就上採樣到原圖大小了,這也太。。。。。。。還是需要像C-COT,提高亞像素精度。

3.ACFN,CFNet(CVPR2017),DCFNet,CFCF(arXiv)

先講ACFN,這個工作一度看得我頭暈目眩,因為系統實在是太複雜了,可以看看下面這張圖

ACFN

其實從嚴格意義上講ACFN算是CF類的方法,不能算deep的,但是他確實也用到了深度結構做離線訓練了。

大概思想就是,既然我不知道哪個correlative filter最適合這個物體(因為物體老是旋轉,變換尺度,遮擋)那我就每種都弄一個,然後用一個網路去選擇最好的。論文中根據,2個特徵,2個核,13個尺度,5步延遲更新一共建立了260 (2*2*13*5)個correlative filter。同時訓練兩個網路,一個網路預測下一幀260個correlative filter的得分(這裡用到了LSTM),另一個網路根據得分預測該選哪些個correlative filter。

這個工作從跟蹤中抽離出來的一般問題就是:從以前幀物體的具體狀態(哪幾個correlative filter表現較好),來預測現在物體的狀態,從而決定選哪幾個correlative filter。好了,這種複雜工作只適合欣賞不適合follow,看完就散了吧。

接下來重點就來了,CFNet,DCFNet,CFCF都是對SiamFC的改進,三者都是把Correlation Filter作為一個Layer放到NN中,這樣高效的CF過程就嵌入到網路中,而且不破壞end-to-end傳誤差的良好性質。至於為什麼要這麼做,CFNet裡面有一句話說得很好:

也就是不加CF過程可能判別力會不夠。但文中也說了網路層數多的時候,加和不加不會有太大差別。

然後再來說說這三個方法,看似相同其實各有不同。

CFNet

CFNet是SiamFC作者本人的改進,我主要來講一下他的求導過程。很多看多了CF和求封閉解w過程的人,會被文中的求導弄懵。從上圖可以看到CF過程的輸出是w,而w又是NN中的變數,所以這裡是萬萬不能直接求封閉解的(不然就沒法反傳誤差了)。CF中的這一項

是網路中的隱藏約束而不是優化目標,這一點很重要。文中用了Lagrangian dual將最小約束轉化到等式約束,然後鏈式求導,數學技能max

比較神奇的是,因為自定義的y(Gaussian label)也是變數,所以y這個值居然也能優化。。。。不過文中也說了,優化y其實沒有任何幫助

DCFNet

DCFNet是CFNet的簡化版,從上圖紅圈部分可以看出,其實DCFNet就是把CFNet中空間域卷積的部分放到傅里葉域去做了,雖然速度是快了,但是會有嚴重的邊界效應,這是fft普遍缺陷。因為這裡w變成了中間量,CF的loss函數成了網路的優化目標,所以求導就很簡單了,這個求導甚至連我都能看懂:)

CFCF

這篇文章的作者可以說很機智很賊,從圖上看應該是照搬CFNet,然後用finetune的特徵強行套C-COT框架,以C-COT的統治力,難怪這哥們拿了VOT17的冠軍,也不足為奇。。。

這個感覺就好像是,我不會武功,但是我拿了屠龍寶刀,在武林大會擊敗各路豪傑,成為一代武林盟主。:)

未完待續


推薦閱讀:

淺談深度學習的技術原理及其在計算機視覺的應用
【小林的OpenCV基礎課 番外】卷積與濾波
讀論文系列:Object Detection NIPS2015 Faster RCNN
深度學習的「警察」與「小偷」
Rethinking ICCV 2017 [Part 1]

TAG:計算機視覺 | 目標檢測 | 深度學習DeepLearning |