类别无关的姿态估计ECCV2022

news2024/12/26 23:31:39

现有的2D姿态估计工作主要集中在某一类别,例如人类、动物和车辆。然而,有很多应用场景需要检测unseen对象类的姿态(或关键点)。因此作者提出CAPE任务(Category-Agnostic Pose Estimation),该任务旨在创建一个姿态估计模型,该模型能够在只给定少数样本的情况下检测任何类别物体的姿态,并定义关键点。为了实现这一目标,作者将姿态估计问题形式化为关键点匹配问题,并设计了一个新框架,称为pose匹配网络(POMNet)。此外,还介绍了多类别姿态(MP-100)数据集,这是一个由100个对象类别组成的2D姿态数据集,包含超过20K个实例,设计用于开发CAPE算法。实验表明,POMNet在很大程度上优于其他基线方法。

来自:Pose for Everything: Towards Category-Agnostic Pose Estimation

目录

  • 背景概述
  • 相关工作
    • 2D姿态估计
    • 类别无关姿态估计
    • 小样本学习
  • 类别无关姿态估计CAPE
    • 问题定义
    • 姿态匹配网络POMNet
      • 特征提取
      • 关键点交互
      • 匹配头
      • 扩展到K-shot
  • 多类别姿态数据集MP-100
  • 评价指标

背景概述

2D姿态估计(也称为关键点定位)旨在预测实例的预定义语义部分的位置。近年来在计算机视觉领域受到极大的关注。例如,人体姿态估计已被广泛应用于虚拟现实(VR)和增强现实(AR);动物姿态估计在生物科学中具有重要意义;车辆姿态估计对于自动驾驶至关重要。

来自不同领域的 real-world 应用通常涉及检测各种新颖物体的姿态。例如,生物学家可以通过分析植物的姿态来研究植物的生长。然而,传统的姿态估计器是特定于类别的,只能应用于他们训练的类别。为了检测新物体的姿态,用户必须收集大量的标记数据并设计特定类别的姿态估计模型,这既耗时又费力。更糟糕的是,稀有物体(如濒危动物)的数据收集和需要领域知识(如医学图像)的语义关键点注释极具挑战性。因此,对开发能够在不同类别中推广的姿态估计方法是意义重大的。

因此,作者介绍了一项重要但具有挑战性的任务,称为类别无关姿态估计(CAPE)。如图1所示,与只能预测类别指定的姿态的传统姿态估计方法不同,CAPE旨在使用单个模型来检测任何类别的姿态。给定新类别的support图像和相应的关键点定义,类无关姿态估计器预测query图像中相同类别的姿态。通过这种方式,可以根据任意关键点定义生成任何感兴趣对象的姿态。大大降低了每个新类的数据收集、模型训练的成本。

fig1

  • 图1:类别特定姿态估计与类别无关姿态估计(CAPE)。
  • a:传统的姿态估计任务是特定于类别的。估计器是在包含单个类别的对象的数据集上训练的,并且只能预测该类别的姿态。
  • b:CAPE任务要求姿态估计器在给定关键点定义的情况下检测任意类别的姿态。在包含多类别对象的姿态数据集上训练后,姿态估计器可以在给定一个或几个support图像的情况下推广到新的类别。

有几个挑战阻碍了计算机视觉社区设计能够预测大量物体类别的姿态系统:

  • 首先,大多数姿态估计方法为有监督回归任务,需要数千个标记的图像来学习从输入图像到关键点位置的映射。
  • 其次,不同的对象可能具有不同的关键点定义和未知数量的关键点。学习统一的输出表示并利用结构信息是非常重要的。
  • 第三,对于通用姿态估计方法的开发,几乎没有具有许多视觉类别的大规模姿态估计数据集,以前的数据集大多只包含一个类别(例如人体)。

相关工作

2D姿态估计

在计算机视觉社区中有两种类型的关键点。语义点 semantic points 是具有明确语义的点(例如左眼),而感兴趣点 interest points 属于low-level points(比如corner points)。2D姿态估计侧重于预测对象的语义点,例如人体部位、面部标志、手关键点和动物姿态。然而,当前的姿态估计方法和数据集只关注单个类别的关键点,不能支持跨类别的姿态估计。

