行人重识别论文(四)--EANet: Enhancing Alignment for Cross-Domain Person Re-identification

论文地址:https://arxiv.org/abs/1812.11369

代码实现:pytorch

目录

主要贡献:

摘要

1. Introduction

2. Related Work

3. Method

3.1. ReID Model with Regional Pooling

Embedding layer(嵌入层)

交叉损失熵代价函数

3.2. Part Aligned Pooling

3.3. Part Segmentation Constraint

下采样与上采样

deconvolution networks

3.4. Multi-Task Training

4. Experiments

4.1. Datasets and Evaluation Metrics

4.2. Implementation Details

实验:部件对齐的作用

实验:部件分割约束的作用

实验:在MSMT17上训练

实验:COCO提供的部件分割约束

实验:和现有跨域方法的互补性

State-of-the-art的性能:单域

State-of-the-art的性能:跨域

结论

将来工作

实现细节

参考文献


主要贡献:

     1). 提出了部件对齐池化(PAP: Part Aligned Pooling),对跨数据集实验有很重要的影响;提升模型直接跨库测试的性能;

     2). 提出了部件分割约束(PS Constraint)加强对齐和模型的泛化性能(generalization)。

摘要

      单域(single-domain)的行人重识别(ReID)近来已经取得了巨大的进展,但是在跨域(cross domain,或者迁移 transfer)问题上却存在很大的困难,主要体现在(1)直接把训好的模型到目标域(target domain)测试,性能有巨大的下降;(2)利用无id标注的目标域图片进行领域适应(domain adaptation)具有其挑战性。这篇文章中,我们发现部件对齐在跨域重识别中起着重要的作用。通过强化模型的对齐,我们一方面提高模型的泛化性能(generalization),提升模型直接跨库测试的性能;另一方面,我们的部件对齐模型可以很自然地利用目标域无标签数据,实现领域自适应(adaptation),使得模型可以适配目标域。我们 在Market1501,CUHK03,DukeMTMC-reID,MSMT17四个目前最大的行人重识别数据库之间进行大量的跨域实验,证明了我们方法的有效性,并且取得了state of the art的结果。同时,出于完整性,我们还实验证明了和现有跨域方法的互补性。

1. Introduction

                                                        

      本文首先在姿态估计的帮助下改进了先前最先进的部件模型PCB 。 PCB将功能图均匀分区为P水平条纹,以便汇集局部特征,如图1a所示。但又一定的缺陷,有的部分并没有完全匹配,本文的对齐操作是从关键点分隔区域汇集部分特征,如图中b所示,图中的关键点是基于COCO数据集训练的姿势评估模型获得的。这种对齐策略显著增加了跨域准确性。

      本文对特征图分割增加限制,提高分割时ReID特征定位的准确性。具体来说,我们将分割模块连接到ReID特征图,使用由COCO 数据训练的模型预测的伪分割标签对其进行训练。 简单的结构显着的改善了模型。

      本文将无标签的目标域图片作为训练样本来训练部件分割约束模型,让模型更具泛化能力,使得模型对于没有身份标签的图片也具有很好的识别效果。

2. Related Work

省略

3. Method

模型的主要特点是部件对齐池化(PAP: Part Aligned Pooling)、每个部件的id约束、部件分割(PS: Part Segmentation)约束,并且在训练阶段同时利用源域(有id标注)和目标域(无id标注)的图片。

3.1. ReID Model with Regional Pooling

PCB方法:

将图片 用CNN网络就行特征提取得到 feature maps G,G的形状是C X H X W , 分别表示通道、高度和宽度。假设有一个在我们提取的特征G上的空间区域P ,对于p-th区域,池化一个特征向量并使用一个嵌入层进行转换。(f p means the embedding layer for the p-th region),并连接到一个明确的分类器将其分类为训练集中的M个身份之一。 然后相应地计算交叉熵损失L. In PCB,不同部件的损失函数为:

                                                                   

并在测试阶段,将局部特征进行联合。

         本文的方法也采用每个部件的ReID监督,并进一步考虑了对齐和可视化。

Embedding layer(嵌入层)

 简单的说就是将输入转换为向量的形式。

Keras中文文档中对嵌入层 Embedding的介绍是 “嵌入层将正整数(下标)转换为具有固定大小的向量。我们为什么要使用嵌入层 Embedding呢? 主要有这两大原因:

  1. 使用One-hot 方法编码的向量会很高维也很稀疏。假设我们在做自然语言处理(NLP)中遇到了一个包含2000个词的字典,当时用One-hot编码时,每一个词会被一个包含2000个整数的向量来表示,其中1999个数字是0,要是我的字典再大一点的话这种方法的计算效率岂不是大打折扣?

  2. 训练神经网络的过程中,每个嵌入的向量都会得到更新。

