看完了ECCV2016 person reID相关的论文,现在开始看一些经典的reID文章,并尝试着复现其中一些的结果。
主要思想之一(提取特征方面): Local Maximal Occurrence Feature
首先,针对不同相机照明度不同的问题,作者提出使用Retinex algorithm来作预处理Retinex algorithm
论文链接,有效解决光照问题。然后在预处理后的图像的基础上用HSV color 直方图提取颜色特征。除了颜色特征,作者还提取纹理特征,用的是 Scale
Invariant Local Ternary Pattern (SILTP) (可以看做是LBP的改进,LBP对噪声敏感,SILTP克服噪声影响)。
然后就是大头了,LOMO特征提取方法(用于解决不同相机的角度变化):
作者受这两篇文章把image分割成水平6个stripe然后分别统计每个stripe的直方图特征的方法的启发 paper1 [paper2]( Person re-identification
by probabilistic relative distance comparison.) 提出用有重叠的滑窗来抽取特征,一共三个特征,两个不同scale的SILTP,一个HSV特征,然后对水平的滑窗的特征进行对比,对于三个特征,取所有水平的滑窗中相应特征的最大值。如上图所示。这样既可以应对视角变化,也可以捕捉局部特征。作者也考虑到了多尺度信息,所以对原始图像做了两次2x2 average pooling的降采样,对三个图像都用LOMO提取特征。然后三个图像的特征拼接起来得到一个特征向量。对这个向量用log变化来抑制特别大的值,接着再归一化到单位大小。
主要思想之二(度量学习方面):Cross-view Quadratic Discriminant Analysis (XQDA)
作者是受Bayesian face recognition和 Large scale metric learning from equivalence constraints这两篇文章的启发,提出这个idea,我看了后面那篇paper,主要是里面提到的KISSME算法,这里简单提一下。
根据有标注数据的label,作者把每个sample分成两类,相似的(H1)和不相似的(H0),然后用下面这个式子来衡量不相似性(可以理解为距离?):
其中Xij = Xi - Xj,p代表概率分布函数,p(*)代表在参数theta下,x = xij的概率。作者假设xij服从多元高斯分布:
上面这个
是所有属于同一个人的sample们的协方差矩阵,另一个同理是相互之间不属于同一个人的sample们的协方差矩阵。
上面这个式子可以这样理解,在某一个xij下,当两者相似的概率大于不相似的概率时,δ(xij )的值就小,对应两个x越相似。
由于log的存在,式11可以化为:
常数项对结果没有影响,所以可以进一步化为:
所以距离度量函数就是下面这个式子:
KISSME这个idea的好处就是,学得这个距离度量的计算速度很快,因为不用一次次迭代。
弄明白KISSME后,我们再来理解XQDA。
同KISSME,XQDA定义了两个概率密度函数:
然后距离的度量如下:
也即:
但是呢,通常情况下,原始的x的维数非常大,导致协方差矩阵很大,有人采用先PCA降维,再在降维后的子空间上求协方差矩阵的方法来做,但是这样做没有考虑到distance metric learning的因素进去,所以不好。
当然,作者的想法也是先降维,但不是用PCA的方法,而是用fisher的方法,这里附上关于fisher的两个链接:资料1 资料2
其实fisher和PCA差不多,熟悉PCA的人都知道,PCA其实就是在寻找一个子空间。这个空间怎么来的呢,先求协方差矩阵,然后求这个协方差矩阵的特征空间(特征向量对应的空间),选取最大的特征值对应的特征向量组成特征子空间(比如说k个,相当于这个子空间有k维,每一维代表一个特征,这k个特征基本上可以涵盖90%以上的信息)。那么我们把样本投影在这个子空间,原来那么多维的信息就可以用这k维的信息代替了,也就是说降维了。至于PCA为啥要用求协方差矩阵然后求特征子空间的方法,这个数学上有证明,记得在某篇文章上看过,有兴趣的可以找找,看看证明。
那么fisher空间又是怎么一回事呢,其实fisher判别和PCA是在做类似的一件事,都是在找子空间。不同的是,PCA是找一个低维的子空间,样本投影在这个空间基本不丢失信息。而fisher是寻找这样的一个空间,样本投影在这个空间上,类内距离最小,类间距离最大。那么怎么求这个空间呢,类似于PCA,求最大特征值对应的特征向量组成的空间。 当我们取最大几个特征值对应的特征向量组成特征空间时(这里指出,最佳投影轴的个数d<=c-1,这里c是类别数),最佳投影矩阵如下:
但是在这里的假设下,不适用类内离散度和类间离散度这两个概念,因为这里的两个类的均值都是0,会导致待优化的式子:
为定值。
作者在这里使用方差来代替离散度(方差本来就能表示离散度不是么-_-#,好吧我的理解是fier方法中的离散度和方差还是有些不同的)。所以待优化的式子如下所示:
其中
整个目标函数如下所示:
等价于:
和LDA方法中的广义特征值分解相似,下式:
的最大特征值对应的特征向量w1,第二大特征值对应的特征向量w2。。。就组成了子空间W = (w1 , w2 , . . . , wr ) ,然后就可以对原始数据做投影,然后用类似4式来计算distance
实际计算
当然,上面都是理论分析,在实际计算中还会存在一些问题,如计算复杂度大,协方差矩阵可能是奇异的以及如何选择子空间W的维数,作者一一提出方法解决,详细可看原文chapter 4.3