Abstract
这是华中科技大学的一篇关于行人重识别的文章,去年挂在arxiv上,今年更新了第二版。文章表示目前大部分Person ReID的方法在人体特征学习时都倾向于选择part-base的方法去着重学习人体部件的特征,但是存在一个问题,这种方法忽略了不同部件之间的上下文信息和空间信息。所以在这篇文章中,作者提出引入LSTM构建一个端到端的特征学习框架用于行人特征学习,将人体的各个部件列举成为一个序列进行优化。同时作者也考量了将部件局部信息和全局信息组合的策略,最终还引入了ranking task(其实就是triplet loss)。所以Deep-Person这个方法最终包含了三条支路,作者也在主流的Person ReID数据集上测试并表示该方法能取得最优的结果。
Introduction
Person ReID任务中跨摄像头、背景复杂和姿态各异等因素构成了主要的难点,如何在这些复杂环境中学习到具有可区分性的人体特征信息一直是该领域的重要研究方向。从早期的手工设计特征算子到现在基于CNN模型的算法,如何学习到更鲁棒的特征一直是个难以突破的点。在基于CNN的方法中,特征学习可以归纳为三类:
- 全局的特征。
- 局部比如part-base导向的特征。
- 将全局特征和局部特征相组合(拼接)。
目前大部分方法使用ID-discriminative Embedding(IDE)的方法去优化网络,然后提取特征进行检索;这里面存在一个问题,IDE的优化过程只是针对于训练集的类别可分,在测试过程中行人重识别更多的是关注两张图像是不是同一个ID,所以IDE方法(其实就是以ID作为label的Softmax分类器)并不能很好地胜任Person ReID任务;度量学习解决了这个问题,通过构建二元组或者三元组然后结合正负样本对距离优化准则可以让同类型的样本在特征空间上相互靠近。所以结合以上两种Loss作为Person ReID的监督器是目前大部分论文的一个主要方法。
在这篇文章中,作者还额外引入了LSTM单元去学习人体的部件,而不是像之前大部分论文那样使用part-base的方法对每个部件都独立的优化训练,在LSTM单元中对于人体部件之间的关系可以引入额外的先验性知识进行监督学习。全局和局部特征都用于训练分类器,额外的还引入了triplet loss进行度量学习。网络的一个总体结构如下图所示:
归纳一下,本文的主要贡献点在于以下三点:
- 提出了一种时序学习的框架优化了part-base方法中对于局部部件信息的学习能力,增强了局部特征在行人重识别问题中的区分能力。
- 提出了一个三支路的特征学习框架并且平衡了两种监督器的优点,分别是局部和全局特征优化的分类器,还有就是基于度量学习方法的监督器。
- 在测试过程中,只需要对整体结构进行一次前向计算,GAP模块之前的网络结构共享了同样的参数,减少了模型的性能冗余问题。
Related Work
感兴趣可以阅读原文获取更详细的相关工作。主要可以分成三种方法去总结过往的Person ReID方法:
- Part-based person Re-ID approaches
- Approaches based on joint multi-loss learning
- Sequence modeling using LSTM
Architecture of Deep-Person
Overview of Deep-Person
Deep-Person这个方法主要关注了特征表征和特征学习两个问题,1)文章利用了全局和part-base的局部特征用于表征行人;2)基于Softmax和Triplet的监督器用来优化模型训练过程中的特征学习问题。
近几年,CNN-base的方法常用于学习图像的一些基本特征并能够将其有效的组合起来得到更高层次的语义特征,但是大部分时候学习到的特征其实是一整幅图相关的,一些局部区域的特征得不到很好的体现,局部的特征往往只是全局特征的组成部分。所以在这篇文章中作者提出了使用LSTM-base的RNN单元去学习人体的部件信息,因为不同的部件刚好可以被考虑成一个序列,引入了序列学习机制以后可以使得局部特征更加具有可区分性。同时,一个Triplet监督器的支路可以用来辅助学习,使得网络的特征学习过程中能够关注到如何让不同样本在特征空间上远离,而同一类样本在特征空间上聚拢。
最终文章中所提出的方法如上图所示,主要包含了两个不同的组成部分:
- Backbone Network三条支路共享权重,这部分结构主要用于学习一些low-level的图像特征;
- multi-branch的结构用于学习不同的high-level特征,主要考虑了不同类别的特征可区分性;
Part-Sequence Learning Using LSTM
part-base的方法可以使得模型学习过程中更加关注于局部特征,这在Person ReID任务中是被证明很有用的。大部分方法都是将人体分为头、肩、上半身、上腿部和下腿部,不同区域的部件往往使用一个单独的branch进行表示,然而这种方法有个问题那就是忽略了不同部件之间的关系,这种关系可以在特征学习过程中起到约束作用,能直接使得特征学习的结果更准确。人体的不同位置的部件可以通过一种先验性的知识将其组合成一个序列,通过LSTM方法可以使得这些局部特征能被空间上的上下文信息约束学习从而更进一步的被精炼学习。LSTM的单元结构如下所示:
为了获得空间上下文信息,每一个部件的局部特征都从Backbone Network的输出特征上直接获取,如同第一张图中的所示,针对不同的部件,这里使用一个1xW的average pooling kernel去提取特征向量,如同下图所示:
然后如同本文第一张图所示,对于每个部件提取得到的特征向量,作者使用一个two-layer Bidirectional LSTM进行序列学习。最后,这些特征向量在组合拼接到一起作为part-base的人体表征,使用一个Softmax分类器对这部分特征进行分类学习。
Global Representation Learning
对于一些场景,比如两个人穿着同样的衣服,part-base的方法并不能很好的学习到一些具有区分性的特征,这种情况需要更全局的特征比如外形等进行区分,所以全局特征的重要性得到了体现,这类特征往往包含了更加高层次的语义信息,比如形状。所以在之后,一个GAP单元和FC单元用来提取人体图像的高层信息并编码,最后使用Softmax分类器用于训练。
Deep Metric Learning with Triplet Loss
前两节中主要讨论了基于全局特征和局部特征的模型结构,在这一部分,作者引入了第三个分支即度量学习策略用于不同样本、同样本之间的特征距离学习。在这个分支中,GAP模块作用于上得到全局的特征信息。对于这个特征三元组,作者使用了一种改进的Triplet Loss进行训练,其主要思想为,对于一个batch的样本,首先找出所有的positive-anchor对,然后构建一个特征距离矩阵,按距离最近对所有的negative-anchor对排序,从距离最近开始选取数量与positive-anchor对数量一致的样本对作为negative-anchor对进行学习。
Model Training
在学习过程中,对于全局特征和局部特征的分类器,作者定义分类损失函数如下:
其中表示第i个样本特征,表示第i个样本的类别,是一个batch中的样本个数,和表示的是学习过程中的权重weight和偏差bias。和分别表示局部特征和全局特征的分类损失,表示的是Triplet Loss。最终联合训练的Loss公式如下所示:
Experiments
Implementation Details
文章使用了PyTorch作为训练框架,然后主干网络为ResNet50(ImageNet pretrained),丢弃最后的GAP层和FC层之后剩余网络作为上文提到的Backbone Network,通道数为2048,BLSTM的隐藏单元数设置为256,根据网络能接受的输入,在本文第一张图中的H为8,也就意味着输入行人样本的高为256。在数据输入部分,首先所有的输入样本都被resize到256x128,然后使用scale为[0.64, 1.0],aspect ratio为[2, 3]的random crop方式去做数据增强,最后将crop出来的图像块再resize到256x128,并且使用了概率值为0.5的随机水平翻转方法。
Datasets and Evaluation Protocol
这部分就是告诉了大家Market-1501、CUHK03和DukeMTMC-reID三个数据集的组成和获取来源。(感兴趣的人可以百度或者Google,有相关的文章介绍的)同时告诉了大家这三个数据集的评价指标,对于Market-1501和DukeMTMC-reID数据集,使用rank-1和mAP来衡量指标;对于CUHK03数据集,使用rank-1、rank-5和rank-10来评价。
Comparison with Related Methods
这一部分对比了论文使用的Deep-Person方法和当前的SOTA算法在几个数据集上的测试性能。首先是DukeMTMC-reID数据集,对比结果如下所示:
可以看出对比目前最好的方法还是有一定的提升效果的,但是截至这篇博客写出来,已知的论文结果中其实他并不是最高的。
下图是该方法在Market-1501数据集上与当前大部分算法的对比结果。主要分为了两种检索方式,single query和multiple query。
下图是在CUHK03数据集上的对比结果。
在以上的结果对比中,本文所使用的Deep-Person方法均显示了较高的检索性能。
Ablation Study
这一部分完成了本篇论文提到方法的简化测试,用于解释不同创新点对于本文最终结果的影响。这部分的测试在Market-1501数据集上使用single query方式去做。
首先判断LSTM-base的branch对于整体网络是否有提升,这部分内容中,只考虑了Softmax的分类器能力,所以第三条支路也就是使用Triplet Loss的那条branch,叫做被舍弃,只考虑global feature和part feature部分的分类影响。最终的结果如下图所示:
第一行的表示只使用全局分支的训练结果,第二行的 w/o LSTM表示只使用part branch,而且还不算上LSTM单元进去,第三行在第二行实验的结果中加入了全局特征的影响,最后一行展示了全局、局部特征再加上LSTM单元的实验结果,可以看到提升都很明显。对于除了第二行的三个实验,为了展示LSTM的作用,作者提取了中间层的feature map来显示无监督分割的部分结果,如下图所示:
可以看出,每一个feature map的第三列显示的是加入了LSTM单元之后的part-base方法所主导的感兴趣区域热力图,行人的细节信息被更准确,更详细的显示出来。以上实验证明了引入LSTM单元对人体部件进行序列学习可以让特征更好的表示行人。
之后作者讨论了多种loss联合在一起训练的优势,在这部分实验中,作者抛弃了part feature branch的影响,只讨论了global feature的分类loss和triplet loss,实验结果如下所示:
从上表可以看出,联合了两种loss可以使得最终的检索性能大幅提升。
作者还讨论了Deep-Person的全局和局部特征组合方式,在之前的结构图中我们可以知道,Deep-Person的Backbone Network为ResNet50,这个结构输出的特征图会分别接一个GAP模块用于特征的聚合,输出feature vector或feature map,在这一部分,作者讨论了基于这些特征编码得到的全局和局部特征(只考虑branch),使用concatenate方式和单独训练分类器两种方式的实验结果,如下图所示:
从上表中可以看出,分开对global feature和part feature训练分类器可以得到最好的性能,作者这种方式学习可以使得Backbone Network的特征会更加鲁棒。
Conclusion
这篇文章主要使用了一个3 branch的结构用于行人特征提取,其中在局部特征部分引入了LSTM单元进行局部特征的优化,并且实验整理了增加这部分LSTM对行人部件进行序列学习以后可以使网络获得更好的表征能力。全局和局部特征都使用ID-discriminative的分类器进行学习,对于不同ID的行人特征,使用一个triplet loss进行度量学习。最终,算法在主流的三个数据集上表现出了目前最好的检索性能。在未来的工作中,作者计划使用更加具有人体部件敏感的区域对局部特征进行划分,目前的方法是将特征切成一条一条的进行训练,未来可以根据部件的mask信息准确的选取部件区域的局部特征。