1. 程式人生 > >GOTURN——Learning to Track at 100 FPS with Deep Regression Networks

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進行研究發現,當前幀目標的位置和尺度變化與上一幀的目標存在著某種分佈關係,具體分析如下: 
[Math Processing Error]
cx′=cx+w⋅Δxcy′=cy+h⋅Δyw′=w⋅γwh′=h⋅γh
上述描述中,[Math Processing Error]cx,cy,w,h代表的是上一幀目標的位置和大小,[Math Processing Error]cx′,cy′,w′,h′代表當前幀目標的位置和大小,[Math Processing Error]Δx,Δy,γw,γh代表目標位置和大小變化的程度(比例)。 
上述公式可以寫成如下形式: 
[Math Processing Error]
Δx=(cx′−cx)/wΔy=(cy′−cy)/yγw=w′/wγh=h′/h
作者通過實驗發現,這四個變化因子都符合laplace分佈,laplace分佈的概率密度函式為: 
[Math Processing Error]
f(x|μ,b)=12bexp(−|x−μ|b)
其中[Math Processing Error]μ是位置引數,[Math Processing Error]b是尺度引數,這個分佈的期望[Math Processing Error]E(x)=μ,方差為[Math Processing Error]D(x)=2b2,分佈示意圖如下: 

 
圖3 laplace分佈示意圖 

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

 
圖4 作者實驗驗證laplace分佈 
觀察上述分佈可以發現,[Math Processing Error]Δx和[Math Processing Error]Δy符合均值為0,尺度為1/5的laplace分佈,[Math Processing Error]γw和[Math Processing Error]γh符合均值為1,尺度為1/15的laplace分佈。

  有了上述發現,作者在訓練網路時,對資料進行了人工擴充(data augmentation),如圖4,在訓練階段,對目標的位置和尺度新增符合上述分佈的轉換(shift),為了避免尺度變化過大對網路造成不利影響,其限制了尺度變化範圍[Math Processing Error]γ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、拉普拉斯分佈
--------------------- 
作者:autocyz 
來源:CSDN 
原文:https://blog.csdn.net/autocyz/article/details/52648776 
版權宣告:本文為博主原創文章,轉載請附上博文連結!