当前位置:   article > 正文

TransReID: Transformer-based Object Re-Identification—一篇媲美CNN学习框架_transreid代码

transreid代码

TransReID: Transformer-based Object Re-Identification(TransReID:基于Transformer的对象重识别)

期刊合集:最近五年,包含顶刊,顶会,学报>>网址
文章来源:ICCV 2021
代码地址:https://github.com/heshuting555/TransReID

研究背景

 现今基于卷积神经网络( CNN )的方法已经取得了很大的成功,但它们一次只能处理一个局部邻域,不能够解决长距离依赖的问题,并且经过卷积和下采样算子(如池化和跨步卷积)等操作会导致细节信息的丢失。为了解决这个限制,文章提出了基于 Transformer 的对象重识别的方法。具体来说,首先将图像编码为补丁序列,并通过一些关键改进构建基于 Transformer 的强基线。为了进一步增强鲁棒性特征学习,设计了两个新的模块:(i) 提出了拼图补丁模块( jigsaw patch module, JPM ),通过移位和补丁洗牌操作重新排列补丁嵌入,生成鲁棒特征,提高了识别能力,覆盖范围更多样化。(ii) 引入侧信息嵌入( SIE ),通过插入可学习嵌入来合并这些非视觉线索,以减轻对摄像机 / 视图变化的特征偏见。是有史以来第一个采用 Transformer 进行 ReID 研究的文章。

论文分析

为什么尝试使用基于 Transformer 框架来解决 行人重识别的问题?

 基于CNN 的方法存在没有完整解决的问题:(1) 在全局范围内挖掘丰富的结构模式对于对象 ReID 至关重要。然而,由于有效接受野呈高斯分布(又叫正态分布),基于 CNN 的方法主要集中在小的判别区域,没有利用好全局丰富的信息。(2) 具有详细信息的细粒度特征很重要。

在这里插入图片描述
 使用 Grad-CAM 进行注意力图的可视化:(a) 原始图像;(b) 基于 CNN 的模型;© CNN+Attention模型;(d) 基于Transformer的模型。可以看出基于 Transformer 的模型能够关注到更多的全局信息。

在这里插入图片描述

 与基于 CNN 的方法相比,基于 Transformer 的方法在输出特征图上保留背包细节,如红框中所示,而基于 CNN 的输出特征图并没有保留这一有效信息 (这是由于 CNN 的下采样算子降低了输出特征图的空间分辨率) 。

为什么要把 Transformer 来引入到重识别任务中?
因为:(1)与 CNN 模型相比,多头自注意捕获了长距离依赖关系,并驱动模型关注不同的人体部位(如图中的大腿、肩膀、腰部)。
(2)Transformer 无需下采样算子,可以保留更详细的信息。

论文贡献如下:

  1. 首次将 Transformer 应用于 ReID 的方法,并且提出了效果不错的基线模型,效果与 CNN 相当。经过加 tricks 之后,效果达到 SOTA。
  2. 设计了一个区域拼图模块( jigsaw patches module, JPM ),用于将 patch embedding 进行重排(通过 shift and shuffle operation ),以提高模型的鲁棒性和判别能力。
  3. 提出辅助信息编码模块( side information embeddings, SIE ),通过可学习的 embeddings(其实就是可学习的特征向量)对一些外部信息( 比如相机、视角信息 )进行编码。

TransReID网络结构

采用 Resnet 模型作为学习框架,SGD作为优化器,交叉熵损失,三元组损失来提高输出特征序列的鲁棒性。
在这里插入图片描述

1、Transformer-based strong baseline(基于Transformer的强基线)

构造了一个基于 Transformer 的基线,主要分为两个阶段(特征提取阶段,监督学习阶段)。

在这里插入图片描述

 如上图所示,首先将输入图像 x∈RH×W ×C 平均分成 N 个小 patch,{xip|i = 1,2,····,N},外加一个额外的cls token(图中的 * )可学习的嵌入标记标记为 xcls 被前置到输入序列(即 0 索引对应的 embedding,用于编码 patch 的整体特征),再通过 position embedding(学习的全局位置信息,图中[0, 1, 2, …, 8],粉色部分 ) 将新的特征进行位置编码(逐元素相加)得到编码后的特征,输出 [cls] 令牌作为全局特征表示 f,通过添加可学习的位置嵌入来合并空间信息。

那么,馈入 Transformer layer 的输入序列可表示为:Z0

在这里插入图片描述
其中Z0表示输入序列嵌入,P∈R(N+1)×D 为位置嵌入,F 是将斑块映射到 D 维的线性投影。此外,使用 l 个变压器层来学习特征表示。

&emsp考虑到 Transformer 模型会直接将图像分割成不重叠的补丁,那么补丁与补丁之间的局部相邻信息就会丢失,为了解决这个问题,文章提出了滑动窗口的概念,通过它来生成重叠的补丁,两个补丁之间重叠的形状为 (P−S) × P。又因为分辨率为 H × W 的输入图像将被分割成 N 个patch。那么则有:N
在这里插入图片描述
其中 S 设为小于 P,NH 和 NW 分别表示高度和宽度上的分裂斑块数, S越小,图像被分割成的 patch 越多,这里就将什么是馈入图像输入序列黑搞明白了。


 进一步了解一下这个步骤:假设滑动窗口的步长为 s 个像素,patch 的大小为 p × p , p = 16, 2个相邻 patch 重叠区域的面积为 ( p − s ) × p。假设输入图像为 h × w,那么最终输出 patch 数量为:
