以下内容有大量的英文(如bb-指bouding box等),就不翻译了,如果你阅读了OpenTLD的matlab版本,便会很清楚的它们的意思。
首先要知道,TLD是通过在线对目标的不断学习以更新Detector中的特征向量的(这里的Detector主要指NN,因为Fern不更新特征向量,更新的是后验概率)。
具体来说,NN的正样本特征向量(matlab代码中叫pattern)是在tldLearning中更新的。
Pattern的获得方法是:对bb中的image进行缩放(到15*15像素),并减去均值。作者注释中说要归一化为zero mean and unit variance(ZMUV)实际上指做到了zero mean,并没有做到unit variance。zero mean是减少不同光照度的影响。
尽管tldDetector已经通过tldNN对bb的pattern进行了分类,但是由于integrator的存在,使得进入tldLearning的bb已经不是Detector的bb了,而是Tracker的bb或者是Tracker和Detector取平均的bb。因此该bb在进入tldLearning时,需要再次经过tldNN。如果该bb是被tracker或tracker+detector指定为valid的,那么若此时被判为negative,P-Expert就要把它纠正为positive,作为pEx,更新NN;如果~valid,却被判为positive,N-Expert就要把它纠正为negative,作为nEx,更新NN。
可以看出,不是每个进入到Learning的bb都可以作为更新NN的pattern的。Why?
Zdenek在phd论文中给出的解释是:
Model update: To integrate a new labeled patch to the object model, the following strategy is used.The patch is first classified by the NN classifier and added to the collection only if the classification is incorrect.
This strategy leads to a significant reduction of accepted patches [Aha 91] at the cost of coarser representation of the decision boundary.
这样做是可以理解的。如果不这样的话,NN中的样本数量(也可以理解为特征空间的维度)将会非常大,求解输入样本与特征样本之间距离的计算将会非常大(一是每个样本的维度大,pEx是1*255的向量;二是样本不断增加,特征空间的维度变大)。
个人觉得,NN中存在大量的相似的特征向量(比如说car chase那个用例),而所有的特征向量可以利用PCA降维,这样可以提高运行效率。
关于PCA,资料很多,笔者也是现学,参考了以下内容:
1. Steven Leon版的《线性代数》,看p207的应用2(相关矩阵和协方差矩阵),以及第6章的特征值分解
2. Duda的《模式分类》,有详细的理论模型
3. http://www.cnblogs.com/zhangchaoyang/articles/2222048.html 对PCA描述的很简明扼要
4. http://www.cnblogs.com/90zeng/p/PCA.html 有图
5. http://blog.csdn.net/zouxy09/article/details/45276053 以人脸识别中的特征脸为例
6. http://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_tutorial.html#face-recognition OpenCV官方对人脸识别的描述
7. http://guoming.me/face-recognition-with-opencv/ 对OpenCV官方版的翻译