现有方法可分为两类:基于回归的方法和基于heatmap的方法。基于回归的方法直接将图像映射到关键点坐标。这种方法对于实时应用是灵活和有效的。然而,它们很容易受到遮挡和运动模糊的影响,从而导致性能较差。基于热图的方法使用热图对关键点位置进行编码。由于具有良好的定位精度,基于热图的方法在二维姿态估计领域占主导地位。最近关于姿态估计的工作主要集中在设计强大的卷积神经网络或基于ViT的架构。然而,他们只专注于检测训练过程中出现的对象类别的关键点。相比之下,作者提出的方法能够检测任意对象的关键点。

现有的2D姿态估计数据集仅关注于单个类别。如图2所示,大多数注意力都集中在与人类相关的类别上,例如,人体、人脸和人手,这些类别有许多大规模的数据集。对于其他在长尾分布上的类别,数据集在规模和多样性方面都相对有限。尽管如此,分析这些长尾对象类别在学术界和工业界都具有重要意义。例如,车辆姿态估计对于自动驾驶非常重要。动物姿态估计在生物科学中具有重要意义。室内家具姿态估计对于开发家用机器人非常重要。在该文中,作者构建了第一个大型基准测试(MP-100数据集),该数据集包含各种视觉类别的姿态标注。

fig2

  • 图2:流行的2D姿态估计数据集的类别和图像数量。

类别无关姿态估计

类别无关的估计可以应用于许多计算机视觉下游任务。这种工作主要与StarMap有关,它提出了用规范视图位置编码的类别无关的3D关键点表示。然而,StarMap仅适用于刚性对象(如家具),并依赖于目标类别的几个昂贵的3D CAD模型来识别预测的关键点。相比之下,CAPE旨在根据一个或几个support图像给出的任何手动关键点定义来预测任何对象类别(刚性和柔性)的2D姿态。

小样本学习

小样本学习旨在只使用几个例子识别新类别。最近的小样本学习方法可以大致分为三类,即基于度量学习的方法、基于元学习的方法和基于数据增强的方法。

  • 基于度量学习的方法:原型网络学习support数据中每个类的原型(嵌入特征),然后将查询数据分类为与原型“最近”的类。
  • 基于元学习的方法:模型无关元学习和基于LSTM的元学习旨在搜索一组良好的初始化权重,以便分类器可以通过仅对少数support样本进行微调来快速推广到新任务。
  • 基于数据增强的方法:生成新类的合成示例,通过使用这些合成示例进行再训练来提高性能。

作者提出的方法属于基于度量学习的方法。这是CAPE的第一个框架。此外,关键点交互模块(KIM,Keypoint Interaction Module)是专门为CAPE设计的,用于捕捉不同关键点之间的关系以及支持和查询图像之间的关系。

类别无关姿态估计CAPE

问题定义

该文介绍了一种新的任务,称为类无关姿态估计(CAPE)。与预测单个已知/可见类别的关键点的现有姿态估计任务不同,CAPE需要单个模型来检测任意类别的关键点。更具体地说,给定一个或几个具有unseen类别的关键点定义的support样本,可以在不标记大规模监督和重新训练模型的情况下检测该类别的对象关键点,从而显著降低数据注释和参数调整的成本。

为了验证CAPE模型在unseen类别上的泛化能力,要求其在基本类别上进行训练,但在新类别上进行评估。基本类别和新类别是互斥的,其中测试集上的类别不会出现在训练数据中。在测试阶段,CAPE模型提供了一个unseen类别的 K K K个标记的support样本。需要模型来检测与支持样本属于同一类别的query样本的姿态。从这个意义上说,CAPE任务可以被视为一个 K K K-shot姿态估计问题。特别地,当 K = 1 K=1 K1时,这是one-shot姿态估计。

姿态匹配网络POMNet