嵌入层embedding用在网络的开始层将你的输入转换成向量,所以当使用 Embedding前应首先判断你的数据是否有必要转换成向量。如果你有明确的数据或者数据仅仅包含整数(像一个字典一样具有固定的数量)你可以尝试下Embedding 层。 
如果你的数据是多维的你可以对每个输入共享嵌入层或尝试单独的嵌入层。

我们举个栗子看看嵌入层 Embedding 对下面的句子做了什么:)。Embedding的概念来自于word embeddings,如果您有兴趣阅读更多内容,可以查询 word2vec 。

“deep learning is very deep”

使用嵌入层embedding 的第一步是通过索引对该句子进行编码,这里我们给每一个不同的句子分配一个索引,上面的句子就会变成这样:

1 2 3 4 1

接下来会创建嵌入矩阵,我们要决定每一个索引需要分配多少个‘潜在因子’,这大体上意味着我们想要多长的向量,通常使用的情况是长度分配为32和50。在这篇博客中,为了保持文章可读性这里为每个索引指定6个潜在因子。嵌入矩阵就会变成这样:

Embedding Matrix

这样,我们就可以使用嵌入矩阵来而不是庞大的one-hot编码向量来保持每个向量更小。简而言之,嵌入层embedding在这里做的就是把单词“deep”用向量[.32, .02, .48, .21, .56, .15]来表达。然而并不是每一个单词都会被一个向量来代替,而是被替换为用于查找嵌入矩阵中向量的索引。其次这种方法面对大数据时也可有效计算。由于在深度神经网络的训练过程中嵌入向量也会被更新,我们就可以探索在高维空间中哪些词语之间具有彼此相似性,再通过使用t-SNE 这样的降维技术就可以将这些相似性可视化。

交叉损失熵代价函数

交叉熵衡量我们学习到 y 的正确值的平均起来的不确定性。 

交叉熵与相对熵

3.2. Part Aligned Pooling

    使用姿势评估模型预测了17个点,如图一c所示,根据这些点,我们将特征池( feature pooling)分割成9个区域 {head, upper torso, lower torso, upper leg, lower leg, foot, upper body, lower body, full body} . 将这种策略称为PAP。区域R1~R6形成对比以在对准方面与PCB进行比较,而区域R7~R9补偿关键点模型未能检测到某些局部部分的情况。

     当发生遮挡或不完美检测时,有些时候可能出现没有对齐部分,例如图一b中的的特征池,对于这种情况,我们使用零向量来表示缺失的这一部分的特征,并且在计算损失的时候不考虑这一部分。对于可见部分的损失计算可用下面的式子表示:

                                                           

      这里的 表示图片p-th部分是否可见。测试阶段,我们以遮挡感知的方式计算图像距离。对于  query image I q , 如果 i-th 是不可见的,那么这部分与所有 gallery images 的特征距离都将忽略不计。<query, gallery>图像对<I q , I g >的距离可用下面的公式计算:( g ∈ {1,...,N},where N denotes gallery size,)

                                                             

        这里的 分别表示的p-th 部分的嵌入 。表示的 p-th部分是否可见。 cos_dist表示余弦距离。如果j-th部分在中可见但在中不可见,我们在计算公式3时保持的结果。

3.3. Part Segmentation Constraint

       由于我们在特征图上执行细粒度区域池,我们希望从不同区域汇集的特征彼此不同,即几乎没有冗余。我们对Conv5特征图进行部分分割(PS)约束,使得模型能够从特征图中预测部件标签。 如果PS模块能够预测来自ReID特征图的部件标签,那么就有很好的定位能力,能够很准确的定位到各个部件的对应位置,因此可以减轻冗余。 具体地说,我们将stride-2 的3×3 Deconv层和1×1 Conv层连接到Conv5特征图来预测部件标签。(PS模块由一个stride=2的3x3反卷积层和一个1x1的卷积层组成)Deconv层用于上采样,1×1 Conv层用于按像素分类。为了得到部件分割的监督信号,我们在COCO上训练了一个部件分割模型,然后在ReID数据库上进行预测,得到部件伪标签,如图3所示。

       ReID特征的部件分割损失计算方式如下:(使用了大小标准化的方式)

                                                                       

