轉自:http://blog.csdn.net/ben_ben_niao/article/details/51364323
上次介紹了SRDCF算法,發展歷史軌跡為CSK=>>KCF/DCF/CN.鄙人首先介紹最基本的CSK算法,其實在上一篇已經提過,但是原理,思路講的不清晰,這次爭取把思路講清楚。
CSK:[paper:Exploiting the Circulant Structure of Tracking-by-detection with Kernels(作者和KCF/DCF同一個作者)]
- 文章特點:
- 輸入:整個候選search區域的raw pixel(作為特征,並不是每個候選框),label(y_i),label為符合Gauss分布的連續取值
- 目的:訓練一個分類器,學習分類器的權重W。
- 求解分類器的權重W,探究了subimage_window和circular struct以及kernel的關系,利用這個關系引入kernel Trick.
- 利用cirlular matrix和來求解分類器的權重,利用FFT以及循環矩陣的性質,避免了求W時的矩陣逆運算。
- 輸出:相對平移量,實驗選區響應值最大的位置作為目標移動的大小。
- 缺點:
- scale問題。
- 循環矩陣bounding效應(SRDCF解決)。
- 輸入為raw gray pixel(KCF,CN,DeepSRDCF豐富了特征的選取).
- details
- 首先,候選框subimage_window存在很多重合,計算特征導致冗余。所以為了滿足一定的速度要求,無法Dense sampling,只能random sampling少許,導致結果不好。
- 發現,所有subimage_window可以有候選區域和循環矩陣來表示。設候選區域的特征連接為vector:V,循環矩陣為如下:
all_subimage_window = C(u)V,其實就是一個kernel變換,從候選區域中得到子區域。其實C(u_i),為(1,1,0. ...)等。其實這里作者只是以此說明這個關系,具體在代碼中使用時卻沒那么復雜。
有了上面的發現,則回到tracking問題,跟蹤其實就是訓練一個分類器:
其中w為分類器的系數,需要學習。引入kernel trick(get the subimage_window):
如果式(1)中的loss function:L取二范數距離,則求解的結果為:
進而轉化為求a_i,公式如下:
其中最為關鍵的是求K為循環矩陣,而選擇好對應的核變換函數(線性核,高斯核,多項式核)即可求K,從而得到a_i,及分類器的權重。利用FFT變換,將卷積變換為頻域的dot-product,加快速度。
- 核函數的選舉有多種,具體看原paper.所以通過這一步一步從而求解出分類器。
KCD/DCF[paper:High-Speed Tracking with Kernelized Correlation Filters],和CSK是同一個作者
這篇文章核心算法同CSK,只是從特征和多尺度以及核變換進行了改進。
- 在CSK的基礎上解決了如下幾個問題:
- 輸入為multi-channels(可以是彩色,可以是Hog),並定義了multi-channel特征的連接方法。
- 采用不同函數,Gauss核函數,paper叫KCF,采用linear kernel時,paper取名叫DCF,其中DCF由於采用的linear-kernel,所以multi-channel合並時有優勢,速度比KCF快,效果差一點點。
- detail
多通道特征連接,由於卷積在頻域是dot-product的求和,所以將不同channels的特征vector連接在一起為一個vector即可。multi-channel特征可以是彩色,也可以時Hog和及其方向的不同channel.如果時Gauss核(KCF)則核函數計算如paper中式(31),如果時線性核(DCF)則根據式(32)計算。paper中分析了速度方面的影響,linear-kernel的DCF更簡單,所以速度更快。
CN[paper:Adaptive Color Attributes for Real-Time Visual Tracking]
- 在CSK的基礎上,將輸入變為11個顏色空間,具體略
SRDCF見以前的博文
- 在kcf上解決scale[多尺度搜索]和bounding effect[加入懲罰項]
DeepSRDCF
- 在SRDCF基礎上 用CNN來提取特征[CNN第一層輸出作為特征]