Fully-Convolutional Siamese Networks for Object Tracking
這兩年可以說deeplearning已經佔領了visual object tracking這個領域,但是對於跟蹤問題來說,這些基於DL的做法雖然能夠很好的提升跟蹤的效果,但是在時效性這一方面卻做的很差,這是因爲DL複雜的模型往往需要很大的計算量,尤其是當使用的DL模型在跟蹤的時候對模型進行更新的話,可能使用GPU都沒法達到實時。今年出現了一些使用CNN進行跟蹤,同時又具有很高的效率的跟蹤算法,比如今年ECCV的GOTURN(我的這篇博客裏進行了介紹,http://blog.csdn.net/autocyz/article/details/52648776),以及我將要介紹的這篇《Fully-Convolutional Siamese Networks for Object Tracking》。
文章題目叫:《Fully-Convolutional Siamese Networks for Object Tracking》
算法主頁:http://www.robots.ox.ac.uk/~luca/siamese-fc.html
code:https://github.com/bertinetto/siamese-fc
一、算法總體框架
圖1 算法總體框架
圖中z代表的是模板圖像,算法中使用的是第一幀的groundtruth;x代表的是search region,代表在後面的待跟蹤幀中的候選框搜索區域;
從圖一和文章題目我們可以很容易理解算法的框架,算法本身是比較搜索區域與目標模板的相似度,最後得到搜索去區域的score map。其實從原理上來說,這種方法和相關性濾波的方法很相似。其在搜索區域中逐點的目標模板進行匹配,將這種逐點平移匹配計算相似度的方法看成是一種卷積,然後在卷積結果中找到相似度值最大的點,作爲新的目標的中心。
上圖所畫的
二、具體實現
1、損失函數
在訓練模型的時肯定需要損失函數,並通過最小化損失函數來獲取最優模型。本文算法爲了構造有效的損失函數,對搜索區域的位置點進行了正負樣本的區分,即目標一定範圍內的點作爲正樣本,這個範圍外的點作爲負樣本,例如圖1中最右側生成的score map中,紅色點即正樣本,藍色點爲負樣本,他們都對應於search region中的紅色矩形區域和藍色矩形區域。文章採用的是logistic loss,具體的損失函數形式如下:
對於score map中了每個點的損失:
其中
上面的是score map中每個點的loss值,而對於score map整體的loss,則採用的是全部點的loss的均值。即:
這裏的
有了損失函數,那就可以用SGD對模型進行訓練啦~~
2、訓練所用數據庫
與以前的算法不一樣的是,起訓練的數據庫並不是傳統的VOT,ALOV,OTB這三個跟蹤benchmark,而是ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中用於視頻目標檢測中的視頻,這個數據集一共有4500個videos,4500個,4500….視頻的每一幀都有標記的groundtruth,4500是什麼概念呢,VOT,ALOV,OTB這三個數據集加起來也就不到500個視頻,500個,500…..
3、網絡結構
整個網絡結構類似與AlexNet,但是沒有最後的全連接層,只有前面的卷積層和pooling層。
圖2 網絡結構
整個網絡結構入上表,其中pooling層採用的是max-pooling,每個卷積層後面都有一個ReLU非線性激活層,但是第五層沒有。另外,在訓練的時候,每個ReLU層前都使用了batch normalization,用於降低過擬合的風險。
4、一些實現細節
- 訓練採用的框架是MatConvNet
- 訓練採用的優化算法就是batch SGD,batch大小是8
- 跟蹤時直接對score map進行線性插值,將17*17的score map擴大爲272*272,這樣原來score map中響應值最大的點映射回272*272目標位置。
5、算法測評結果
圖3 OTB13
圖3 VOT14