这里的K 表示包括背景在内的部件分类的数量,是在第k个部分内平均的交叉熵损失。在对各个不同部件求平均之前先求每个部件自己内部求平均,这样可以避免 large-size parts主导损失。 对于像脚和头部这样的 small-size 类型来说这也很重要,它们包含很多与ReID有关的判别信息应该同样给予考虑。

                                          

                                                   (a)COCO上的部件标注(b)训好的分割模型在ReID数据库上预测的伪标签

加了部件分割模块之后,我们的模型可以看成双流的多任务模型,我们自然而然可以想到把部件分割约束施加到无id标注的目标域图片上。这样做的好处是,一方面模型见过目标域的图片,在训练阶段就能起到一定的领域适应的作用;另一方面,保证了模型在目标域图片提取特征时的定位和对齐。

下采样与上采样

缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。然而,确实有一些缩放方法能够增加图像的信息,从而使得缩放后的图像质量超过原图质量的。

下采样原理:对于一幅图像I尺寸为M*N,对其进行s倍下采样,即得到(M/s)*(N/s)尺寸的得分辨率图像,当然s应该是M和N的公约数才行,如果考虑的是矩阵形式的图像,就是把原始图像s*s窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值:

                                                                         

上采样原理:图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。

deconvolution networks

逆卷积相对于卷积在神经网络结构的正向和反向传播中做相反的运算。可能叫做转置卷积(conv_transpose)更为恰当一点。

Deconvolution大致可以分为以下几个方面:

(1)unsupervised learning,其实就是covolutional sparse coding[1][2]:这里的deconv只是观念上和传统的conv反向,传统的conv是从图片生成feature map,而deconv是用unsupervised的方法找到一组kernel和feature map,让它们重建图片。

(2)CNN可视化[3]:通过deconv将CNN中conv得到的feature map还原到像素空间,以观察特定的feature map对哪些pattern的图片敏感,这里的deconv其实不是conv的可逆运算,只是conv的transpose,所以tensorflow里一般取名叫transpose_conv。

(3)upsampling[4][5]:在pixel-wise prediction (像素级别上的预测)比如image segmentation[4]以及image generation[5]中,由于需要做原始图片尺寸空间的预测,而卷积由于stride往往会降低图片size, 所以往往需要通过upsampling的方法来还原到原始图片尺寸,deconv就充当了一个upsampling的角色。(本文使用逆卷积的作用)

[  pixelwise 是指像素级。在图像处理领域指的是像素尺度的处理(预测)。对应的还有patchwise,可以理解成补丁级,单纯理解补丁级不太好懂,但是和pixelwise相互比较就容易多了。我们知道,图像分割都是把图像分成一块一块的子区域,这里的子区域就是patchwise  ]

例如:4x4的输入,卷积Kernel为3x3, 没有Padding / Stride, 则输出为2x2。

                                                                    

输入矩阵可展开为16维向量,记作x
输出矩阵可展开为4维向量,记作y
卷积运算可表示为y = Cx

不难想象C其实就是如下的稀疏阵:

平时神经网络中的正向传播就是转换成了如上矩阵运算。那么当反向传播时又会如何呢?首先我们已经有从更深层的网络中得到的\frac{\partial Loss}{\partial y}.

 

\frac{\partial Loss}{\partial x_j} = \sum_i \frac{\partial Loss}{\partial y_i} \frac{\partial y_i}{\partial x_j} = \sum_i \frac{\partial Loss}{\partial y_i} C_{i,j}  = \frac{\partial Loss}{\partial y} \cdot C_{*,j} = C_{*,j}^T \frac{\partial Loss}{\partial y}

 

所谓逆卷积其实就是正向时左乘C^T,而反向时左乘(C^T)^T,即C的运算。

3.4. Multi-Task Training

多任务、多域训练

源域的图片可以同时进行ReID、部件分割训练,目标域图片只能进行部件分割训练。训练阶段,我们的学习率、迭代次数、优化器等优化设置保持和单独训ReID的情况一致。源域batch和目标域batch分开前传,但是源域ReID损失、分割损失的梯度,和目标域分割损失的梯度相加后再一起更新模型。

 source domain images 的损失主要有ReID  loss and part segmentation loss。

target domain 的损失主要是 part segmentation loss。

所以总的损失函数为:

                                                                

4. Experiments

4.1. Datasets and Evaluation Metrics

数据集: Market1501, CUHK03 and DukeMTMC-reID 

 评估指标:Cumulative Match Characteristic (CMC) for which we report the Rank-1 accuracy, and mean Average Precision (mAP)