传统的姿态估计器既不能应用于unseen物体类别,也不能应用于同一类的不同关键点定义场景(例如,19个关键点人脸定义和68个关键点的人脸定义)。为了实现CAPE,作者将该任务定义为匹配问题,并提出了一个新的框架,称为POse Matching网络(POMNet)。POMNet通过计算每个位置的reference支持关键点特征和query图像特征之间的匹配相似性来工作。因此,POMNet能够处理具有不同关键点编号和定义的各种类别。如图3,POMNet包括三部分:特征提取器 Θ S \Theta_{S} ΘS Θ Q \Theta_{Q} ΘQ,关键点交互模块KIM,匹配头MH。

fig3

  • 图3:POMNet概述。特征提取器 Θ S Θ_S ΘS Θ Q Θ_Q ΘQ分别提取support关键点特征和query图像特征。关键点交互模块(KIM)通过在关键点之间传递消息并捕捉查询和支持图像之间的关系来细化关键点特征。匹配头(MH)将细化的关键点特征和查询图像特征相结合,以预测查询图像中的关键点定位。MSE损失用于监督模型。

特征提取

使用两个并行的特征提取器来提取支持关键点特征和查询图像特征。在实现中,使用在ImageNet数据集上预训练的ResNet-50作为主干。对于support image I S I_{S} IS,特征提取器 Θ S \Theta_{S} ΘS用于提取support的特征 F S = Θ S ( I S ) F_{S}=\Theta_{S}(I_{S}) FS=ΘS(IS)。支持样本的关键点注释在热图表示中提供。我们将支持样本的GT热图表示为 H S ∗ H^{*}_{S} HS H S ∗ j ∈ R H × W × 1 H^{*j}_{S}∈R^{ H×W×1} HSjRH×W×1表示第 j j j个关键点的热图。给定支持样本的支持图像特征和GT热图,我们可以获得相应的关键点特征: F ^ S j = A v g P o o l ( U p s a m p l e ( F S ) ⊗ H S ∗ j ) ,   j = 1 , 2 , . . , J \widehat{F}_{S}^{j}=AvgPool(Upsample(F_{S})⊗H^{*j}_{S}),\thinspace j=1,2,..,J F Sj=AvgPool(Upsample(FS)HSj),j=1,2,..,J其中, F S ∈ R h × w × c F_{S}\in R^{h\times w\times c} FSRh×w×c表示support图像的特征, F ^ S j ∈ R 1 × 1 × c \widehat{F}_{S}^{j}\in R^{1\times 1\times c} F SjR1×1×c表示第 j j j个关键点的特征。 U p s a m p l e Upsample Upsample是上采样操作,它将support图像特征重新整形为与相应热图相同的大小。 ⊗ ⊗ 为像素级相乘。 J J J为reference的关键点数量。

对于query图像 I Q I_Q IQ,应用特征提取器 Θ Q Θ_Q ΘQ来提取查询图像特征 F Q = Θ Q ( I Q ) F_{Q}=\Theta_{Q}(I_{Q}) FQ=ΘQ(IQ)。然后折叠查询图像特征的空间维度并重塑为一个序列。

关键点交互

KIM旨在通过有效的注意力机制来增强support关键点特征。首先通过完全连接来减少支持关键点特征的通道数。然后将不同关键点的特征作为序列输入。由于不同类别的关键点数量不同,作者在末尾添加了几个带有padding掩码的伪特征,以保持固定数量 L L L的输入特征(文中实现为 L = 100 L=100 L=100),这使得KIM能够适应各种关键点数量。

KIM有三个Transformer块,每个Transformer块由两个主要组件组成,即Self-Attn和Cross Attn。对于Self-Attn,自注意力层学习在关键点之间交换信息并利用固有的对象结构。它允许关键点特征交互,并使用注意力权重聚合这些交互。对于Cross-Attn,关键点特征还与query图像特征交互,以对齐特征表示并减小gap。具体地,Cross-Attn被应用于聚合query图像中的有用信息。关键点特征作为Q,序列化的查询图像特征作为K和V。查询图像特征的通道维度被减小以匹配关键点特征的通道尺寸。

