1 简介
在本文中作者探讨了基于Transformer的ViT,将其用于ReID任务。经过几次改进,以ViT为骨干网络构建了一个强大的Baesline——ViT-BoT,在几个ReID基准上,该结果与基于卷积神经网络有相差无几的结果。
此外,考虑到ReID数据的特殊性,设计了两个模块:
- 对于Transformer,将摄像机或视角之类的非可视信息编码为矢量嵌入表示形式是非常自然和简单的。插入这些ViT可以消除由各种相机或视角引起的偏差。
- 设计了与全局分支平行的Jigsaw分支,以促进在2分支学习框架中训练模型。在Jigsaw分支中,设计了一个Jigsaw patch模块,以学习可靠的特征表示并通过对patch进行Shuffle来帮助训练Transformer。
通过这些新颖的模块提出了一个纯tranformer框架的TransReID,这是目前第一项使用纯Transformer进行ReID研究的工作。TransReID的实验结果在行人和车辆ReID基准上达到最先进的性能。
本文主要贡献:
- 1、首次为ReID任务提出了一个纯Transformer框架,并构建了一个具有多种适应性的ViT-BoT Baseline;
- 2、引入边信息嵌入(SIE)作为一个统一的框架,对ReID中的各种边信息进行编码。实验结果表明,该方法能有效地消除由于不同摄像机或物体视角所引起的特征偏差;
- 3、利用Stripe-Based的思想,提出了Jigsaw Patches模块(JPM)。通过shuffle操作,JPM在2分支学习框架中便于训练更好、更鲁棒的特征表示;
- 4、TransReID在MSMT17, Market-1501, DukeMTMC-reID,Occluded-Duke, VeRi-776和VehicleID都达到了最先进的水平。
2 相关工作
ReID的研究主要集中在Person ReID和Vehicle ReID两方面。目前最先进的方法大多是基于CNN的结构。总结这些工作可以发现表征学习、局部特征和不变特征是成功的关键,ReID及其相关工作如下:
2.1 表征学习
目前主流方法是设计合适的损失函数来训练一个CNN Backbone(例如ResNet),用来提取图像的特征。损失函数可以分为分类损失和度量损失。
对于基于分类的Loss(又称ID Loss),有研究者提出了ID-discriminative embedding(IDE)来训练ReID模型作为图像分类,并从ImageNet预训练的模型中进行微调;与ID Loss不同,Metric Loss将ReID任务视为一个聚类或排序问题,目前最广泛使用的度量损失是三元组损失。也有学者提出了BNNeck来更好地结合ID Loss和Triplet Loss;也有学者将ID Loss和Triplet Loss进行了视角统一。
2.2 局部特征
局部特征方法通过切分和学习细粒度特征来聚合不同的部分/区域特征。细粒度部分可以通过大致的水平切块或语义分割自动生成。方法如PCB、MGN、AlignedReID++以及SAN等,将图像分成若干块,提取每个块的局部特征。使用语义分割或关键点估计来对齐不同的部分或2个对象;该方法在Person ReID以及Vehicle ReID被证明是有效的。
2.3 不变特征
在跨相机系统中,由于相机配置和对象视角的不同,会产生姿态、方向、光照和分辨率等差异。一些方法使用侧面信息,如相机ID或视角信息来学习不变特征。例如,基于相机的批处理归一化(CBN)强制将来自不同相机的图像数据投影到同一子空间上,从而大大减少了相机对之间的分布差距。视角/方向不变特征学习对Person和Vehicle ReID很重要。
2.4 Transformer在CV的应用
在自然语言处理领域,为了处理序列数据提出了Transformer模型(NLP)。许多研究也显示了它在计算机视觉任务中的有效性。
Transformer模型最初用于处理由CNN模型为视频提取的序列特征。有研究者使用一种Transformer架构的变体来聚合视频中与特定人物相关的上下文线索。然后,Transformer模型扩展到一些主流的计算机视觉任务,包括图像处理、目标检测、语义分割、目标跟踪等。
例如,图像处理Transformer(Image Processing Transformer,IPT)通过使用Transformer进行了大规模的预训练,在超分辨率、去噪和去雨等图像处理任务上取得了最先进的性能。检测Transformer(DETR)重新设计了目标检测的框架,它是一个简单的、完全端到端的目标检测器。
目前Pure Transformer模型越来越受欢迎。ViT是最近提出的一种将Pure Transformer直接应用于图像序列配准的方法。然而,ViT需要一个大规模的数据集来进行预训练。为了克服这一缺点,Touvron等人进行了一系列的研究并提出了一个名为DeiT的框架,该框架引入了一种针对Transformer的teacher-student策略,以加速ViT训练,而不需要大规模的预训练数据。而本文则是将ViT扩展到ReID任务中,并证明了它的有效性。
3 本文方法
3.1 ViT-BoT
ViT-BoT的框架如图所示:
由于原始的ViT训练细节并不直接适用于ReID任务,因此,为了实现ViT-BoT,进行了一些详细的适应性调整。
1、Overlapping Patches
作为预处理步骤,ViT将图像分割成N个不重叠的小块,没有很好地保留小块周围的局部邻近结构。相反,本文使用滑动窗口来生成有重叠像素的patches。假设滑动窗口的步长为S个像素,patch的大小为个像素,2个相邻patch重叠区域的形状为。综上所述,给定输入图像,调整到固定分辨率后,将其分成个补丁:
其中是floor功能。重叠区域越大分割的图像patch越多。更多的patch通常可以带来更好的性能,同时也会带来更多的计算量。这里需要在性能和计算成本之间进行权衡。为了更好地区分,表示图像被分割为12份。
2、Position Embedding
Position Embedding 对第个patch的位置信息进行编码,这对于Transformer编码器编码空间信息具有重要意义。在ImageNet上预训练的ViT权重参数被加载以方便训练。但是由于ReID任务的图像分辨率与ViT任务的图像分辨率不同,在这里不能直接导入ImageNet上预先训练的位置嵌入。
因此,在运行时Position Embedding中引入了双线性插值,以帮助ViT-BoT处理任何给定的输入大小和形状;与ViT类似,ViT-BoT的Position Embedding也是可学习的。
3、Feature Learning
将图像分割成一系列的patches,在patchesEmbedding前加上一个可学习的Embedding,最后一个编码器层的类标志(final class token)作为图像的全局特征表示。最终的类token记为,输入patches对应的remaining输出记为,其中为patches总数。受此启发,本文在最后一个类标志之后引入BNNeck。ID损失是没有label smoothing的交叉熵损失。对于一个三元组,Triplet Loss的Margin为Soft-Margin:
3.2 TransReID
尽管ViT-BoT可以在ReID任务中实现比较好的性能,但它没有利用ReID数据中的特性。为了更好地挖掘side信息和fine-grained部分,作者提出了Side Information Embedding(SIE)和Jigsaw Patch Module(JPM)。与SIE和JPM,结合SIE和JPM TransReID框架如图所示:
1、Side Information Embedding
在ReID中,一个具有挑战性的问题是由于各种摄像机、视角等因素造成的外观偏差。为了解决这个问题,基于CNN的框架通常需要修改网络结构或设计特定的损失函数来包含这些非视觉线索(边信息)如相机id和视角预测等信息。
Transformer模型非常适合这一类问题,因为它可以通过将这些Side Information编码到Embedding表示中来融合这些Side Information。类似于Position Embedding可以应用可学习的层来编码Side Information。
具体来说,如果一幅图像的摄像头ID为C,则其摄像头Embedding可以记为。不同于Position Embedding在各patch之间的变化,摄像机Embedding 对于一幅图像的所有patch都是相同的。另外,如果物体的视点是可用的无论是通过视点估计算法还是人工标注,都可以将视点标签编码为,然后用于图像的所有patch。
现在的问题是如何整合两种不同类型的信息。一个可能的方案是直接将2个Embedding相加,即,但它也可能会使两个Embedding项相互抵消。于是本文提出将摄像头ID 和视角标签共同编码为。换句话说就是对于个摄像机ids和个视角标签,总共有个不同的值。最后,第个patch的输入Embedding如下:
其中是学习特征Embedding的线性映射,是平衡权重的超参数。由于每个patch嵌入的位置不同,但在不同的图像中可能是相同的,而每个patch都是相同的,但对于不同的图像可能有不同的值,因此TransReID能够学习2种不同的Embedding,然后直接添加。整个输入Embedding为,其中是类标签。
本文通过相机信息和视角信息这2个范畴变量来说明SIE的使用,然而,SIE可以扩展为包括范畴变量和数值变量在内的更多种类的信息。在不同实验中,摄像机和/或视角信息都包含在可用的范围内。
2、Jigsaw Patch Module
本文将ViT-BoT的最后一层改为2个并行分支,通过2个独立的transformer层学习全局特征和局部特征。
假设输入到最后一层的隐藏特征记为。全局分支是将编码成的标准transformer,其中被视为基于CNN方法的全局特征。为了学习细粒度特征,一个简单的解决方案是将分成组,这些组依次连接共享Token ,然后将组特征输入到一个transformer层,以学习个局部特征,表示为。是第组的输出Token。
最近的两项研究表明,Token Embedding主要由其附近的Token决定。因此,一组邻近的patches embedding主要是观察一个有限的连续区域。
为了解决这个问题本文提出了Jigsaw Patch Module (JPW)进行分组前的Shuffle Patch。Shuffle操作由shift操作和patch Shuffle操作实现,具体如下:
- step-1:shift操作,将第1个 Patch 移动m步到最后。于是移动m步变为。
- step-2:patch Shuffle操作,通过k组的patch shuffle操作对移位的patch进行进一步的Shuffle。隐藏特征变成。
根据前面的描述,将Shuffle后的特征分为k组。JPM通过共享transformer将其编码为k个局部特征。经过shuffle操作,局部特征可以覆盖不同车身部位或车辆部位的Patch。然后利用和k个局部特征和全局特征训练。总损失的计算方法如下:
在推理过程中,Concat全局特征和局部特征作为最终的特征表示。如果仅使用计算成本较低但是性能略有下降。