爱笑的小姐姐 · 2022年08月09日 · 北京市

浅析Pose for Everything: 姿态估计新挑战与个人思考

同组同事的工作,不过我入职时间尚短暂且没有机会交流过,在此班门弄斧地记录一下自己的想法。个人感觉任务的定义是绝妙的,Baseline模型的设计还存在相当多的可改进方向,但这也是数据集工作的特点吧,挖了坑毕竟是给大家一起玩的,自己挖坑又自己填完了,那这坑岂不是白挖了(逃

0. 前言

本文的核心是定义了一个新的计算机视觉任务Category-Agnostic Pose Estimation(CAPE),即,类别无关的姿态估计,在原来的姿态估计任务基础上进一步放宽了数据约束,要求一个模型训练完成后,只借助几张样例图片,就能在没见过的新数据上进行姿态估计,并且对象类别、关键点数量完全任意

为此,本文构建了一个新的MP-100数据集,其中包括8个大类:

  • Human Hand
  • Human Face
  • Human Body
  • Animal Body
  • Animal Face
  • Clothes
  • Furniture
  • Vehicle

每个大类下又衍生出众多子类,各自具有不同的外观和关键点数量,总计100个子类,关键点数量从8个到68个,概览如下:

image.png

这个任务的诞生其实是非常合理的,随着2D姿态估计任务的性能逐渐饱和,模型和算法上改进产生的收益逐渐降低,新SOTA的产生往往变成了拼算力和数据的游戏,肉眼可见地近年的工作收益要么源自于更高计算量的Transformer-based模型,要么来自于MAE等预训练方案。除了跟着工业界一起卷外,很自然地就会有人站出来提出新的游戏规则,有的人选择了视频领域的姿态估计,有的人选择了3d方向,有的人选择了多人姿态估计。

纵观姿态估计任务,目前逃不开的共同点在于,模型与数据类别的耦合度相当之高,人体姿态估计模型的输入数据也必须是人,甚至每个关键点的语义也有明确对应,换一套标注则模型几乎等于作废,而人们对一劳永逸的追求是无极限的,就像close-set目标检测之后出现了open-set目标检测,监督学习之后出现了增量学习、少样本学习等,都是对数据先验的进一步放宽,或者换种说法也可以表达为,对归纳偏置的降低,因此,本文也提出姿态估计领域的open-set&few-shot任务:类别无关姿态估计。

1. 分析

其实拿到这个命题我个人第一反应是往检索的思路上走的,就像当年人脸识别任务上,metric-learning之于分类任务的改进。本文提出的Baseline模型也是将其归纳为一个匹配问题,简言之,分别从query图片和support图片中提取关键点特征,然后让对应位置上的关键点特征尽量相似,从而能被一个解码器在query图片上解码出正确坐标。

至于这些关键点特征如何提取、相似关系如何建立、解码器如何利用query图像信息,就有无穷的可能性了,在此我只分析一下Baseline模型的做法:提出了一个姿态匹配网络(POMNet),其中包含了特征提取器(Feature extractor)、关键点交互模块(Keypoint Interaction Module, KIM)、匹配头(Matching Head, MH),模型结构如图所示:

image.png

从流程上可以对应成三个部分:

  • 特征提取
  • 相似性学习
  • 特征解码

特征提取

从网络结构图上可以看到,特征提取的两个网络是独立的,一个用于query图像特征提取,一个用于support图像特征提取,我觉得这大致上可以类比推荐系统中常用的双塔模型结构,或者相似性学习中常见的孪生网络:

image.png

至于这两个网络的参数,我个人感觉应该也是可以做成共享的,不论是双塔模型还是孪生网络都有共享参数的版本,也许性能可以进一步提升一些。

这一步提取的特征可以分为两种:图像特征关键点特征,我认为它们各自代表着图片上下文信息、语义信息和位置信息,其中语义信息和位置信息被糅合在了关键点特征中,上下文信息和语义信息糅合在图像特征中,图片上下文与位置坐标通过语义的桥梁建立联系,完成信息交换和更新。

本文的关键点特征是从图像特征中得到的,做法有些类似于细粒度图像检索中的SCDA方法:利用关键点标注渲染的heatmap作为mask,从图像特征中屏蔽掉环境噪声,只保留响应区内的图像特征,以此作为关键点特征。我认为这样的做法是比较低效的,很难避免背景噪声的引入和关键信息的丢失,改进的方案很多,在这里就不一一列举了。

这里贴个很久以前我写的细粒度图像检索笔记里的图,想不到还有用到的一天(笑):

image.png

相似性学习

特征相似性的学习主要是在KIM中完成的,这一步整体上就是一个Transformer Decoder的运用。其实个人理解,随着大家对Transformer结构研究的理解深入,self-attention用来建模个体之间的相似关系是很常用的手段了,通过自注意力能够进一步精炼每个关键点特征,通过多头注意力中来过滤掉噪声,强化它们彼此之间语义信息的联系和区别,为后面的解码提供更加优质的通用特征。

但问题也很明显,这种特征相似性的学习是自适应完成的,这就不可避免地需要依赖庞大训练数据支持,才有可能产生较好的泛化性,这在一定程度上又与本任务命题的初衷有所违背了,所以这其实也又很多可以改进的思路,比如人工约束特征空间中的距离。

而cross-attention的部分,引入query图像特征,为特征匹配提供具体的上下文信息,让前面提取到的通用关键点特征在特定query上更新,利用语义信息作为桥梁,特化为针对该query的特征表达,我认为主要干的事是在从上下文中学习位置信息,提供给后面的解码器解读。

特征解码

本文解码器的设计大体上还是能看出SimpleBaseline工作的轮廓,带有几分TokenPose的味道,理由是KIM学到的关键点特征会被reshape回二维,将其与query图像特征concate到一起,通过解码器网络解码为heatmap。

解码器的改进方案也太多了,而且基本上可以参考原有的各种姿态估计工作,不赘述。

另外我注意到一点是,由于不同子类关键点数量不一致,本文的网络预设了一个足够大的关键点个数100,通过mask的形式来约束每次推理的关键点特征,我感觉这也会导致模型参数的训练很不平衡,让这些特征能泛化到任意类别上难度未免有点太高了,后面的消融实验结果也一定程度印证了我这个猜想。

2. 实验结果

从实验来看其实本文作者的思路跟我并不完全一样的,整体上本文走的是跟Few-shot learning、Meta learning对比的思路,但由于这几个方向的发展现状其实懂的人明白,多少都有点一言难尽,所以这个对比结果我感觉乍一看还不错,但又有点全靠同行衬托的味道:

image.png

其实我感觉如果跟metric learning那一挂的方法来比的话,搞不好情况就没这么美丽了。

另外这个任务最重要的泛化能力,从对比实验来看,结果还是很大程度上依赖同类别的数据上学到的知识。Oracle的结果指的是在已知类别的训练数据上训练和测试的表现,大体上只能跟SimpleBaseline打个平手,训练集里去掉已知类后瞬间掉了16个点:
image.png

3. 结语

总体而言,本文提出的这个新的姿态估计任务我认为是非常有意义的,而作为一个Baseline模型也足够合格,让人读完脑子里有一万种改进方案恨不得马上做实验。我唯一有点在意的是,本文实验部分并没有贴出本文的模型在COCO这种大型数据集上的表现,因为这个任务的初衷,我个人理解还是希望把现在已经做得最够好的2d姿态估计模型尽可能便宜地用到新数据上,如果这个模型本身在原来的数据集任务上表现降了很多,就显得有点本末倒置了,也因此,我感觉这个MP-100数据集好像更适合作为检验算法泛化性的一个验证集,而不是训练集。

这篇笔记与其说是解读,更多的是我个人的一些感想,受本人水平限制,其中肯定会有很多不正确和不严谨的地方,欢迎大家批评指正和讨论,也欢迎点赞支持和关注我的公众号【镜子的掌纹】。

另外本文的工作之后也会开源到MMPose中,感兴趣的小伙伴欢迎保持关注,来MMPose点个star~

文章来源:镜子的掌纹
作者: 镜子的掌纹

推荐阅读

更多嵌入式AI相关技术干货请关注嵌入式AI专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
16356
内容数
1226
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息