TLD 学习心得
TLD过程
{
初始化部分:
{
初始化数据结构(扫描窗口、随机树FERN结构);
利用第一帧图像和初始BB获得各种正负样本,用这些样本训练一个
分类器。
}
重复处理帧序列部分:
{
跟踪部分:
{
方差约束(积分图像)->随机树约束->最近邻约束->DBB。
}
检测部分:
{
金字塔LK->均值约束->模板匹配约束->TBB
}
整合DBB和TBB得到当前BB。
学习部分:
{
利用当前帧图像和当前BB获得各种正负样本,用这些样本更新分类器,更新数据结构。
}
}
}
初始化数据源,即是从文档中获取,还是从摄像头获取。(tldInitSource)
获取初试矩形框的大小和第一帧图像(tldInitFirstFrame)
产生不同尺度的scanning window(bb_scan)和一个有着十棵随机树的森林,每棵树对应了13对随机点比较( tldGenerateFeatures),将不同尺度的scanning window 和森林进行关联(fern(1)),即将比较点换算到具体的scanning window中去。通过将scanning window和初始矩形框进行overlap比较获得相应的正负样本集(tldGeneratePositiveData、tldGenerateNegativeData),然后用正负样本集更新Weight、nP、nN。并通过近邻分类器得到PEX、NEX。
tldProcessFrame
在LK光流跟踪时,选取了100个点进行跟踪,选取距离小于阈值而相关系数大于阈值的点(阈值时取自各自的均值),根据这些点来确定一个矩形框。
检测时,在满足方差约束的条件下,统计各个scanning window对应的Weight,保留满足大于某个阈值的window。在此基础上,再和PEX、NEX进行相似度计算,进一步筛选掉一部分window,余下来的window就是检测得到结果。显然,检测得到的window可能不止一个。然后对这些window进行聚类。
整合检测和跟踪得到的结果。根据DT、TR以及相应的约束,确定当前帧最终的BB。
在一定的学习条件下学习时(TldLearning),需要根据获得的BB生成正负样本集,更新Weight、nP、nN以及PEX、NEX等数据机构。
Weight、nP、nN是每棵树的二进制编码为下标的统计信息。
patch(scanning window)和 Weight、nP、nN是一一对应的。