> 技术文档 > MHFormer & STCFormer 复现——从视频提取人体关节的2D/3D pose

MHFormer & STCFormer 复现——从视频提取人体关节的2D/3D pose

使用MHFormer和STCFormer可以快速从视频提取出人体的17个关节2D与3D pose。

环境准备

测试环境:

Ubuntu 20.04 python 3.9 torch 2.7.1 torchvision 0.22.1

MHFormer和STCFormer可使用同一个环境运行。

创建一个用于测试的conda环境请运行以下命令:

conda create -n former_test python=3.9

安装torch和torchvision请运行以下命令:

pip install torch==2.7.1 torchvision==0.22.1

MHFormer

MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation [CVPR 2022]

MHFormer github链接

论文作者在git中推荐使用PyTorch 1.7.1和Torchvision 0.8.2,但实测这两个老版本的torch包会导致运行出错,要求numpy必须是小于2.0版本,但切换numpy版本小于2.0后则会导致依赖环境出错。

1. 克隆代码

git clone https://github.com/Vegetebird/MHFormer.git

2. 下载MHFormer的预训练模型,下载完成后放到\'./checkpoint/pretrained\'目录下

https://drive.google.com/drive/folders/1UWuaJ_nE19x2aM-Th221UpdhRPSCFwZaGoogle云盘:https://drive.google.com/drive/folders/1UWuaJ_nE19x2aM-Th221UpdhRPSCFwZa

下载任意一个文件夹,并将文件夹放入该目录下。例如实际目录长这样:

3. 下载YOLOv3和HRNet的预训练模型,下载完后放在\'./demo/video\'目录下:

https://drive.google.com/drive/folders/1_ENAMOsPM7FXmdYRbkwbFHgzQq_B_NQA

4. 克隆下来的git仓库中已提供了一个video用于demo测试,如需要测试自己的视频,将需要测试的wild video放在\'./demo/video\'目录下。

5. 运行代码,生成2D POSE、3D POSE、Demo video:

python demo/vis.py --video sample_video.mp4

6. 在\'./demo/output/sample_video\'目录下查看生成的2D POSE、3D POSE、Demo video。文末提供了读取npz文件的示例代码。


STCFormer

STCFormer: 3D Human Pose Estimation with Spatio-Temporal Criss-cross Attention [CVPR 2023]

STCFormer github链接

可以使用与MHFormer相同的环境运行。

1. 克隆代码

git clone https://github.com/zhenhuat/STCFormer.git

2. 下载STCFormer的预训练模型,下载完成后放到\'./checkpoint/pretrained\'目录下:

Google云盘:https://drive.google.com/drive/folders/1waaQ1Yj-HfbNahnCN8AWCjMCGzyhZJF7

 下载任意一个目录下的任意一个预训练文件,并将文件放入该目录下。例如实际目录长这样:

3. 下载YOLOv3和HRNet的预训练模型,下载完后放在\'./demo/video\'目录下:

https://drive.google.com/drive/folders/1_ENAMOsPM7FXmdYRbkwbFHgzQq_B_NQA

此处下载的文件与MHFormer中的文件一致。

4. 克隆下来的git仓库中已提供了一个video用于demo测试,如需要测试自己的视频,将需要测试的wild video放在\'./demo/video\'目录下。

5. 运行代码,生成2D POSE、3D POSE、Demo video:

python demo/vis.py --video sample_video.mp4

6. 在\'./demo/output/sample_video\'目录下查看生成的2D POSE、3D POSE、Demo video。文末提供了读取npz文件的示例代码。


效果展示


读取npz文件

import numpy as npdef read_npz(file_path): \"\"\" 读取 .npz 文件并打印其中所有数组的名称和形状。 参数: file_path (str): .npz 文件的路径。 返回: dict: 包含所有数组的字典,key 为数组名,value 为对应的 numpy 数组。 \"\"\" try: data = np.load(file_path) print(f\"成功读取:{file_path}\") print(\"包含以下数组:\") for key in data.files: print(f\" - {key}: shape={data[key].shape}, dtype={data[key].dtype}\") return {key: data[key] for key in data.files} except Exception as e: print(f\"读取失败:{e}\") return None# 示例用法:if __name__ == \"__main__\": npz_path = \"/home/wzh-2004/3DPOSE_TEST/MHFormer/demo/output/sample_video/output_3D/output_keypoints_3d.npz\" # 替换为你自己的路径 arrays = read_npz(npz_path) print(arrays[\'reconstruction\'][0])