Transformer是一种self-attention模型架构,自2017年以来在NLP领域取得了巨大的成功。2020年,谷歌提出了纯transformer结构ViT,在ImageNet分类任务上取得了与CNN相当的性能。之后,大量ViT衍生的PureTransformer架构(以下简称Transformer架构/模型)在ImageNet上取得了成功。此外,在检测、跟踪和分割等下游视觉任务中,纯transformer的架构继续取得与CNN相当的性能,但在更细粒度的图像检索任务上还没有成功的工作。TransReID论文地址:https://arxiv.org/pdf/2102.04378TransReID代码:https://github.com/heshuting555/TransReID阿里巴巴达摩院研究团队在该论文中成功将纯transformer架构应用于目标重识别(ReID)任务,提出了TransReID框架,并在6个数据集上实现了SOTACNN方法的性能。研究背景纵观整个基于CNN的ReID方法的发展,我们发现很多工作都集中在两个重要的点上:1)挖掘图片中的全局信息。由于CNN网络中卷积核的堆叠,感受野存在高斯核衰减。例如,如图1所示,标准的CNN模型通常会关注图片中的一两个具有判别力的局部区域,而忽略一些全局信息。为了解决这个问题,大量的方法引入注意力机制来扩大模型的有效感受野,从而获得更好的全局性。但是attention机制只是缓解了CNN的这个问题,并不能完全解决有效感受wildGaussianattenuation的问题。但是Transformer中的self-attention模块会让每一个patch和图片中的patch计算一个attentionscore,所以和CNN模型相比,在挖掘全局信息上有天然的优势,multi-head也可以挖掘多个判别式性区。可以看出,图1中基于Transformer的方法可以挖掘出多个有判别力的局部区域。2)学习细节信息丰富的细粒度特征。CNN网络中有一个降采样操作来获得平移不变性,扩大感受野,但同时也降低了featuremap的分辨率,会丢失图像的一些细节信息。如图2中的一对负样本(CNN识别错误,Transformer识别正确),两张图片的外观特征非常相似,但从书包的细节可以看出,有一个左边书包边上有杯子,右边书包边上没有杯子,所以可以判断有两个ID。但是由于CNN的降采样操作,在网络最终输出的featuremap上已经看不清杯子的细节了。但是Transformer没有下采样操作,所以featuremap可以更好的保留细节信息来识别目标。综上所述,Transformer结构非常适合ReID任务,但只是将CNNbackbone换成Transformer并没有充分利用Transformer的特性。本文提出了TransReID,第一个纯TransformerReID框架,它包括两个新模块,JPM和SIE。之前的ReID工作表明,将图像切割成几个部分,然后为每个部分提取局部特征可以提高性能。我们借鉴了这个设计,将嵌入Transformer的patch分成几组,但是这个操作并没有充分利用Transformer的全局依赖。因此,我们设计了JigsawPatchModule(JPM),随机打乱patchembedding,然后拆分组。Transformer非常擅长对不同模态的信息进行编码,之前的ReID工作已经表明相机和姿势信息有利于ID识别,因此我们设计了SideInformationModule(SIE)来利用这些有益信息。TransReID1,Transformer-basedstrongbaseline我们首先参考CNN的baselineBoT来设计基于Transformer的强基线。如图3所示,我们参考ViT将图像分成N个patches,并引入一个额外的clstoken,总共有N+1个embeddings。在Transformer层之后,我们使用clstoken作为图像的全局特征,然后通过BNNeck结构计算tripletloss和classificationIDloss。由于ImageNet预训练的ViT使用的是224*224的图像分辨率,ReID通常使用的分辨率不会是224*224,这会导致positionembedding的维度不同。因此,我们根据空间位置对位置嵌入进行插值,以加载预训练的位置嵌入参数。此外,还有一个新兴的技巧,就是在给图像打补丁时,允许相邻补丁之间有一定的重叠。当然这个操作会增加patch的数量,增加模型训练的资源消耗,但是性能也会比较稳定。2.JigsawPatchModuleReID任务经常会遇到遮挡、错位等问题。通常,我们使用细粒度的局部特征来处理这些问题。水平切片是一种非常常用的局部特征方法。JPM模块借鉴了水平切片的思想,将最后一层的patchembedding分成k组(k=4),然后对每组进行transformerencode得到N个clstoken,每个clstoken相当于PCB特征中的条纹,计算损失。但这有一个缺点:每组只包含图片中局部区域的信息,而transformer的特点是能够挖掘全局相关性。为了扩大每个组的“视野”,我们将所有的patchembeddings按照一定的规则打乱,然后分组。这样,每个组可能包含来自图像不同区域的补丁,这大约相当于每个组具有更全局的“视野”。另外,置乱操作也可以看作是给网络增加了一些扰动,使得网络能够学习到更健壮的特征。具体的置乱操作分为两步:(1)从最后一层输出的patchembedding中去掉位置0的clstoken,得到N个patchembedding,然后循环平移m步;(2)第二步指的是shuffle的groupshuffle操作打乱N个patch的顺序得到新顺序的N个patchembeddings,然后按照新的顺序分成k组。每组学习一个clstoken,最后将所有clstoken连接起来作为最终特征。3.SideInformationEmbeddingsReID任务中相机和视角的不同会给图像带来一些外观上的差异,所以很多工作都集中在如何抑制这些偏差上。对于CNN框架,通常需要专门设计结构来处理这个问题,比如设计loss、对数据进行先验处理、改变模型结构等。这些设计通常更个性化、更复杂,通用性不强。Transformer更擅长融合不同模态的信息,因此我们提出SIE模块使用辅助信息,如相机ID和视角。与learnablepositionembedding类似,我们使用learnableembedding对cameraID和directionID的Sideinformation进行编码。该模块成为辅助信息嵌入(SIE)。假设一共有Nc个cameraID和NvdirectionID,某张图片的cameraID和directionID分别为r和q,那么它们最终的SIE编码为:最后backbone的输入为patchembedding,position嵌入和SIE\数学{S}_{(C,V)}的加权和。图4展示了TransReID的完整框架,在ViT的基础上增加了JPM和SIE模块。实验结果1.不同Backbone的比较表2显示了不同Backbone的准确率和推理时间的比较。我们使用ResNet50作为baseline,我们给出了ViT和DeiT的结果。可以看出,DeiT-S/16在速度上接近ResNet50,在精度上也有不相上下的表现。当我们使用更深的DeiT-B/16和DeiT-V/16时,我们也达到了与ResNest50相似的速度和精度。当我们在pre-patch环节减小conv的stride时,patch的数量增加了,速度降低了,但是准确率也会得到稳定的提升。2.AblationStudy的详细消融实验可以参考论文。这里只给出大模块的消融实验。我们使用ViT-B/16作为基线。从表5的结果可以看出,JPM模块和SIE模块都可以提高稳定性,TransReID将这两个模块一起使用可以进一步提高结果。3.与SOTA的比较表6显示了与SOTA方法的比较结果。可以看出,与CNN方法相比,TransReID在六个ReID数据集上都取得了更好的准确率,这表明纯transformer架构同样适用于图像检索任务。有趣的一点是,在ImageNet上取得更好成绩的DeiT在下游ReID任务上并没有超过ViT。这是因为ViT使用更大的ImageNet22??K进行预训练,更大的预训练数据使得ViT具有更好的可迁移性。4.一些可视化下图是CNN和TransReID的attention可视化结果。可以看出,TransReID比CNN能挖掘出更多的判别区域,具有更好的全局特征。这篇文章的作者包括两位:1.何书婷,浙江大学博士生,阿里巴巴达摩院研究实习生,研究方向为目标重识别,多目标跟踪等,曾获得top国内外十余项比赛三项排名,其中六项冠军。2.罗浩,毕业于浙江大学,博士。2020年毕业后加入阿里巴巴达摩院,从事ReID方向的研究和技术落地。共发表论文20余篇,被Googlescholar引用1000余次。代表作BagTricksBaseline开源代码Star超过1.6K。曾获得CVPR2021AICITYChallenge、ECCV2020VisDAChallenge、IJCAI2020iQIYIiCartoonFaceChallenge等国际大赛冠军。博士期间,他创立了浙大AI学生会,并在B站等平台开设《深度学习和目标重识别》课程免费。
