Files
2024-08-27 14:42:45 +08:00

5.9 KiB
Raw Permalink Blame History

简体中文

3D Pose系列模型

目录

简介

PaddleDetection 中提供了两种3D Pose算法稀疏关键点分别是适用于服务器端的大模型Metro3D和移动端的TinyPose3D。其中Metro3D基于End-to-End Human Pose and Mesh Reconstruction with Transformers进行了稀疏化改造TinyPose3D是在TinyPose基础上修改输出3D关键点。

模型推荐

模型 适用场景 human3.6m精度(14关键点) human3.6m精度(17关键点) 模型下载
Metro3D 服务器端 56.014 46.619 metro3d_24kpts.pdparams
TinyPose3D 移动端 86.381 71.223 tinypose3d_human36m.pdparams

注:

  1. 训练数据基于 MeshTransfomer 中的训练数据。
  2. 测试精度同 MeshTransfomer 采用 14 关键点测试。

快速开始

1、环境安装

请参考PaddleDetection 安装文档正确安装PaddlePaddle和PaddleDetection即可。

2、数据准备

我们的训练数据由coco、human3.6m、hr-lspet、posetrack3d、mpii组成。

2.1 我们的训练数据下载地址为:

coco

human3.6m

lspet+posetrack+mpii

标注文件下载

2.2 数据下载后按如下结构放在repo目录下

${REPO_DIR}  
|-- dataset  
|   |-- traindata
|       |-- coco
|       |-- hr-lspet
|       |-- human3.6m
|       |-- mpii
|       |-- posetrack3d
|       \-- pose3d
|           |-- COCO2014-All-ver01.json
|           |-- COCO2014-Part-ver01.json
|           |-- COCO2014-Val-ver10.json
|           |-- Human3.6m_train.json
|           |-- Human3.6m_valid.json
|           |-- LSPet_train_ver10.json
|           |-- LSPet_test_ver10.json
|           |-- MPII_ver01.json
|           |-- PoseTrack_ver01.json
|-- ppdet
|-- deploy
|-- demo
|-- README_cn.md
|-- README_en.md
|-- ...

3、训练与测试

单卡训练

#单卡训练
CUDA_VISIBLE_DEVICES=0 python3 tools/train.py -c configs/pose3d/metro3d_24kpts.yml

#多卡训练
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 -m paddle.distributed.launch tools/train.py -c configs/pose3d/metro3d_24kpts.yml

模型评估

#单卡评估
CUDA_VISIBLE_DEVICES=0 python3 tools/eval.py -c configs/pose3d/metro3d_24kpts.yml -o weights=output/metro3d_24kpts/best_model.pdparams

#当只需要保存评估预测的结果时可以通过设置save_prediction_only参数实现评估预测结果默认保存在output/keypoints_results.json文件中
CUDA_VISIBLE_DEVICES=0 python3 tools/eval.py -c configs/pose3d/metro3d_24kpts.yml -o weights=output/metro3d_24kpts/best_model.pdparams --save_prediction_only

#多卡评估
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 -m paddle.distributed.launch tools/eval.py -c configs/pose3d/metro3d_24kpts.yml -o weights=output/metro3d_24kpts/best_model.pdparams

模型预测

#图片生成3视角图
CUDA_VISIBLE_DEVICES=0 python3 tools/infer.py -c configs/pose3d/metro3d_24kpts.yml -o weights=./output/metro3d_24kpts/best_model.pdparams --infer_img=./demo/hrnet_demo.jpg --draw_threshold=0.5

4、使用说明

3D Pose在使用中相比2D Pose有更多的困难该困难主要是由于以下两个原因导致的。

  • 1训练数据标注成本高

  • 2图像在深度信息上的模糊性

由于1的原因训练数据往往只能覆盖少量动作导致模型泛化性困难。由于2的原因图像在预测3D Pose坐标时深度z轴上误差通常大于x、y方向容易导致时序间的较大抖动且数据标注误差越大该问题表现的更加明显。

要解决上述两个问题就造成了两个矛盾的需求1提高泛化性需要更多的标注数据2降低预测误差需要高精度的数据标注。而3D Pose本身数据标注的困难导致越高精度的标注成本越高标注数量则会相应降低。

因此,我们提供的解决方案是:

  • 1使用自动拟合标注方法自动产生大量低精度的数据。训练第一版模型使其具有较普遍的泛化性。

  • 2标注少量目标动作的高精度数据基于第一版模型finetune得到目标动作上的高精度模型且一定程度上继承了第一版模型的泛化性。

我们的训练数据提供了大量的低精度自动生成式的数据用户可以在此数据训练的基础上标注自己高精度的目标动作数据进行finetune即可得到相对稳定较好的模型。

我们在医疗康复高精度数据上的训练效果展示如下 高清视频

引用

@inproceedings{lin2021end-to-end,
author = {Lin, Kevin and Wang, Lijuan and Liu, Zicheng},
title = {End-to-End Human Pose and Mesh Reconstruction with Transformers},
booktitle = {CVPR},
year = {2021},
}