在这里插入图片描述
不明白的多看几遍哦。

软边三元组损失如下:
在这里插入图片描述

2、Jigsaw Patch Module(区域拼图模块)

 虽然纯基于 Transformer 框架可以在行人重识别任务中获得很好的性能,但是可以明确的一点是,它是利用了来自整个图像的信息进行识别。其中还有一小部分识别任务是针对于遮挡,轮廓显示不清楚的情况,或者只能观察到一部分物体,纯 Transformer 可能就不会达到很好的效果。( 这就告诉我们学习细粒度的局部特征是必要的

 本文将最后一层改为了两个并行分支,通过两个独立的Transformer层学习全局特征和局部特征。假设输入到最后一层的隐藏特征记为在这里插入图片描述,要学习细粒度的局部特征,简单得一种方法将在这里插入图片描述拆分为k个小组,将共享令牌在这里插入图片描述串联起来,然后将k个特征组馈送到共享 Transformer 层中,学习 k 个局部特征,记为在这里插入图片描述。但是它可能不能充分利用转换器的全局依赖关系,因为每个局部段只考虑连续补丁嵌入的一部分。为了解决这个问题,作者提出了 JPM 模块来在patches分组之前将其打乱重新排列,先置换再分组,即shuffle=shift+patch shuffle ,在训练过程中引入的额外干扰也有助于提高对象ReID模型的鲁棒性。

受到 ShuffleNet 的启发,补丁嵌入通过 shift 操作和补丁 shuffle 操作进行洗牌。将嵌入Zl−1的序列洗牌如下:
 Step1:The shift operation:前m个补丁(除了[cls]令牌)被移动到最后,用数学表示就是,
在这里插入图片描述
 Step2:The patch shuffle operation:将 shift 操作得到的 patch 进一步打乱,得到:
在这里插入图片描述
 而后将乱序的 patch 分为 k 组,JPM 用共享的 transformer 将其编码为 k 个局部特征在这里插入图片描述,局部特征  可以覆盖不同部分的补丁 patch,全局特征 fg 和 k 个局部特征用 LID 和 LT 训练,总损失如下:

在这里插入图片描述

 在推理过程中,将全局特征和局部特征整体作为最终的特征表示。

3、 Side Information Embeddings(辅助信息编码模块)

 在获得细粒度的特征表示后,特征仍然容易受到相机或视点变化的影响。换句话说,经过训练的模型很容易因为场景偏差而无法从不同角度区分同一物体。因此,提出了侧信息嵌入模块(SIE),将非视觉信息,如摄像头或视点,纳入嵌入表示,以学习不变特征。
在这里插入图片描述
 受位置嵌入(Position Embedding)的启发,将 SIE 模块以贴片的方式嵌入到 Transformer layer 前面的输入序列当中,具体来说,如果一幅图像的摄像头 ID 为 r ,则其摄像头的 Embedding 可以记为 SC ( r )。不同于 Position Embedding 在各 patch 之间的变化,摄像机 Embedding 对于一幅图像的所有 patch 都是相同的。另外,如果物体的视点是可用的无论是通过视点估计算法还是人工标注,都可以将视点标签 q 编码为 SC( q ) ,用于图像的所有 patch。

现在的问题是如何集成两种不同类型的信息(一个是视角信息,另一个是相机信息 )。 一个简单的解决方案可能是将两个嵌入直接加在一起,如 SC[r] + SV [q] 。这种方法不可行,因为由于冗余信息或对抗性信息,这可能会使两种嵌入相互抵消。只有寻求新的解决方案,文章提议将摄像机和视觉角度联合编码为 S(C,V)∈R(NC×NV)×D。将摄像机的 ID r 和视点的 ID q 的输入序列按如下方式输入到变压器层中:
在这里插入图片描述
其中,Z0 就是文中的公式 (2),λ 是平衡 SIE 权重的超参数。

 由于每个 patch 的位置嵌入是不同的,但在不同图像上是相同的,并且 S(C,V) 对于每个 patch 是相同的,但对于不同的图像可能有不同的值,这里有点绕,仔细理解。

实验结果

在这里插入图片描述
在这里插入图片描述

总结

 在本文中,我们研究了一个用于对象 ReID 任务的纯转换器框架,并提出了两个新颖的模块,即拼图补丁模块( jigsaw patch module, JPM )和侧面信息嵌入( side information embedding, SIE )。最终的框架 TransReID 在几个流行的人/车辆 ReID 数据集上的表现大大超过了所有其他最先进的方法。基于 TransReID 取得的有前景的结果,T在ReID任务中有很大的潜力被进一步探索。基于cnn方法的丰富经验表明,基于变压器的网络具有更好的表示能力和更低的计算成本。
 本文设计了一个纯 Transformer 框架来实现 ReID,可以说是开创性的工作,为识别任务的研究方向提供了参考,证明 Transformer 应用到行人重识别是可行的,并且可以达到很好的效果,如今的 ReID 准确率已经达到并无限接近瓶颈时期,这无疑为今后科研提出另外一种思路。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号