MMPose 1.0:迈向更优雅、更强大的姿态估计研发和应用框架

请添加图片描述

姿态估计,计算机视觉的核心任务之一,还原纷繁外表之下的空间信息,洞察千姿百态背后的本征结构。

MMPose 作为 OpenMMLab 系列中的姿态估计算法库,自 2020 年发布以来,经过 2 年的不断迭代打磨,已经成为姿态估计领域覆盖算法最多,功能最全的开源算法库之一。MMPose 的成长离不开来自社区同学的宝贵意见和热情帮助,每个 star 和 PR 都为 MMPose 注入了活力。同时,我们也欣喜地看到 MMPose 正成为越来越多顶会论文、项目产品背后的有力工具。

伴随着此次 OpenMMLab 整体架构升级,MMPose 也终于要跨入 v1.0 时代了。在 1.0 版本中,我们对 MMPose 进行了大幅的重构和优化, 正如标题所说,希望能带给大家一个设计更优雅、功能和扩展性更强大的姿态估计研发框架和解决方案。

太长不看版

MMPose 1.0 带来的 6 大全新体验:

1.基于模型训练引擎 MMEngine 的架构设计,使模型训练流程更直观,代码更简化,接口更统一

2.新增姿态编解码器模块,统合姿态前后处理过程

3.统一 top-down 和 bottom-up 方法的数据接口

4.新增 SimCC,Debias IPR 等多个轻量化姿态估计算法

5.全流程可视化工具,关键点、骨骼、热力图尽收眼底

6.更友好的用户文档,帮助新老用户顺利开启 MMPose 1.0 之旅

1.新引擎、新架构、新体验

MMPose 新版本基于 OpenMMLab 最新推出的模型训练引擎 MMEngine,由此带来了代码结构和训练流程的简化。

在 MMPose 原有的架构设计中,对于一个典型的模型训练过程,我们可以发现各个模块的构建被分散在了脚本、MMPose 库函数、MMCV 库函数中;模型的前向传播,反向更新分散在执行器和钩子中,这对于用户理解训练流程带来了很多困难,用户需要自定义修改时容易找不到位置(图 1 左)。

而在新的架构中,MMEngine 的执行器集中了所有的模块构建功能,训练脚本只用于最基本的配置解析(图 1 右),这样新的训练流程不仅逻辑更加清晰,大大减少了代码量,还能为用户带来更方便的模型调试体验,让用户灵活地定义模型的前向和反向过程。

在这里插入图片描述

图 1 基于 MMEngine 的新架构带来的训练流程简化

同时,MMEngine 还带来诸多功能和接口上的遍历,如可以在 MMPose 中轻松地使用其他 OpenMMLab 算法库的模型组件(图 2 左),或者获取其他 OpenMMLab 算法库的模型配置文件 (图 2 右)。

在这里插入图片描述

图 2 基于 MMEngine 的跨算法库调用(左:通过 config 调用其他算法库的模块;右:通过 MMEngine 接口跨库获取配置文件)

2.新增模块:姿态编解码器

对物体的关键点进行编码和解码,是姿态估计模型训练和推理的核心步骤之一。

  • 编码:将关键点标注转化模型监督信息(如热力图,回归目标值),通常用于 训练 阶段
  • 解码:将模型输出转化关键点坐标,通常用于 测试 和 推理 阶段

在旧版本的 MMPose 中,编码和解码的过程分散在不同模块中(dataset,pipeline,head,evaluation 等),导致代码逻辑不够连贯,且不同模块的配置互相耦合,给用户的学习和使用带来了不便(图 3)。

在这里插入图片描述

图 3: 旧版本 MMPose 中编解码相关代码:较为分散,不易复用

在 MMPose 1.0 中,我们引入了姿态编解码器(Codec)这一新模块,将编码和解码过程整合在一起。每个编解码器通过编码(encode)和解码(decode)两个核心方法,完整定义了一种关键点的表示形式(如:高斯热力图、归一化坐标等)。通过这样的设计,提升了代码的友好性和可复用性。

在使用新版本 MMPose 配置模型时,只要指定使用的编解码器类型和参数,然后在数据集的 pipeline (对训练数据进行编码)和模型的 head(对模型输出进行解码)使用编解码器即可。

在这里插入图片描述

图 4 MMPose 1.0 中的编解码器及其配置:整合代码、配置方便

3.统一的 top-down 和 bottom-up 数据接口

自顶向下(top-down)和自底向上(bottom-up)是姿态估计中重要的两种方法范式。Top-down 方法首先检测目标位置,然后在检测框中检测单个目标的关键点;Bottom-up 方法直接在整幅图像上检测所有关键点,然后将属于同一目标的关键点划分为一组。

在这里插入图片描述

图 5 姿态估计中的 2 类重要方法:top-down 和 bottom-up

在旧版本的 MMPose 中,top-down 和 bottom-up 使用不同的 dataset 类,数据格式上存在一定差别。且在每一类方法中,数据样本真值(ground-truth)和模型预测(prediction)格式也存在差别。这导致 top-down 和 bottom-up 两类算法之间功能相似的模块无法复用,而每类算法各自的模块之间又存在耦合(如 dataset 与 evaluation 耦合,model 与 visualization 耦合)。这一定程度上增加了学习、开发和维护的成本(图 6)。

