# 前言
MMPose 是一个基于 PyTorch 的姿态估计工具箱,于 2020 年 7 月 OpenMMLab 正式对外开源,是本领域目前功能最全,涵盖算法最多的开源算法库。
Github地址:https://github.com/open-mmlab/mmpose
目前 MMPose 已经支持了十七余种姿态估计领域算法实现,涵盖了2D多人姿态估计、2D手部姿态估计、2D人脸关键点检测、133关键点的全身人体姿态估计、3D人体形状恢复、服饰关键点检测、动物关键点检测等子任务; 支持了30余个常用学术数据集,提供统一的接口和便捷的预处理脚本或指引文档; 提供了姿态估计中常用的AP、PCK、AUC、MPJPE等评价指标。
本文主要是从MMPose整体框架构建角度来解析,希望通过本文可以对MMPose整体构建流程和思想,核心组件划分,核心组件功能有一个大概的认识。
# MMPose
# 整体基本框架
MMPose 延续了 OpenMMLab 系列代码库的基因,采用模块化设计,将统一的人体姿态分析框架解耦成不同的模块组件,通过组合不同的模块组件,可以便捷地构建自定义的人体姿态分析模型。
# MMPose 整体构建流程和思想
# 基本组件
- dataloader:MMPose 提供了若干数据集接口,并使用流水线机制完成数据预处理
- mmposemodel:MMPose 将模型结构划分为 Backbone、Neck、Head 等功能模块,并利用注册器和构建器实现各模块的配置、使用和扩展
- builder:MMPose 基于 MMCV 提供的底层数据 I/O 和模型训练接口,通过配置文件实现对模型训练、推理的全流程管理;
- detectors、misc、loss
# dataset、pipelines
数据集相关的一些配置:
https://github.com/open-mmlab/mmpose/tree/master/mmpose/datasets
数据预处理的pipeline主要由以下几个步骤组成:
- LoadImageFromFile:读取图片。
- BottomUpRandomAffine:随机仿射变换。
- BottomUpRandomFlip:随机水平翻转 。
- ToTensor:图片转换为Tensor。
- NormalizeTensor:输入Tensor归一化,减均值,除方差。
- BottomUpGenerateTarget:根据标签,生成所需GT。
- Collect:整合训练中需要用到的数据。
# Backbone
MMPose 中已经集成了部分骨架网络,具体见文件夹:mmpose/models/backbones
,已经实现的骨架如下:
__all__ = [
'AlexNet', 'HourglassNet', 'HourglassAENet', 'HRNet', 'MobileNetV2',
'MobileNetV3', 'RegNet', 'ResNet', 'ResNetV1d', 'ResNeXt', 'SCNet',
'SEResNet', 'SEResNeXt', 'ShuffleNetV1', 'ShuffleNetV2', 'CPM', 'RSN',
'MSPN', 'ResNeSt', 'VGG', 'TCN', 'ViPNAS_ResNet', 'LiteHRNet'
]
2
3
4
5
6
# Neck
具体可见文件夹:mmpose/models/necks
, MMPose 中已经实现的necks如下:
__all__ = ['GlobalAveragePooling']
# Head
具体可见文件夹:mmpose/models/heads
, MMPose 中已经实现的heads如下:
__all__ = [
'TopdownHeatmapSimpleHead', 'TopdownHeatmapMultiStageHead',
'TopdownHeatmapMSMUHead', 'TopdownHeatmapBaseHead',
'AEHigherResolutionHead', 'AESimpleHead', 'AEMultiStageHead',
'DeepposeRegressionHead', 'TemporalRegressionHead', 'Interhand3DHead',
'HMRMeshHead', 'DeconvHead', 'ViPNASHeatmapSimpleHead'
]
2
3
4
5
6
7
# detectors
检测器,MMPose 中已经实现的如下:
__all__ = [
'TopDown', 'AssociativeEmbedding', 'ParametricMesh', 'MultiTask',
'PoseLifter', 'Interhand3D'
]
2
3
4
# loss
非常多的 loss,放心食用
__all__ = [
'JointsMSELoss', 'JointsOHKMMSELoss', 'HeatmapLoss', 'AELoss',
'MultiLossFactory', 'MeshLoss', 'GANLoss', 'SmoothL1Loss', 'WingLoss',
'MPJPELoss', 'MSELoss', 'L1Loss', 'BCELoss', 'BoneLoss',
'SemiSupervisionLoss'
]
2
3
4
5
6
7
training tricks
目前由于对姿态估计方面知识储备太少了,还没有太多的理解,后面同步补充(手动狗头)
# mmpose可与OpenMMLab 成员无缝对接,贯通视觉感知上下游
(顺便预告一个基于mmdet与mmpose结合的类AR小应用--Virtual_Keyboard)
- MMCV: OpenMMLab foundational library for computer vision.
- MIM: MIM Installs OpenMMLab Packages.
- MMClassification: OpenMMLab image classification toolbox and benchmark.
- MMDetection: OpenMMLab detection toolbox and benchmark.
- MMDetection3D: OpenMMLab next-generation platform for general 3D object detection.
- MMSegmentation: OpenMMLab semantic segmentation toolbox and benchmark.
- MMAction2: OpenMMLab next-generation action understanding toolbox and benchmark.
- MMTracking: OpenMMLab video perception toolbox and benchmark.
- MMPose: OpenMMLab pose estimation toolbox and benchmark.
- MMEditing: OpenMMLab image and video editing toolbox.
- MMOCR: A Comprehensive Toolbox for Text Detection, Recognition and Understanding.
- MMGeneration: OpenMMLab next-generation toolbox for generative models.