KIM对support关键点特征进行了处理和细化, { F ‾ S j } j = 1 L = K I M ( { F ^ S j } j = 1 L , F Q ) \left\{\overline{F}_{S}^{j}\right\}_{j=1}^{L}=KIM(\left\{\widehat{F}_{S}^{j}\right\}_{j=1}^{L},F_{Q}) {FSj}j=1L=KIM({F Sj}j=1L,FQ),作者排除了伪填充特征,并通过选择基于ones的前 J J J个有效关键点特征来获得精细的关键点特征 { F ‾ S j } j = 1 J \left\{\overline{F}_{S}^{j}\right\}_{j=1}^{J} {FSj}j=1J,其中 J ≤ L J≤L JL

匹配头

给定细化的关键点特征作为参考,匹配头(MH)的目标是在用热图编码的query图像中寻找最佳匹配位置。

将细化的关键点特征扩展到与查询图像特征 F Q F_Q FQ相同的空间形状。然后将扩展的特征与查询图像特征连接起来。最后,使用解码器 Θ M Θ_M ΘM来估计关键点热图。该过程如下: H Q j = Θ M ( E x p a n d ( F ‾ S j ) ⊕ F Q ) ,   j = 1 , 2 , . . . , J H_{Q}^{j}=\Theta_{M}(Expand(\overline{F}_{S}^{j})⊕ F_{Q}),\thinspace j=1,2,...,J HQj=ΘM(Expand(FSj)FQ),j=1,2,...,J其中, ⊕ ⊕ 为沿通道拼接, E x p a n d Expand Expand为空间扩展操作,即在空间上复制细化的关键点特征以适应查询图像特征的空间大小。 H Q j H_{Q}^{j} HQj是第 j j j个关键点的预测热图。解码器 Θ M Θ_M ΘM由一个3×3卷积层组成,然后是反卷积层,以获得更高的分辨率。像素均方误差(MSE)损失被应用于监督POMNet训练: L M S E = 1 J H W ∑ j = 1 J ∑ p ∣ ∣ H Q j ( p ) − H Q ∗ j ( p ) ∣ ∣ 2 L_{MSE}=\frac{1}{JHW}\sum_{j=1}^{J}\sum_{p}||H_{Q}^{j}(p)-H_{Q}^{*j}(p)||^{2} LMSE=JHW1j=1Jp∣∣HQj(p)HQj(p)2其中, H H H W W W为热图的高和宽。 H Q j ( p ) H_{Q}^{j}(p) HQj(p) H Q ∗ j ( p ) H_{Q}^{*j}(p) HQj(p)是位置 p p p处的预测像素强度和GT像素强度。

扩展到K-shot

K K K K > 1 K>1 K>1)个support图像可用时,首先单独提取每个样本的support关键点特征,然后计算 K K K个样本之间的平均值。后续pipeline(包括KIM和MH)与1-shot设置的pipeline完全相同。有了更多的支持图像,POMNet能够捕获更健壮的关键点特征,以处理类别内的差异和关键点定义的模糊性。

多类别姿态数据集MP-100

过去的姿态估计数据集仅由一个类别的对象组成,并且没有用于CAPE任务的现有数据集。因此,作者构建了第一个包含多个类别对象的大规模姿态数据集,称为MP-100。MP-100数据集总共涵盖了100个子类别和8个超类别(人手、人脸、人体、动物体、动物脸、衣服、家具和车辆),如图4所示。
fig4

  • 图4:MP-100概览。

MP-100从几个流行的2D姿态数据集收集了超过18K的图像和20K的注释。不同类别的关键点编号各不相同,从8到68不等。将收集到的100个类别划分为train/val/test set(70个用于训练,10个用于验证,20个用于测试,train/val/test set分别互斥)。根据常见设置,形成五个测试集不重叠的分割,并评估五个分割的平均模型性能。在这种情况下,每个类别都被测试为不同拆分的新类别,从而避免了类别偏差。此外,为了平等对待所有类别,作者尽量平衡了不同类别之间的实例数量,见图5。
fig5

  • 图5:每个类别的实例数量。