在这里插入图片描述

图 6 旧版本 MMPose 中数据接口不统一

在 MMPose 1.0 版本中,我们在 top-down 和 bottom-up 中统一使用新增的数据结构 PoseDataSample 来表示数据样本和模型预测结果(图 7)。通过统一的数据接口定义,使代码更加清晰简洁,降低了模块间不必要的耦合,提高了不同算法间组件的复用性。

在这里插入图片描述

图 7 MMPose 1.0 中通过统一的数据接口类 PoseDataSample

  • Bottom-up 算法 Associative Embedding 的重构正在进行中,预计会在 2022.11 将要发布的 MMPose v1.0.0rc1 中正式支持。

4.轻量化姿态估计算法支持

在 MMPose 1.0 中,新增了多个轻量化的姿态估计算法:

  • SimCC(SimCC: a Simple Coordinate Classification Perspective for Human Pose Estimation, ECCV 2022 Oral)
  • Debias IPR(Removing the Bias of Integral Pose Regression, ICCV 2021)
  • DSNT(Numerical Coordinate Regression with Convolutional Neural Networks, ECCV 2018)
  • IPR(Integral Human Pose Regression, ECCV 2018)

在这里插入图片描述

图 8 MMPose 1.0 新增的轻量化算法性能对比

在后续的开发中,我们会重点推进业界可用的高性能算法的研发。结合 MMDeploy 的模型部署支持,让 MMPose 能够在更多业务场景和产品中发光发热。

5.全流程可视化工具

可视化是验证模型性能和 debug 的重要手段。在 MMPose 1.0 中,新增的可视化模块 PoseLocalVisualizer 可以方便地展示数据图像、关键点和骨骼、热力图等各种信息(图 9)。

在这里插入图片描述

图 9 使用 MMPose 1.0 可视化单个样本

可视化模块的使用非常简单,只要进行简单的初始化,就可以直接对模型输出进行可视化(详细的用法可以参考 MMPose demo:https://github.com/open-mmlab/mmpose/blob/1.x/demo/image_demo.py):

from mmpose.visualization import PoseLocalVisualizer

# 构建 visualizer 并设置 dataset 相关信息
visualizer = PoseLocalVisualizer(name='vis_pose')
visualizer.set_dataset_meta(model.dataset_meta)

# 模型推理
results = inference_topdown(model, img)

# 可视化模型预测结果
visualizer.add_datasample(img, data_sample=results, show=True)

除了直接用于可视化单个样本,我们还提供了 2 个非常实用的可视化工具:

  • 可视化数据集:快速浏览数据集样本和预处理结果(图 10)

在这里插入图片描述

图 10 快速可视化数据集和预处理效果

  • 监控模型训练:在每个训练 epoch 之后保存可视化结果,及时监控和对比模型训练效果(图 11)

在这里插入图片描述

图 11 在训练中可视化模型效果

6.更友好的用户文档

我们为 MMPose 1.0 精心准备了用户文档,希望不管是刚接触姿态估计和 MMPose 的同学,还是 MMPose 0.x 版本的老用户,都可以通过我们的文档轻松上手 MMPose 1.0 版本(图 12)。

  • 文档入口:

中文:https://mmpose.readthedocs.io/zh_CN/1.x/

英文:https://mmpose.readthedocs.io/en/1.x/

  • MMPose 简介和文档大纲:

    • 中文:https://mmpose.readthedocs.io/zh_CN/1.x/overview.html
    • 英文:https://mmpose.readthedocs.io/en/1.x/overview.html
  • MMPose 1.0 安装:

    • 中文:https://mmpose.readthedocs.io/zh_CN/1.x/installation.html
    • 英文:https://mmpose.readthedocs.io/en/1.x/installation.html
  • MMPose 1.0 上手指南:

    • 中文:https://mmpose.readthedocs.io/zh_CN/1.x/migration.html
    • 英文:https://mmpose.readthedocs.io/en/1.x/migration.html

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

图12 MMPose 1.0 文档

写在最后

目前 MMPose 1.0 正处在公测阶段,在未来的 2 个月内,会有更多新的功能陆续和大家见面:

  • 面向工业界轻量化、实时性需求的高性能 2D 姿态估计模型
  • 多后端模型部署方案和文档(MMPose x MMDeploy)
  • 模型压缩方案和文档(MMPose x MMRazor)

同时,我们将在未来一段时间内继续维护 MMPose 0.x 分支,具体时间线如图 13 所示。

在这里插入图片描述

图 13 MMPose 双分支维护时间线

如文章开头所说,MMPose 的成长离不开社区同学的反馈和帮助。

我们非常欢迎社区同学试用 MMPose 1.0,提出宝贵的意见。点滴的反馈和建议都能帮助 MMPose 变得越来越好用。

更希望能有更多社区同学通过提 PR、issue 和 discussion 参与到 MMPose 1.0 的建设中,我们一起把 MMPose “做大做强,再创辉煌”!

猜你喜欢

转载自blog.csdn.net/qq_39967751/article/details/127850527