4.2. Implementation Details

 COCO Part Labels。局部标签的获得  Densepose [10]数据集包括14个身体部位,我们融合左/右部分并将手部区域分配到下臂类,最终得到7个部分。 我们使用这个变换的Densepose数据集来训练零件分割模型,采用最近提出的架构DANet 。

实验:部件对齐的作用

表格1:部件对齐对跨域的作用

我们对比PAP-6P和PCB,其中PAP-6P的训练和测试阶段都是在图1中R1~R6区域池化得到6个特征,其它训练、测试设定和PCB一致。PAP-6P和PCB在源库上性能相当,但是对跨库有很大的提升,比如在M->D上Rank-1提高了4.7个点。说明了对齐的特征提取对模型的泛化性能(generalization)有很大的帮助。

PAP在训练和测试阶段使用了图1中R1~R9共9个区域,PAP比PAP-6P在CUHK03上Rank-1有3.9%的提升。我们后续的实验都是基于PAP。

实验:部件分割约束的作用

图4:部件之间的特征相似度

在PAP的基础上,增加部件分割约束的模型记为PAP-S-PS(模型只见过源域图片),对目标域和源域都施加分割约束的模型记为PAP-ST-PS。我们把PCB、PAP、PAP-S-PS、PAP-ST-PS几个模型的部件特征cosine相似度(测试集上的统计值)计算出来,如图4。我们看出,部件对齐的池化、部件分割约束都明显降低了部件之间特征的相似度。我们相信这也意味着降低了特征的冗余和混淆。

表格2:部件分割约束的作用(PAP-S-PS-SA这一项得看论文具体解释)

PAP、PAP-S-PS、PAP-ST-PS三个模型的分数对比见表格2。

可以看出,PAP-S-PS比PAP在源域上有稍微提升,对跨域有很大提升,比如M->D的Rank-1提升了5个点。这体现了模型泛化性能(generalization)的提升。

另外,比较PAP-S-PS和PAP-ST-PS,我们看出对目标域图片的分割约束进一步提升了跨域性能,比如M->D的Rank-1,PAP-ST-PS比PAP-S-PS提升了4.7个点。这体现了目标域图片部件分割约束作为领域适应(adaptation)的有效性。

图5:目标域部件分割约束的直观效果

从图5中,我们也可以看出目标域图片部件分割约束的直观效果。PAP-S-PS模型没有见过目标域图片,因此在目标域预测的分割结果有很多噪声、残缺,而PAP-ST-PS见过目标域图片,明显改善了这个问题。

实验:在MSMT17上训练

上面提到的实验,我们在MSMT17(目前最大的Image-based ReID数据集)上也进行了训练。可以得到和上面一致的结论。分数见表格3。

表格3:在MSMT17上训练

实验:COCO提供的部件分割约束

表格4:COCO提供的部件分割约束的作用

我们甚至尝试把COCO的部件分割约束加入到模型的训练中,其中一个考虑是COCO的部件标签是准确的。具体做法是,我们在训练PAP模型的时候,同时训练COCO图片的部件分割,但是不对ReID图片训练部件分割,模型记为PAP-C-PS。因此模型优化的是ReID图片的ReID约束,以及COCO图片的分割约束。根据表格4,比较PAP、PAP-C-PS,我们发现COCO图片的加入降低了源库的性能,但是跨库的分数有非常大的提升,比如PAP-C-PS比PAP在M->D的Rank-1提升了7.9个点。

这说明了我们在实际应用中,甚至可以把公开的通用的部件分割数据库(如COCO、Pascal Part、LIP)作为模型训练的一部分数据,提升模型部件对齐的能力,这无疑是比较可喜的一点。

另外,如果想要让模型在加了COCO图片后,在源库和目标库都保持较高的性能,我们建议把COCO图片转换成ReID图片的风格,然后把原始COCO图片、新风格的COCO图片都加到模型训练中。我们把这个方法记为PAP-StC-PS,记录在表格4中。

实验:和现有跨域方法的互补性

现有跨域方法的主流做法包括(1)风格迁移。利用GAN把源域的图片转换成目标域的风格,然后在这些生成的图片上训练ReID模型。(2)预测伪标签(CFT: Clustering-and-FineTuning)。利用源域训好的ReID模型,在目标域上通过聚类、贴伪标签的方式得到伪监督训练数据,然后微调ReID模型。