评价指标

对于MP-100数据集上的每个分割,在训练集上训练POMNet,在验证集上验证性能,最后在测试集上评估模型。PCK(Probability of Correct Keypoint,正确关键点百分比)是一种常用的姿态估计指标。如果预测的关键点和GT关键点之间的归一化距离小于某个阈值 σ σ σ,则认为这是正确的: P C K = 1 N ∑ i = 1 N 1 ( ∣ ∣ p i − p i ∗ ∣ ∣ 2 d ≤ σ ) PCK=\frac{1}{N}\sum_{i=1}^{N}1(\frac{||p_{i}-p_{i}^{*}||^{2}}{d}\leq\sigma) PCK=N1i=1N1(d∣∣pipi2σ)其中 p i p_i pi p i ∗ p^{*}_{i} pi分别是预测的和GT关键点位置。 1 1 1是指示函数。 d d d是GT边界框的最长边,用作归一化项。

计算总的 N N N个关键点的正确比率。在实验中,一般报告PCK@0.2( σ = 0.2 σ=0.2 σ=0.2)。为了最大限度地减少类别偏差,还需报告所有5次数据拆分的平均PCK结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sketch哪个版本好用?

使用最新版本的 Sketch 是很有意义的。一方面,最新版本通常会有新的功能和改进,使设计师更方便地完成工作。另一方面,使用最新版本还可以避免出现因版本不兼容而无法打开源文件的问题。此外,最新版本通常会更稳定,因此…

Linux command(sar)

