庖丁解牛TLD(三)——演算法初始化 .

來源:互聯網
上載者:User

轉自:http://blog.csdn.net/yang_xian521/article/details/6957732

上一講我提到對於演算法的初始化工作主要是在tldInit這個函數裡實現的。主要分為如下幾大步驟,1)初始化Detector。2)初始化Trajectory。3)訓練Detector

1)初始化Detector

其中bb_scan為掃描grid地區,該函數輸入為boundingBox,輸出為一系列的RectBox,是根據boundingBox的大小參數對待搜素地區選取項目一系列的box作為備選的跟蹤地區,box的位置和尺度都有變化,和RectBox相應的尺度。但RectBox有6個參數,前4個分別為Rect的左上方座標(x1,y1)和右下角座標(x2,y2)。後兩個參數求大神解釋(PS:後來在fern函數裡找到瞭解釋,分別為指向對應尺度特徵的指標位置、每一行box的數量——用在搜尋鄰近box)!對於這個函數內部我還有一個疑惑,就是對ntuples函數功能的使用,哎,怎奈Matlab文法都不熟悉,只能慢慢啃了,感覺作者這裡就是把RectBox的左上方的所有可能的座標值傳入該函數,得到左上方座標位置的全部組合(不知道理解對了沒)。

接下來的工作時特徵的初始化,是在tldGenerateFeature函數裡實現的。這個函數相對獨立,作者這裡為了產生效果較好的隨機特徵真是煞費苦心,輸入的參數有兩個,一個是nTREE = 10,一個是nFEATURE = 13。輸出為nTREE組特徵,每組特徵為nFEATURE個點對,每一個點對有4個參數,分別兩點座標(x1,y1),(x2,y2),取值範圍為(0~1)其中第一個點的解析度為0.1,還不太明白這樣設計的原因,待進一步分析代碼,有高人指點一下更好。值得注意的是產生的點對不是橫座標相同x1
= x2,就是縱座標相同y1 = y2。這裡用圖片顯示一組特徵,線段的兩個端點

下一步工作為初始化detector。這個功能是用強大的fern函數寫的,該函數有多個功能,根據傳入參數的標誌分別可以實現clear操作、init操作、update操作、evaluate操作、detect操作、get pattern操作。fern函數是用c寫的,混合編程沒有弄的太明白,還沒能調試一下看看,只能看代碼猜。在初始化detector的工作裡,用到的是init操作。

2)初始化Trajectory

這部分沒有什麼要說明的,都是些零碎的初始化工作,matlab裡面對一些必要的變數開闢一些空間和定義一些變數的值。具體分析Trajectory的工作的時候可以具體再分析

3)訓練Detector

首先得到Target,作者注釋說該Target只是用來顯示,有待我後續驗證。得到Target要調用函數img_patch,img_patch函數是獲得一幅映像中目的地區域box的像素資訊patch。

接下來產生正樣本資料集,調用tldGeneratePositiveData。其中第二個參數為RectBox和box的重複地區比例資訊,儲存在overlap參數中,由函數bb_overlap得到。tldGeneratePositiveData函數首先根據overlap的比例資訊選出重複地區比例大於60%並且前num_closet  = 10個的最接近box的RectBox,相當於對RectBox進行篩選。並通過bb_hull函數得到這些RectBox的最大邊界。接下來的工作比較重要,要得到Pattern,調用的函數為tldGetPattern。初始化的工作就是對最接近box的RectBox地區得到其patch,然後調用tldPatch2Pattern將像素資訊轉換為Pattern,具體的說就是歸一化RectBox對應的patch的size(放縮至patch_size
= 15*15),將2維的矩陣變成一維的向量資訊,然後將向量資訊均值設為0,調整為zero mean and unit variance(ZMUV),這個程序呼叫函數tldPatch2Pattern實現。接下來處理RectBox最大邊界的模糊資訊,再次用到img_patch函數,但這次調用的函數有很大的不同,還沒太理解作者要做什麼啊,怎麼感覺還有平移旋轉矩陣都出來了,暈啦(求高人指點)。該函數最後返回3個參數,pX為處理後的RectBox最大邊界處理後的像素資訊,pEx最近鄰的RectBox的Pattern,bbP0為最近鄰的RectBox。

然後再產生負樣本資料tldGenerateNegativeData。得到遠離box(重複地區比例小於20%)的num_patches = 100個Pattern儲存到nX中,隨機選中num_patches = 100個RectBox得到對應的patch儲存到nEx中。這裡調用了fern(5),即該函數的get pattern操作。

接下來對負樣本進行分類,分類到訓練集Training Set和驗證集Validation Set中去。

接下來使用Training Set進行訓練,先調用fern(2),更新,然後調用tldTrainNN最近鄰訓練資料。

接下來評估驗證集Validation Set的閾值。調用tldNN驗證。

 

至此,初始化的工作基本完成,限於本人水平有限,只能先對函數有個大概的認識,深深覺得先要靜下心來把訓練的演算法搞清楚,再回過頭來再看一編代碼。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.