PoseFix: 模型无关的通用人体姿势精修网络
PoseFix 可以通过一个单独的 '.json' 文件让任何方法的姿势结果变得更好!
新闻
通过改进最新的技术(HRNet,CVPR 2019),我们取得了顶尖的性能。您总是可以让您的结果变得更好!
简介
该代码库是官方的 TensorFlow 实现,针对 PoseFix: 模型无关的通用人体姿势精修网络 (CVPR 2019),实现了从单个 RGB 图像进行 模型无关的人体姿势精修。 本代码库提供:
- PoseFix: 模型无关的通用人体姿势精修网络 的 TensorFlow 实现。
- 灵活且简单的代码。
- 兼容大多数公开的2D多人姿势估计数据集,包括 MPII,PoseTrack 2018 和 MS COCO 2017。
- 人体姿势估计可视化代码(从 Detectron 修改)。
依赖项
此代码在 Ubuntu 16.04、CUDA 9.0、cuDNN 7.1 环境下使用两块 NVIDIA 1080Ti GPU 进行了测试。
开发使用 Python 3.6.5 版本及 Anaconda 3。
目录结构
根目录
${POSE_ROOT}
的描述如下。
${POSE_ROOT}
|-- data
|-- lib
|-- main
|-- tool
`-- output
data
包含数据加载代码以及指向图像和注释目录的软链接。lib
包含2D多人姿势评估系统的核心代码。main
包含用于训练或测试网络的高层代码。tool
包含数据集转换器。posetrack2coco_output.py
将posetrack
输出文件转换为coco
格式。output
包含日志、训练模型、可视化输出和测试结果。
数据
您需要按照下面的目录结构来组织 data
。
${POSE_ROOT}
|-- data
|-- |-- MPII
| `-- |-- input_pose
| | |-- name_of_input_pose.json
| | |-- test_on_trainset
| | | | -- result.json
| |-- annotations
| | |-- train.json
| | `-- test.json
| `-- images
| |-- 000001163.jpg
| |-- 000003072.jpg
|-- |-- PoseTrack
| `-- |-- input_pose
| | |-- name_of_input_pose.json
| | |-- test_on_trainset
| | | | -- result.json
| |-- annotations
| | |-- train2018.json
| | |-- val2018.json
| | `-- test2018.json
| |-- original_annotations
| | |-- train/
| | |-- val/
| | `-- test/
| `-- images
| |-- train/
| |-- val/
| `-- test/
|-- |-- COCO
| `-- |-- input_pose
| | |-- name_of_input_pose.json
| | |-- test_on_trainset
| | | | -- result.json
| |-- annotations
| | |-- person_keypoints_train2017.json
| | |-- person_keypoints_val2017.json
| | `-- image_info_test-dev2017.json
| `-- images
| |-- train2017/
| |-- val2017/
| `-- test2017/
`-- |-- imagenet_weights
| |-- resnet_v1_50.ckpt
| |-- resnet_v1_101.ckpt
| `-- resnet_v1_152.ckpt
- 在 TF-SimpleHumanPose 的
tool
文件夹中运行python mpii2coco.py
将 MPII 注释文件转换为 MS COCO 格式 (MPII/annotations
)。 - 在 TF-SimpleHumanPose 的
tool
文件夹中运行python posetrack2coco.py
将 PoseTrack 注释文件转换为 MS COCO 格式 (PoseTrack/annotations
)。 - 从 tf-slim 下载 imagenet 预训练的 resnet 模型并将其放置在
data/imagenet_weights
目录下。 - 除了 MPII 和 PoseTrack 的
annotations
外,所有其它目录都是下载后的原始版本。 - 如果您想添加自己的数据集,必须将其转换为 MS COCO 格式。
- 您可以通过修改各数据集文件夹中的
dataset.py
来更改data
的默认目录结构。
输出
你需要按照以下目录结构来组织 output
文件夹。
${POSE_ROOT}
|-- output
|-- |-- log
|-- |-- model_dump
|-- |-- result
`-- |-- vis
- 建议以软链接形式创建
output
文件夹,而不是文件夹形式,因为这会占用较大的存储容量。 log
文件夹包含训练日志文件。model_dump
文件夹包含每个 epochs 保存的检查点。result
文件夹包含测试阶段生成的最终评估文件。vis
文件夹包含可视化结果。- 您可以通过修改
main/config.py
来更改output
的默认目录结构。
运行 PoseFix
开始
- 运行
pip install -r requirement.txt
以安装所需的模块。 - 运行
cd ${POSE_ROOT}/lib
并运行make
以构建 NMS 模块。 - 在
main/config.py
中,您可以更改模型设置,包括要使用的数据集、网络主干和输入尺寸等。
训练
在训练之前需要准备 input_pose/test_on_trainset/result.json
。这是在训练集上测试的结果,使用了地面真实框,在训练阶段用来合成未标注的关键点输入姿势。使用了 TF-SimpleHumanPose 的测试结果。
在 main
文件夹中,运行以下命令:
python train.py --gpu 0-1
在 GPU 0,1 上训练网络。
如果你想继续实验,运行:
python train.py --gpu 0-1 --continue
--gpu 0,1
可以替代 --gpu 0-1
使用。
测试
input_pose/name_of_input_pose.json
是其他方法的姿势估计结果。你需要重命名它并修改 data/$DATASET/dataset.py
中的 input_pose_path
。input_pose/name_of_input_pose.json
应符合 MS COCO 格式。要在 PoseTrack
数据集上测试,请在测试前运行 tool/posetrack2coco_output.py
将 PoseTrack
的输出文件转换为 COCO
格式。
将训练好的模型放在 output/model_dump/$DATASET/
文件夹中,将其他方法的姿势估计结果 (name_of_input_pose.json
) 放入 data/$DATASET/input_pose/
文件夹中。
在 main
文件夹中,运行以下命令:
python test.py --gpu 0-1 --test_epoch 140
使用第 140 个 epoch 的模型在 GPU 0,1 上测试网络。--gpu 0,1
可以替代 --gpu 0-1
使用。
结果
此处报告 PoseFix 的性能。你可以在 这里 下载 PoseFix 的预训练模型,并在 这里 下载 test_on_trainset/result.json
。
由于本仓库输出的文件与 MS COCO 和 PoseTrack 兼容,你可以直接使用 cocoapi 或 poseval 在 MS COCO 或 PoseTrack 数据集上评估结果。你需要将生成的 mat
文件转换为 MPII mat
格式,以在 MPII 数据集上进行评估,具体请参考 这里。
MSCOCO 2017 数据集结果
我们还将 PoseFix 应用于 HRNet (Ke 等人,CVPR2019),并获得了顶级性能。
MSCOCO 2017 验证集
方法 | AP | Ap .5 | AP .75 | AP (M) | AP (L) | AR | AR .5 | AR .75 | AR (M) | AR (L) |
---|---|---|---|---|---|---|---|---|---|---|
pose_hrnet_w48 | 76.3 | 90.8 | 82.9 | 72.3 | 83.4 | 81.2 | 94.2 | 87.1 | 76.7 | 87.6 |
PoseFix + HRNet | 77.3 | 90.9 | 83.5 | 73.5 | 84.4 | 82.0 | 94.3 | 87.5 | 77.7 | 88.3 |
MSCOCO 2017 测试开发集
方法 | AP | Ap .5 | AP .75 | AP (M) | AP (L) | AR | AR .5 | AR .75 | AR (M) | AR (L) |
---|---|---|---|---|---|---|---|---|---|---|
pose_hrnet_w48 | 75.5 | 92.5 | 83.3 | 71.9 | 81.5 | 80.5 | 95.7 | 87.4 | 76.3 | 86.3 |
PoseFix + HRNet | 76.7 | 92.6 | 84.1 | 73.1 | 82.6 | 81.5 | 95.8 | 88.1 | 77.5 | 87.2 |
- 你需要在
config.py
中设置dataset
、backbone
和input_shape
。
PoseTrack 2018 数据集结果
- 你需要在
config.py
中设置dataset
、backbone
和input_shape
。
故障排除
-
对于遇到越界索引问题的人,请参阅 此问题。根据 TF 文档,
tf.scatter_nd
在 GPU 模式下会忽略越界索引。然而,BruceLeeeee
遇到了这个问题并通过剪裁坐标解决了。 -
对于在测试阶段遇到
FileNotFoundError: [Errno 2] No such file or directory: 'tmp_result_0.pkl'
的人,请正确准备输入姿势。pkl 文件在测试阶段自动生成和删除,所以你不需要准备它们。大多数错误都来自于人类检测文件不正确。
致谢
本仓库参考了 CPN 的 TensorFlow 仓库 和 Simple 的 PyTorch 仓库。
参考文献
@InProceedings{Moon_2019_CVPR_PoseFix,
author = {穆恩,敬锡和昌,珠勇和李,敬武},
title = {PoseFix:通用的无模型人类姿态校正网络},
booktitle = {IEEE 计算机视觉与模式识别会议 (CVPR)},
year = {2019}
}