GOTURN——Learning to Track at 100 FPS with Deep Regression Networks


文章的題目叫:《Learning to Track at 100 FPS with Deep Regression Networks》
算法簡稱:GOTURN(Generic Object Tracking Using Regression Networks)
作者是斯坦福的David Held
文章以及附件:http://davheld.github.io/GOTURN/GOTURN.html
算法源碼:https://github.com/autocyz/GOTURN

1、算法速度

當我第一眼看到文章題目時,真的被嚇一跳,用深度網絡做跟蹤能達到100FPS?
are you kiding?
再一看, 哦,原來是在GPU上跑的。
But,即使是GPU這也還是很快啊,別的用深度網絡做跟蹤的能達到10FPS就very well了!

在看文章內容之前,咱們先看看這個算法的速度到底是怎樣的。引用作者中的內容:

On an Nvidia GeForce GTX Titan X GPU with cuDNN acceleration, our tracker runs at 6.05 ms per frame (not including the 1 ms to load each image in OpenCV), or 165 fps. On a GTX 680 GPU, our tracker runs at an average of 9.98 ms per frame, or 100 fps. If only a CPU is available, the tracker runs at 2.7 fps.

好一點的GPU,能達到165fps;稍微遜色一點的GPU,能達到100fps;不用GPU呢,2.7fps(對於用CNN做跟蹤的,的確是很不錯的速度了,鄙人看過一個CNN做跟蹤的算法用好的GPU,也才7fps)

  最近親自跑了一下,發現速度確實可喜!!!

2、算法整體框架:



圖1 算法整體框架1

整個算法實現的框架如上圖:作者將上一幀的目標和當前幀的搜索區域同時經過CNN的卷積層(Conv Layers),然後將卷積層的輸出通過全連接層(Fully-Connected Layers),用於迴歸(regression)當前幀目標的位置。整個框架可以分爲兩個部分:
- 1、卷積層,用於提取目標區域和搜索區域的特徵
- 2、全連接層,被當成一個迴歸算法,用於比較目標特徵和搜索區域特徵,輸出新的目標位置

作者對網絡的訓練是offline的,在跟蹤的時候沒有online update的過程。這也是算法速度足夠快的一個重要原因,把耗時的計算過程都離線做好,跟蹤過程只有一個計算前饋網絡的過程,



圖2 算法整體框架2

3、算法實現細節

3.1、算法輸入輸出形式

輸入:
在第t-1幀中,假設目標所在位置爲(cx,cy),其大小爲(w,h),則提取一塊大小爲(2w,2h)的圖像塊輸入到CNN中。
在第t幀中,也以(cx,cy)爲中心,提取大小爲(2w,2h)的圖像塊,輸入到CNN中。

輸出:
輸出目標在第t幀中左上角和右下角的座標。

3.2、網絡結構

見圖1。
網絡的卷積層採用的是CaffeNet的前五層(caffenet:
https://github.com/BVLC/caffe/tree/master/models/bvlc_reference_caffenet)。
並在imagenet上進行了預訓練。

後面是3層全連接層,每層都有4096個結點,全連接層之後是一個只有四個結點的輸出層,用於輸出目標左上、右下的座標。

3.3、網絡的訓練過程

這篇文章的訓練方法比較有意思,在看他如何訓練前,先看作者的一些關於跟蹤視頻序列性質的研究:

對於跟蹤問題,一般的當前幀目標的位置和尺度都與上一幀是有關係,這個關係到底是怎麼樣的暫時沒人分析過,作者通過對視頻序列中的groundtruth進行研究發現,當前幀目標的位置和尺度變化與上一幀的目標存在着某種分佈關係,具體分析如下:

cx=cx+wΔxcy=cy+hΔyw=wγwh=hγh
上述描述中,cx,cy,w,h 代表的是上一幀目標的位置和大小,cx,cy,w,h 代表當前幀目標的位置和大小,Δx,Δy,γw,γh 代表目標位置和大小變化的程度(比例)。
上述公式可以寫成如下形式:
Δx=cxcx/wΔy=cycy/yγw=w/wγh=h/h
作者通過實驗發現,這四個變化因子都符合laplace分佈,laplace分佈的概率密度函數爲:
f(x|μ,b)=12bexp(|xμ|b)
其中μ 是位置參數,b 是尺度參數,這個分佈的期望E(x)=μ ,方差爲D(x)=2b2 ,分佈示意圖如下:


圖3 laplace分佈示意圖

作者通過統計實驗發現上述的四個參數的分佈圖像如下:


圖4 作者實驗驗證laplace分佈

觀察上述分佈可以發現,ΔxΔy 符合均值爲0,尺度爲1/5的laplace分佈,γwγh 符合均值爲1,尺度爲1/15的laplace分佈。

  有了上述發現,作者在訓練網絡時,對數據進行了人工擴充(data augmentation),如圖4,在訓練階段,對目標的位置和尺度添加符合上述分佈的轉換(shift),爲了避免尺度變化過大對網絡造成不利影響,其限制了尺度變化範圍γw,γh(0.6,1.4)



圖5 video data augmentation

另外,他不僅對視頻序列進行訓練,還對一些單幀圖像也進行了訓練,實現方法類似於上述的視頻數據的data augmentation過程,其對標有groundtruth的圖片隨機進行位置和尺度的變換,變換的參數也符合上述的laplace分佈



圖6 image data augmentation

4、擴充實驗

作者做了非常多且非常細緻、嚴謹的實驗,每個實驗都有理有據,實驗設置的條件也合情合理,且每個實驗都驗證了不同的條件或者情形。

一、data augmentation對算法的影響



圖7 data augmentation對算法的影響

作者發現,batch size取50,augmented data的個數可以去取0~49,至少保留一個真實樣本(因爲augmented data都是從這個真實樣本變換得來的)。觀察上圖可發現,性能最好的是batch中有49個augmented data只有一個real data,但是實際上當augmented data的數量高於20的時候,性能基本保持不變了。
作者文章使用的batch size是50,作者對每個圖像進行了10倍的data augmentation。

二、全連接層個數對算法的影響



圖8 全連接層個數對算法的影響

實驗發現,全連接層個數爲3時,效果最好。(這說明作者全連接層個數不是亂取的,是有理有據的)

三、多個因素對整體效果的影響



圖9 多個因素對整體效果的影響

作者還做了損失函數、motion smoothness (data augmentation)、image data對整體性能的影響,最後發現使用L1 loss + motion smothness + image training + video training是效果最好的。

四、泛化性能實驗



圖10 泛化性能實驗

隨着訓練視頻的增加,算法的泛化性能越好。

參考資料:

1、Learning to Track at 100 FPS with Deep Regression Networks
2、Learning to Track at 100 FPS with Deep Regression Networks - Supplementary Material
3、拉普拉斯分佈

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