说明 sar命令是一个系统性能监测工具,用于收集、报告和分析系统的各种资源使用情况。以下是sar命令的基本用法: sar [选项] [时间间隔] [次数] 选项:可用的选项包括-a(显示所有资源使用情况)、-b(显示I/…

图片修复增强调研

Real-ESRGAN 工程地址:https://github.com/xinntao/Real-ESRGAN 效果: 人脸增强部分,调用的GFPGAN. GFPGAN 工程地址:https://github.com/TencentARC/GFPGAN 论文效果: BasicSR-ESRGAN: 项目地址&a…

[Qt编程之Widgets模块] -001: QButtonGroup抽象容器

1.QButtonGroup简介 QButtonGroup提供了一个抽象容器,可以将按钮小部件放入其中。它不提供此容器的可视化表示,而是管理组中每个按钮的状态。 互斥按钮组,将关闭除已单击的按钮外的所有可选中(可切换)按钮。默认情况下…

免费使用GPT-4.0?【AI聊天 | GPT4教学】 —— 微软 New Bing GPT4 申请与使用保姆级教程

目录 认识 New Bing 2. 注册并登录 Microsoft 账号 3. 如何免科学上网使用 New Bing? 4. 加入 WaitList 候补名单 5. 使用 New Bing! 6. 使用 Skype 免科学上网访问 New Bing! 7. 在 Chrome 浏览器中使用 New Bing! 8. 总…

如何利用splice()和slice()方法操作数组

如何利用splice()和slice()方法操作数组 前言splice()是什么,有什么用?怎么用?slice()是什么,有什么用?怎么用?splice和slice方法的区别小结 前言 splice&am…

如今的Android就业率惨不忍睹~

3月底公司大裁员,投了一个月简历,一天投个几十份简历,而收到面试通知的就那么三四家,要么就是薪水给得很低不想去,要么就是高薪水的Offer拿不下,而自己中意公司的却没有给出回应,唉……真难啊!&…

4.2 线性表顺序表

目录 目录结构 线性表 线性表的特征: 顺序表存储结构的表示 顺序表存储结构的特点 顺序存储结构的表示 线性表的基本运算 基本运算的相关算法 线性表的基本运算 线性表 目录结构 线性表 线性表是包含若干数据元素的一个线性序列 记为: L(a0, …

Istio virtual service 故障注入之延时(fixedDelay)、中断(abort)

Istio 故障注入 Istio 故障注入与其他在网络层引入错误(例如延迟数据包或者直接杀死 Pod)的机制不同,Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障,比如 HTTP 错误代码等。 Istio 可以注入两种类型的故障&…

iLO初识

文章目录 什么是iLO?为什么需要iLO?iLO界面介绍风扇状态温度状态存储控制器的电池组件cpu状态内存状态网络设备列表存储状态固件状态 什么是iLO? iLO(Integrated Lights-Out)是一种远程管理技术,用于管理和…

第7章链接:7.1 编译器驱动程序

示例程序由两个源文件组成,main.c 和 swap.c。 main函数初始化一个两元素的整数数组,然后调用swap函数来交换这一对数。 main.c void swap();int buf[2] {1, 2};int main() {swap();return 0; }swap.c extern int buf[];int *bufp0 &buf[0]; i…

Android系统日志3-trace

1、使用 主要追踪耗时,如上图所示,记录的是traceBegin和traceEnd之间的耗时,这些日志信息可以通过systrace查看 2、获取trace日志 https://developer.android.com/topic/performance/tracing/command-line?hlzh-cn https://developer.andr…

Linux之shell基础(六)

1、shell 简介 shell 介于内核与用户之间,负责命令的编辑,是人机交互的一个桥梁 shell 的种类 [rootyhm ~]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/ksh /bin/rksh /usr/bin/ksh /usr/bin/rksh种类说明/bin/shbash的一个…

学习HCIP的day.05

目录 十、ospf扩展配置&#xff1a; 1、认证 2、沉默接口 3、加快收敛 4、缺省路由 查看OSPF路由&#xff1b;显示本地发出和学习到的OSPF路由条目 <r10>display ospf routing 十、ospf扩展配置&#xff1a; 1、认证 直连的邻居或邻接之间&#xff0c;配置身…

【并发编程系列 — 线程基础】

Java并发是Java语言中非常重要的一个话题&#xff0c;也是面试和实际应用中最常接触到的。作为JAVA工程师&#xff0c;掌握并发编程知识是非常重要的。在多核CPU的环境下&#xff0c;使用多线程并发执行任务可以显著提高程序的执行效率&#xff0c;从而提高系统的性能。 目录 …

6.事件系统

事件 事件的传递 新建Widget项目myevent&#xff0c;类名WIdget不变 新建C类如下&#xff1a; 粘贴代码 1myevent运行结果&#xff1a; 输入任意字符时&#xff0c;qDebug显示如下&#xff0c;但框内无法显示输入的字符 //mylineedit.cpp中void MyLineEdit::keyPressEven…

[Docker]Docker命令

Docker常用命令 帮助命令 docker version #版本信息 docker info #详细信息 docker 命令 --help #万能命令镜像命令&#xff1a; docker images #展示所有镜像 docker search docker pull 下载镜像 docker rmi 删除镜像 &#xff08;remove images) 容器命令…

数据分析---Python科学计算库-Numpy学习(一)

一&#xff0c;简介 1.1什么是数据分析 数据分析是指通过使用各种统计学、计算机科学和数学技术&#xff0c;对收集来的数据进行处理、整理、解释和呈现&#xff0c;从而提取出数据中有用的信息和洞察&#xff0c;并帮助做出更明智的决策。数据分析可以应用于各种不同的领域和…

MapReduce源码解读-2

MapReduce源码解读-2 MapReduceInputFormat类getSplitsCreateRecordReader Mapper类OutputCollectorMapOutputBufferPartitioner 分区环形缓冲区 Circular buffer初始化 Spill、Sort溢写、排序Merge 合并combiner 规约 Reduce阶段ReduceTask第一层调用 ReduceTask.run -shuffle…

【力扣】刷题+剑指offer第二版

文章目录 题目收藏不含重复字符的最长子串最长公共子串 剑指 Offer剑指 Offer 05. 替换空格剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 09. 用两个栈实现队列剑指 Offer 07. 重建二叉树剑指 Offer 06. 从尾到头打印链表剑指 Offer 11. 旋转数组…