paper https://arxiv.org/abs/2104.03516
github https://github.com/leeyegy/TokenPose
人体姿态估计深度依赖于视觉线索和部位之间的解剖约束来定位关键点。大多数现有的基于cnn的方法在视觉表示方面做得很好,但是,缺乏明确学习关键点之间的约束关系的能力。本文提出了一种基于Token表示的人体姿态估计方法(TokenPose)。详细地说,每个关键点都被显式地嵌入作为一个token,以同时从图像中学习约束关系和外观线索。大量的实验表明,small和large TokenPose模型与最先进的基于CNN的模型相当,同时更轻。具体来说,我们的TokenPose-S和TokenPose-L在COCO验证数据集上分别达到72.5和75.8 AP,参数显著减少(80.6%;56.8%)和GFLOPs (75.3%;24.7%)。
图1. 预测左脚踝位置的过程。对于视觉线索学习(visual cue learning),提出的TokenPose在前几层关注全局上下文,然后随着网络的深入逐渐收敛到一些局部区域。在最后几层中,TokenPose依次考虑了臀部和膝盖这两个靠近目标关键点的部位,最终确定了左脚踝的位置。对于约束线索学习(constraint cue learning),TokenPose表明左脚踝定位主要依赖于左膝和右脚踝,分别对应邻接约束和对称约束。
二维人体姿态估计旨在定位人体解剖学关键点,该关键点的定位深度依赖于视觉线索和关键点约束关系。它是计算机视觉领域的一项基础性工作,受到了学术界和工业界的广泛关注。
在过去的十年中,深度卷积神经网络凭借其强大的视觉表示和识别能力,在人体姿态估计方面取得了令人印象深刻的表现[8,29,22,21,38,12,37,24]。由于热图表示已成为编码关键点位置的标准标签表示,现有模型大多倾向于使用全卷积层来保持特征图的二维结构,直到网络输出。然而,这种CNN模型通常没有抽象出具体的变量来直接表示关键点实体,这限制了模型显式捕获关节点部位之间约束关系的能力。
最近,Transformer[35]及其源自自然语言处理(NLP)的变体已经成为各种视觉任务的新选择。它的全局依赖建模能力比CNN更强大,这为有效地捕捉视觉实体/元素之间的关系指明了一条有前途的途径。而在NLP领域中,所有的语言元素,如单词或字符,通常都是通过固定维数的嵌入或标记向量进行符号化,以便更好地度量它们在向量空间中的相似性,如word2vec[20]。
我们借鉴了token的概念,提出了一种新的基于token的人体姿态估计表示,即TokenPose。具体地说,我们执行两种不同类型的标记化: 关键点标记和视觉标记。
图1显示了TokenPose模型如何预测左脚踝位置的示例。最后通过我们的网络输出的基于token的表示来估计关键点的位置。图2说明了TokenPose的体系结构。
值得注意的是,TokenPose从大量数据中学习关键点之间的统计约束关系。这些信息被编码到关键点标记(keypoint token)中,这些标记可以通过向量相似度记录它们之间的关系。在推理过程中,TokenPose将visual token与keypoint token关联起来,这些visual token的相应patch可能包含目标关键点。通过可视化注意力,我们可以观察它们如何交互,以及模型如何利用线索定位关键点。
图2. TokenPose示意图。
将CNN Backbone网络提取的特征图均匀分割为patches并将其平化为1维向量。采用线性投影(linear projection)的方法嵌入展平后的向量,生成视觉标记(visual tokens)。此外,将随机初始化关键点标记(keypoint tokens)以表示每种特定类型的关键点。然后,将视觉标记和关键点标记的1D序列作为Transformer编码器的输入。appearance cues和anatomical constraint cues都是通过每个Transformer层中的自我注意交互来捕获的。最后,使用最后一个Transformer层输出的关键点token通过一个MLP head来预测关键点热图。
2.1. 人体姿态识别 深度卷积神经网络已被应用于人体姿态估计,极大地提高了模型性能[32,13,29,38,22,17,21,4,7]。最近基于热图的方法倾向于通过叠加更深层次的网络结构来提高性能。Hourglass[22]通过堆叠blocks,以提高热图估计质量。SimpleBaseline[38]通过叠加转置的卷积层设计了一个简单的架构,并取得了令人印象深刻的性能。HRNet[29]在整个过程中保持高分辨率表示,以便提供空间上精确的热图估计。然而,卷积神经网络仍然难以捕捉和建模关键点之间的约束关系,而关键点对人体姿态估计至关重要。
2.2. Vision Transformer Transformer采用了基于自注意和前馈网络的编解码器架构,在NLP中取得了很大的成功。最近,基于transformer的模型[11,34,5,14,44,45,9,39,6,36,41,28]在各种视觉任务中也显示出巨大的潜力。
目标检测 DETR提出了一种基于Transformer的结构来处理end-to-end 目标检测,有效地消除了对许多手工设计组件的需求。Deformable DETR则提出让关注模块只关注参考点周围的一小组key采样点,实现了比DETR更好的性能。UP-DETR[9]通过设计随机裁剪patches来无监督地预训练DETR。
**图像分类 ** ViT提出了一个具有patch-embedding表示的纯Transformer模型,该模型在大量数据上进行预训练,然后在ImageNet数据集上进行微调。DeiT在ViT中引入了一个distillation token,从教师网络中学习知识,避免了在大数据集上进行预训练。Tokens2Token逐步将图像编码为tokens,并对局部结构信息进行建模,以减少序列长度。
人体姿态识别 最近的一些工作[27,15,18,39,43,28]介绍了用于人体姿态估计的Transformer。PoseFormer[43]引入了Transformer用于基于视频帧中2D姿态序列的3D姿态估计。TransPose[39]倾向于利用Transformer中内置的注意层来揭示预测关键点的长期依赖关系。然而,TransPose缺乏直接建模关键点之间的约束关系的能力。在这项工作中,我们建议显式地表示关键点作为token嵌入,同时学习视觉线索和约束关系. POET[15]是多人姿态识别,参照的DETR使用二部图匹配将姿态识别问题转化为集合预测问题,但效果不够好。
我们首先回顾基于热图的全卷积网络(FCNs)用于人体姿态估计,然后描述我们基于token的设计。
人体姿态估计的目标是在一幅大小为H x W x3的图像中定位N个关键点或部位。目前,基于heatmap的全卷积神经网络[37,4,22,40,7,23,38,29]由于其高性能,已成为主流解决方案。
目前广泛采用的方法是利用CNN生成多分辨率图像特征图,再用回归器regressor估计大小为 H ^ × W ^ \hat{H} \times \hat{W} H^×W^的N张热图。为了生成N张热图,使用1x1卷积将热图通道数降为关节点数N。
虽然现有的基于FCN的方法已经取得了很大的成功,但是CNN很难显式地捕获关键点之间的约束关系,这导致了该任务的模型设计不够优化。
Visual tokens
标准的Transformer接受一个token嵌入的一维序列作为输入。为了处理二维图像,我们跟从ViT的流程。一张输入图像 x ∈ R H × W × C x \in \mathbb{R}^{H\times W\times C} x∈RH×W×C被分为网格状共 H P h × W P w \frac{H}{P_h} \times \frac{W}{P_w} PhH×PwW个patches, 每个patch的尺寸为Ph x Pw。每一个patch p被展平成尺寸为Ph x Pw x C的一维向量。为了获得visual token v, 每一个展平的patch p通过线性投影函数 f : p → v ∈ R d f:p \to v\in \mathbb{R}^d f:p→v∈Rd被映射为 d维嵌入。 具体参数设置可见表1.
考虑到人体姿态识别是一个位置敏感的视觉任务,2D的位置嵌入[35] pei被添加到每个visual token vi中以产生输入的visual tokens [visual]={v1+pe1, v2+pe2, …, VL+peL}, 其中 L = H × W P h × P w L=\frac{H\times W}{P_h \times P_w} L=Ph×PwH×W是visual tokens的数量。用这种方式,每一个visual token被产生以代表原始图像的特定区域。
Keypoint tokens
我们添加了N个可学习的d维嵌入向量来表示N个目标关键点。我们将keypoint tokens表示为[keypoint]。来自输入图像块的visual tokens加上keypoint tokens作为Transformer的输入。Transformer编码器输出处的N个keypoint tokens的状态作为N个关键点表示。
Transformer
给定1D token嵌入序列T = {[visual], [keypoint]}作为输入,Transformer编码器通过叠加M个blocks以学习关键点特征表示。每个block包含一个Multi-head Self-attention (MSA)模块和一个Multilayer Perceptron(MLP)模块。此外,在每个模块之前采用层归一化(LN)。
**Self-Attention(SA)**可以表述为:
其中$W_Q,W_K,W_V \in \mathbb{R}^{d \times d} 是 三 个 线 性 投 影 层 的 可 学 习 参 数 , 是三个线性投影层的可学习参数, 是三个线性投影层的可学习参数,T^{l-1}$是第l-1层的输出,d是token的维度,dh=d
多头自注意力MSA是SA的拓展,其有h个SA操作,h被称为head.在MSA中dh一般被设置为d/h .
M S A ( T ) = [ S A 1 ( T ) ; S A 2 ( T ) ; . . . ; S A h ( T ) ] W P MSA(T)=[SA_1(T);SA_2(T);...;SA_h(T)]W_P MSA(T)=[SA1(T);SA2(T);...;SAh(T)]WP
其中 W P ∈ R ( h ⋅ d h ) × d W_P\in \mathbb{R}^(h\cdot d_h)\times d WP∈R(h⋅dh)×d. 最终的热图预测将会基于M个blocks的transformer encoder输出的[keypoint] tokens,即 T 1 M , T 2 M , . . . , T N M {T^M_1,T^M_2,...,T^M_N} T1M,T2M,...,TNM。 N是关节点数,M是layer数嘛?
热图估计
为了得到尺寸为 H ^ × W ^ \hat{H}\times \hat{W} H^×W^的二维热图, Transformer编码器输出的d-维[keypoint]token通过线性投影被映射到 H ^ ⋅ W ^ \hat{H}\cdot \hat{W} H^⋅W^-维的特征向量。映射的1D向量然后被重塑为2D热图。此外,采用均方误差损失函数MSE对预测热图和GT热图进行比较。
混合架构
输入的视觉标记也可以从卷积神经网络[16]输出的特征图中提取,而不是直接操作原始图像块。在混合架构中,采用CNN更有效地提取底层图像特征。
我们为TokenPose提供混合和纯基于Transformer的变体。对于混合结构,使用不同深度的卷积神经网络进行图像特征提取。配置细节如表1所示。注意,TokenPose-T是纯粹的基于transformer的变体。TokenPose-S , TokenPose-B和TokenPose-L分别采用stem-net2、HRNet-W32[29]和HRNet-W48[29]作为CNN Backbone。为了方便起见,本文采用了简记*法。例如,TokenPose-L/D24表示具有24个Transformer层的“大型”变体。除非另有说明,TokenPose-S和TokenPose-L被用作TokenPose-Small-v2和TokenPose-Large/D24的缩写。
后续实验结果可以看到纯Transformer架构的TokenPose-Tiny效果不是太好,和大patch size难以训练有关吧,感觉密集预测任务这么大的patch size很容易损失细节信息的。
使用COCO数据集,Object Keypoint Similarity(OKS)作为评价指标,模型训练时,使用Adam优化器,基本设置和HRNet以及SimpleBaseline相同。
实现细节 在本文中,我们采用了两阶段top-down的人体姿态估计范式。首先由一个人检测器检测单个人实例,然后预测关键点。我们在验证集和测试开发集上采用SimpleBaseline[38]提供的广泛使用的人体检测器。为了减轻量化误差,采用了DarkPose中[42]的坐标译码策略。在我们的工作中,基础学习率被设定为1e-3,在第200和260个epoch分别下降到1e-4和1e-5。总的训练过程需要300个epoch,因为Transformer结构倾向于依赖更长的训练来收敛。我们遵循HRNet中的数据增强方式。
与其它方法对比
如表2所示,与其他最先进的方法相比,我们提出的TokenPose通过更少的模型参数和GFLOPs获得了有竞争力的性能。与采用ResNet-50为Backbone的SimpleBaseline[38]相比,我们的tokenposs -v1将AP提高了2.1点,模型参数(80.6%)和GFLOPs(75.3%)均显著降低。与使用ResNet-152作为骨干的SimpleBaseline[38]相比,我们的tokenposs -v2实现了更好的性能,而只使用了9.0%的模型参数。与HRNet-W32和HRNet-W48相比,TokenPose-B和TokenPose-L分别在模型参数小于50%的情况下取得了相似的结果。此外,TokenPose-T获得65.6 AP,模型参数只有5.8M, GFLOPs为1.3,没有任何卷积层。请注意,Transformer的所有部件都是从头开始训练的,没有任何预先训练。
此外,表5显示了我们的方法和COCO测试开发集上现有的最先进的方法的结果。以384x288为输入分辨率,我们的TokenPose-L/D24达到75.9 AP。 TokenPose-L总体看来(计算量+AP)还是可以比过HRNet-W48的。
使用MPII姿态识别数据集,使用PCKh作为评价指标,输入图像尺寸256x256. 原来HRNet原文里面竟然没有HRNet-W48在MPII上的效果。(小疑问:HRNet-W32在原文中指标更好一些,所以是文中作者自己实现的效果更不好?
Keypoint token fusion 中间监督被广泛用于帮助模型训练和提高热图估计质量,特别是当网络变得非常深入时[22,37,33,2]。类似地,我们提出将Transformer编码器的不同层输出的keypoint token进行相应的串联,即“Keypoint token fusion”,以帮助模型训练。以12个Transformer层的TokenPose-L+/D12为例,将第4层、第8层和第12层输出的keypoint token进行串联。然后将产生的三倍长的keypoint token发送到MLP head中得到最终的热图。
我们在表6中报告了TokenPose和TokenPoseL+/D12有和没有Keypoint token fusion的结果。对于TokenPose-L+/D12,使用Keypoint token fusion使结果提高了0.2 AP。然而,对于较小的变体,如TokenPose-S,反而会导致性能下降。对于具有Keypoint token fusion的TokenPose - large,我们发现较低的Transformer层比 较高的层提供了更有意义的证据来理解交互过程。我们将此归因于Keypoint token fusion,它使最终的关键点表示能够直接利用来自早期层的信息.
位置嵌入 关键点定位是一项位置敏感的视觉任务。为了说明位置嵌入的效果,我们基于TokenPose-S-v1进行了不同位置嵌入类型(无位置嵌入、二维正弦和可学习位置嵌入)的实验。如表7所示,采用位置嵌入最多可显著提高性能5.5 AP。特别是,二维正弦位置嵌入的效果优于可学习位置嵌入,这是意料之中的,因为预测热图需要二维空间信息。
Scaling 模型缩放是一种广泛使用的提高模型性能的方法,包括宽度缩放和深度缩放。如表3所示,增加深度和宽度都有助于改善结果。
为了说明TokenPose如何显式地利用部件之间的视觉线索和约束线索来定位关键点,我们将推理过程中的细节可视化。我们观察到,对于大多数常见的例子,单个模型具有类似的行为。我们从COCO验证集中随机选择一些样本,并在图3和图5中显示详细信息。
Appearance Cue。在图3中,我们可视化了不同Transformer层的关键点标记(keypoint tokens)和可视标记(visual tokens)之间的注意力映射图。根据关键点标记和视觉标记之间的注意得分,形成注意图。注意,我们根据一维注意力得分的原始空间位置对其进行可视化重塑。
图3. tokenpose-S中的注意图可视化(包括关键点标记(如鼻子、左肘、右肘等)与不同层的可视标记),该模型由12个Transformer层组成。请注意,我们将所有视觉标记转换为图像中相应的patch区域。更红的颜色区域意味着给定类型的关键点在这些patch/视觉标记上有更高的关注度。上和下所示的例子分别为无遮挡和有遮挡的情况。
我们选择图3中的两个图像进行比较。正如我们所看到的,随着层深度的增加,keypoint token捕获的是逐渐从整体外观线索到更精确的局部线索。在前几层中,多个拥挤的人可能同时给予外观线索作为干扰,但模型可以逐步关注目标人。在随后的层中,不同类型的keypoint token分别关注其相邻的关键点和具有高置信度证据的关节。在推断被遮挡的关键点时,模型表现不同。如图3所示,我们注意到被遮挡的左踝关节keypoint token更加关注其对称关节(即右踝关节),从而获得更多的线索。
Keypoint constraint cue。第二、四、六、八、十、十二自注意力层的关键点标记注意图注意层如图5所示。在前几层中,每个关键点都关注几乎所有其他关键点,以构建全局上下文。随着网络的深入,每个关键点往往主要依赖于几个部分来产生最终的预测。具体来说,我们在表8中给出了基于最后一层自我注意的一些典型关键点的前2个约束。特别地,我们观察到前2个约束倾向于目标关键点的相邻对称约束,这也符合人类视觉系统。例如,预测右手腕主要关注右肘和左手腕的约束,分别对应于相邻约束和对称约束。
Keypoint token从数据中学习先验知识。在TokenPose中,作为第一个Transformer层输入的输入[keypoint] tokens是完全可学习的参数。这些知识与整个训练数据集的偏差有关,但与任何特定的图像无关。在推理过程中,将利用它来促进模型从具体图像中解码视觉信息,并进一步作出预测。
我们指出,这些[keypoint] tokens 的行为类似于DETR[5]中的对象查询(object queries),其中每个query最终从数据中学会了优先偏好,以专门化特定的区域和框大小。在我们的设置中,输入[keypoint] tokens从数据集学习关键点之间的统计相关性,作为先验知识。
为了显示这些输入关键点标记编码了什么信息,我们计算它们的内积矩阵。在缩放和归一化之后,矩阵如图4所示。我们可以看到一个关节点趋向于与它的对称关键点或相邻关键点高度相似。例如, 左髋多与右髋、左肩相关,相似度分别为0.104和0.054。这一发现符合我们的常识,也揭示了模型的学习内容。我们还注意到,,存在一个工作[31],通过计算MPII数据集标注的互相关,以分析关节之间的统计分布。相比之下,我们的模型能够从训练数据中自动学习先验知识,并显式地将其编码到输入的[keypoint] tokens中。
在本文中,我们提出了一种新的基于标记tokens的表示人类姿态估计,即TokenPose。特别是,**我们将图像分割成小块(patches)以产生视觉标记(visual tokens),并将关键点实体表示为标记嵌入。**通过这种方式,提出的TokenPose能够通过自我注意交互显式地捕获外观线索和约束线索。我们证明,没有任何预训练的的低容量纯Transformer架构也可以很好地工作。此外,与最先进的基于CNN的方法相比,该混合体系结构在较低的计算成本下获得了具有竞争力的结果。