一、背景简介
近年来,行人再识别问题(Person-reID)研究热度逐渐上升。与人脸识别相比,它在采集图像时不需要行人主动配合,在安防等领域具有极大的应用潜力。基于深度学习的行人再识别方法,在近几年快速进步,在绝大部分公开数据集上,深度学习特征均超过了手工设计特征。这篇文章的工作主要围绕利用如何更好地学习的深度特征,提高行人再识别的准确率进行。然而,这篇文章实际上没有具体针对行人再识别的特有问题进行分析、优化,笔者认为该方法在小数据集问题上,该方法具有一般性意义,并且,该方法对CNN特征的物理意义开展了一些有趣的思考。
二、Motivation
首先需要说明的是,SVDNet基于这样一个对CNN权向量的简单解读:假设CNN的一层网络,其输入是I,输出是O,权矩阵是W,那么O=W'*I运算是在做线性投影,而W中所含的权向量则是一组投影基向量。当训练一个用于提取re-ID问题中行人特征的深度卷积神经网络(CNN)时,与在其它所有典型的深度学习训练一样,通常所学到的权向量是“杂乱无章”的,这种杂乱无章体现在,网络同一层中的权向量,通常是存在较强的相关性(注意不是线性相关linear dependent)。这种相关性,对于特征表达可能会造成不必要甚至是非常有害的冗余。例如下图中,假设网络用于提取特征的特征层含有3个权向量,红色和粉色所代表的的权向量几何上更靠近,而蓝色的权向量相对较远,那么,当一个行人图像进入网络中后,它会最终投影到这3个权向量上,形成一个3维的特征,而在红色和粉色上的投影结果将会非常接近。这就使得,在蓝色上的投影结果相较之下无足轻重了,很有可能造成一些误判。
因此,我们希望对于特征表达层(该层的输出作为行人图像的特征),它的权向量是正交的。这里说远一点关于深度学习中的正交约束。其实,正交约束在深度学习中近几年并不少见。例如ICLR2016年的Reducing Overfitting in Deep Networks by Decorrelating Representations(arXiv:1511.06068),以及同样ICCV2017年的一篇工作arXiv:1511.06068。此外,诸如whitened network,以及ICML2017年的generalized whitened network,也都可以认为利用了正交化在深度学习种可能带来的好处。不过,值得注意的是,这些工作都是让把feature不同维度的值当成一个变量,希望不同维度上的变量是相互独立的。而SVDNet这篇工作避开了这个做法,希望权向量是正交的。在paper中,出于严谨的考虑,没有解释这两种做法的差异。笔者认为,这样做实际上是有巧妙意义的。受限于深度学习的训练方式,对特征施加正交约束时,只能在一个minibatch里去求feature的协方差矩阵,并要求该矩阵是对角阵,这种做法本身是无奈之举。而SVDNet这种做法避开了这个困难,它其实借助了这样一个思想:每一个权向量,都是相应特征相应维度上的模板(exemplar)或者代理(agent)。这种解读在最近的很多工作中都有所体现。
三、训练方法RRI
——如何在CNN训练中,对权向量施加正交约束
先说怎么做的,后面再解释为什么这么做。
做法非常简单,分为3步,称之为Restraint and Relaxation Iteration (RRI):
1、去相关——每次训练模型收敛之后,对特征表达层的权矩阵W进行奇异值分解,即W=USV',然后,用US去取代原来的W,这时,W变成了一个正交阵(每个权向量彼此正交),且新的权向量是原来权矩阵WW'的本征向量。经过这样一次去相关之后,原本已经收敛的模型偏离原先的局部最优解、在训练集上的分类损失变大了。
2、紧张训练(Restraint)——固定住步骤1中的W不更新,学习其它层参数,直至网络重新收敛。需要注意的是,在这种情况下,网络会收敛到一个次优解:因为它有一层的W是受限制。因此,在接下来,我们会取消这个限制,继续训练。
3、松弛训练(Relaxation)——在步骤2之后,取消W固定的限制,这个时候,网络会发现对于拟合训练样本会这个目标会有一个更好的解:请注意,仅仅是针对拟合训练样本这个目标。我们实验发现,这个模型使用在训练集上(包含全新的ID)时,它的泛化能力是相对较弱的。
而在步骤3之后,W里的权向量重新变的相关起来。因此,我们把这3步迭代起来,形成RRI,直最终收敛。
四、RRI中发生了什么?
在RRI中,每个Restraint阶段后,权向量被去相关了、W变成了正交矩阵、ReID的准确度提升了;而在每个Relaxation阶段后,权向量重新相关起来,ReID的准确度停滞甚至略微降低(相较于上一个Restraint)。但是,比较Relaxation阶段,我们可以发现,W正交度S(W)在提升,而Reid的准确度也在提升,直到二者几乎同时达到了收敛状态。见下图:
上图是本文最重要、最有趣的一张图,它对SVDNet这个方法的原理起到了一种“知其然、知其所以然“意义上的证明。图中S(W)——用来衡量W正交度的变量定义本文不再叙述,非常简单直观,关心的同学可以去查看论文。有趣的地方在于:紧张训练阶段,reID性能提升;而放松训练阶段,reID性能降低。这似乎与我们人类的学习规律类似:提倡张弛结合,紧张时进步,而交替地放松,是为了积累。
五、性能
SVDNet 方法的性能,在2017年初接近当时的state of the art。而且,为了方法的纯粹性,SVDNet没有采用除了“镜像”之外的任何图像增强,输入图像也是采用baseline模型的默认尺寸。具体性能比较见论文,这里仅展示一下在market-1501数据集上的对比。
采取时下常用的一些预处理及数据增强后,SVDNet水平进一步提高。例如在market-1501上,在采用256️128这样的图像尺寸之后,resnet-backboned SVDNet能够达到约84+%的rank-1准确度、65+%的mAP。进一步采用random crop数据增强后,能够达到88% R-1 accuracy和 68%的mAP。在DukeMTMC-reID数据集上,SVDNet的表现相对更为抢眼。
另外,值得一提的是,SVDNet在caffenet这种老古董网络结构上也取得非常不错的性能。这个特点在其他方法中通常是难以做到的(当然,知识蒸馏等方法或许也能达到)。
六、有趣的关键
——为什么用SVD来对W去相关
关于为什么用SVD来对W进行去相关,文中简单做了一些证明:任意两个样本x1和x2,给定它们在EigenLayer之前的特征h,考察它们在线性投影后的距离,用W(=USV‘)和US作为线性投影层的权矩阵,两种情况下,样本间的距离是严格保持不变的。而用其它一些去相关方法,样本间的距离发生改变,且实验验证均降低了“去相关操作”后的reid性能。详细实验和推导证明见论文。
文中关于上述保距去相关的证明公式非常明了,然而,“想”一个做法比“证明”一个做法远远要难的多。作者这个做法其实最早来自于一个直观解读:CNN的每个线性层把输入投影到了新的特征空间,CNN在训练过程中,学到了很有鉴别力的投影基向量,也就是W中的各个权向量。以及一个思考:如果CNN告诉我们,一组权向量非常好,但是,CNN有点语无伦次、重复累赘,能不能让CNN清晰地告诉我们,这组权向量所代表的那些投影基向量,其等效的本质(正交基)是什么?
举个极端的例子,假设某一层的权向量有3个,并且是是2维的,分别是v1=(0,1),v2=(0,1),v3=(1,0),显然,这个权向量结果是不合理的,因为肯定只需要2个权向量就足够了,那么,问题来了,CNN认为(0,1)和(1,0)两个投影方向上的结果是否同样重要呢?我们是否可以简单地保留v1和v3,直接丢掉v2呢?我们直觉上会觉得,不是这样的,CNN试图告诉我们,在(0,1)上的投影结果更重要,SVDNet中的这个去相关方法,就是将CNN学到的投影向量转换到一组正交基上、并完全尊重、采纳CNN学到的知识本质的方法。
PCA代替SVD,会更好吗?
关于SVD去相关,还有另一个有趣的讨论,是在paper 得到初审结果之后,一位审稿人提出的,而这个问题,也被不少读者提出:那就是,如果对W进行PCA,也能得到一个正交的矩阵,而且在其它数据处理的地方,经验通常是:PCA总是优于SVD。那么,对W进行PCA到底行不行?用W进行PCA会不会更好?笔者认为这是一个非常棒的问题。
首先,用PCA对权向量进行去相关,本身是完全可以的,正如文中对比的QR分解等方法一样。而且PCA去相关,同样可以嵌入到RRI之中,不断提高SVDNet的性能。笔者在rebuttal中,做了实验,用PCA代替SVD,能够获得仅仅轻微低于SVDNet方法的性能。但是,大家应该注意到,PCA和SVD虽然数学意义非常不同,但是,二者在具体运算上,是很相似的:PCA多一个0-均值化运算。而实际上,权向量本身是非常接近0均值的,因此,两种方法在最终效果上比较接近,其实是非常自然的。
然而,笔者还想指出,在SVDNet的去相关操作中,只有使用SVD是严格的、具有数学意义的,而PCA不是。首先,简单地来看文中的公式:用US去替代W是保证替换权矩阵后、任意两个样本的距离不发生改变,因此保留了CNN原有的鉴别能力,这是非常严格的。更重要的是,PCA和SVD在去相关时的数学意义完全不同,看如下的示意图:
假设CNN学到了一个2X2的权矩阵,即有2个权向量,分别是W1和W2。现在,我们分别用SVD和PCA对W这个矩阵进行处理,SVD会得到左边所示的两个绿色正交向量S1和S2,S1方向上的投影结果将会被乘以相对较大的权系数;PCA则会得到右图所示的两个红色正交向量(实际上,P1的向量长度会是0,即P1方向上的投影结果无足轻重)。在这个示意图中,显然,PCA是不合理的:如果CNN认为黑色的W1和W2是重要的投影方向,那么,直观上我们也能感受到,S1(或者P1)方向上的投影结果将是非常重要的。而且,PCA在得到P1和P2时,实际上不是把W1和W2当成两个向量来处理。PCA实际上是把W1和W2当成两个点的坐标,求这两个点散布最大的方向(P2>P1),这样做是缺乏数学意义的。
七、另一个直观解读
本文对CNN得权向量,除了做空间上的投影解读外,还暗示了一种解读,在文中受篇幅限制未能展示,那就是——权向量实际上是用于产生特征的模板。以caffenet为例,当我们采用FC7的输出作为特征时,实际上是在拿FC6的特征去与FC7的4096个模板进行相似性比较(向量内积运算),并将4096个相似值作为最终的特征。在这个意义上,SVDNet可以认为是让获取特征的模板变得更为丰富。利用Yosinski在2015年ICML[1311.2901] Visualizing and Understanding Convolutional Networks中提供的深度特征可视化工具,我们可以对最大激活指定神经元的输入进行可视化,从何直观感受一下这些潜在模板的真面目。
上图中,第一行展现的是5个高度相关的权向量所代表的的神经元所对应的模板图像,第二行展现的是正常训练方法中,挑选出的5个不相关权向量所代表的神经元所对应的的模板图像,第三行则是通过SVDNet训练方法后,任意的5个权向量对应的模板图像。一个直观感受是:在baseline方法中,隐含了大量高度相似的模板图像,而经过SVDNet之后,所有的模板变得不相像,因此特征更加丰富了起来。
八、在其它视觉任务上的推广
到这里,大家应该同意,SVDNet并没有专门针对行人的固有特点做量身定制的分析与优化。从上图,我们也可以直观感受到,SVDNet训练得到的神经元更加丰富,达到了的降低过拟合的作用。这种机制在其它视觉任务上或许也有一定的效果。我们还在探究之中。从目前的实验结果来看,SVDNet在分类任务上有一定的提高效果。在Cifar-10分类任务中,用resnet-20做baseline,rank-1 accuracy从91.8%提高到了93.5%。