(1)风格迁移的方法。ReID模型本身性能越好(只要求源域内测试性能高,不要求跨库性能高),则在风格化后的图片上训练ReID模型,自然能够得到更好的模型。然后,由于图片是目标域风格的,所以跨域性能自然更好。

(2)预测伪标签的方法。ReID模型的跨域性能越好,那么模型在目标域的初始状态越好,聚出来的类别越加纯净,越有利于模型的微调。

因此,从理论上来说,源域、跨域都更好的ReID模型,和这两种已有跨域方法就很自然地是互补的。出于完整性,我们也实验证明了和现有跨域方法SPGAN [2](Simon4Yan/Learning-via-Translation)、DomainAdaptiveReID [3](LcDog/DomainAdaptiveReID)的互补性。注意,出于简单、清晰对比的考虑,我们只使用DomainAdaptiveReID中聚类的方法和阈值选择的方法,不采用re-ranking距离,也不采用随机擦除数据扩增,而且在目标域微调时,我们保持本文提出的模型结构,而不采用triplet loss微调。

实验分数如表格5所示。其中PCB-SPGAN、PAP-S-PS-SPGAN指的是,我们训练PCB、PAP-S-PS的时候,采用风格后的图片,这利用的是风格化的方法使得模型在训练阶段见过目标域的分布。PAP-ST-PS-SPGAN表示训练PAP-ST-PS的时候,源域的图片用的是风格后的图片,这综合利用了“优化目标域图片分割约束”、“风格化”两种方法使得模型在训练阶段见过目标域的分布。PAP-ST-PS-SPGAN-CFT指的是,利用训练好的PAP-ST-PS-SPGAN模型作为初始化,在目标域执行聚类、贴伪标签、监督训练的任务。

表格5:和现有跨域方法的互补性

根据表格5,(1)比较PAP-S-PS-SPGAN和PAP-ST-PS,前者是利用风格迁移让模型训练阶段见过目标域分布,后者是利用对目标域图片分割约束让模型见过目标域分布,可以看出两者性能相当。另外,当我们的方法和SPGAN结合时,分数提升很多。(2)我们没有做实验对比不同模型进行Clustering-and-FineTuning(CFT)的效果,只证明了我们的方法和CFT的互补性。

State-of-the-art的性能:单域

我们和state-of-the-art的单域方法(single-domain)性能比较如表格6,可以看出,我们的分数达到了state-of-the-art。

表格6:单域的state of the art

State-of-the-art的性能:跨域

我们和state-of-the-art的跨域方法性能比较如表格7,可以看出,我们的分数也达到了state-of-the-art。

表格7:跨域的state of the art

结论

本文主要验证了部件对齐在跨域ReID中的重要作用。我们提出的部件对齐池化、源域图片部件分割约束显著提高了模型的泛化性能(generalization),同时我们提出的目标域图片分割约束起到了有效的领域自适应作用(domain adaptation)。另外,和现有方法的互补性也得到了实验论证。

将来工作

(1)我们的实验证实了,部件分割和ReID是两个互相兼容的任务,因此下一步将考虑两个任务的共同训练,去掉对额外的分割模型的需求,提高效率。(2)尝试利用部件分割结果来池化提取部件特征,去除关键点检测模型,提高效率。(3)我们的模型可以使得Conv5的特征保持定位能力,我们相信这对于更困难的问题:部分人ReID(Partial ReID)也具有很大的帮助,因此后续会在这个问题上进行更多的探索。

实现细节

我们所有模型的池化都是max pooling。ReID的数据扩充只有训练时的flipping。GlobalPool的embedding size是512,其它模型的embedding size是256。测试用的ReID特征是embedding输出的特征。(后续将会考虑warmup、triplet loss、cropping等)。更多细节见代码,以及文章。

 

参考文献

[1] Zeiler M D, Krishnan D, Taylor G W, et al. Deconvolutional networks[C]. Computer Vision and Pattern Recognition, 2010.

[2] Zeiler M D, Taylor G W, Fergus R, et al. Adaptive deconvolutional networks for mid and high level feature
learning[C]. International Conference on Computer Vision, 2011.

[3] Zeiler M D, Fergus R. Visualizing and Understanding Convolutional Networks[C]. European Conference on Computer
Vision, 2013.

[4] Long J, Shelhamer E, Darrell T, et al.Fully convolutional networks for semantic segmentation[C]. Computer Vision and
Pattern Recognition, 2015.

[5] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

[6]  https://zhuanlan.zhihu.com/p/53660395

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值