"基于相机距离感知的自顶向下方法从单张RGB图像进行3D多人姿态估计"的RootNet部分
简介
这个仓库是**基于相机距离感知的自顶向下方法从单张RGB图像进行3D多人姿态估计 (ICCV 2019)的官方PyTorch实现。它包含了RootNet**部分。
此仓库提供的内容:
- 基于相机距离感知的自顶向下方法从单张RGB图像进行3D多人姿态估计 (ICCV 2019)的PyTorch实现。
- 灵活简单的代码。
- 兼容大多数公开可用的2D和3D、单人和多人姿态估计数据集,包括**Human3.6M、MPII、MS COCO 2017、MuCo-3DHP、MuPoTS-3D和3DPW**。
- 人体姿态估计可视化代码。
依赖项
此代码在Ubuntu 16.04、CUDA 9.0、cuDNN 7.1环境下使用两块NVIDIA 1080Ti GPU进行测试。
开发使用的是Python 3.6.5版本和Anaconda 3。
快速演示
您可以在demo
文件夹中尝试快速演示。
- 在这里下载预训练的RootNet。
- 在
demo
文件夹中准备input.jpg
和预训练的快照。 - 在这里设置
bbox_list
。 - 如果您想在GPU 0上运行,执行
python demo.py --gpu 0 --test_epoch 18
。 - 您可以看到
output_root_2d.jpg
和打印出的根关节深度。
目录结构
根目录
${POSE_ROOT}
的结构如下所示。
${POSE_ROOT}
|-- data
|-- demo
|-- common
|-- main
|-- output
data
包含数据加载代码和指向图像和注释目录的软链接。demo
包含演示代码。common
包含3D多人姿态估计系统的核心代码。main
包含用于训练或测试网络的高级代码。output
包含日志、训练模型、可视化输出和测试结果。
数据
您需要按照以下结构组织data
目录。
${POSE_ROOT}
|-- data
| |-- Human36M
| | |-- bbox
| | | |-- bbox_human36m_output.json
| | |-- images
| | |-- annotations
| |-- MPII
| | |-- images
| | |-- annotations
| |-- MSCOCO
| | |-- images
| | | |-- train2017
| | | |-- val2017
| | |-- annotations
| |-- MuCo
| | |-- data
| | | |-- augmented_set
| | | |-- unaugmented_set
| | | |-- MuCo-3DHP.json
| |-- MuPoTS
| | |-- bbox
| | | |-- bbox_mupots_output.json
| | |-- data
| | | |-- MultiPersonTestSet
| | | |-- MuPoTS-3D.json
| |-- PW3D
| | |-- data
| | | |-- 3DPW_train.json
| | | |-- 3DPW_validation.json
| | | |-- 3DPW_test.json
| | |-- imageFiles
- 下载Human3.6M解析数据[data]
- 下载MPII解析数据[images][annotations]
- 下载MuCo解析和合成数据[data]
- 下载MuPoTS解析数据[images][annotations]
- 下载3DPW解析数据[images][annotations]
- 所有注释文件都遵循MS COCO格式。
- 如果您想添加自己的数据集,需要将其转换为MS COCO格式。
要从Google Drive下载多个文件而不压缩它们,请尝试这个。 如果您在尝试从Google Drive链接下载数据集时遇到"下载限制"问题,请尝试以下技巧。
* 转到包含您想要复制的文件的共享文件夹
* 选择您想要复制的所有文件
* 在右上角点击三个垂直点,选择"制作副本"
* 然后,文件就会被复制到您的个人Google Drive账户。您可以从个人账户下载它。
输出
您需要按照以下结构组织output
文件夹。
${POSE_ROOT}
|-- output
|-- |-- log
|-- |-- model_dump
|-- |-- result
|-- |-- vis
- 建议以软链接形式创建
output
文件夹,而不是文件夹形式,因为它会占用大量存储空间。 log
文件夹包含训练日志文件。model_dump
文件夹包含每个epoch保存的检查点。result
文件夹包含在测试阶段生成的最终估计文件。vis
文件夹包含可视化结果。
运行3DMPPE_ROOTNET
开始
- 在
main/config.py
中,您可以更改模型设置,包括要使用的数据集、网络骨干和输入大小等。 - 您必须根据每个数据集的单位设置
bbox_real
。例如,Human3.6M使用毫米,因此bbox_real = (2000, 2000)
。3DPW使用米,因此bbox_real = (2, 2)
。
训练
在main
文件夹中,运行
python train.py --gpu 0-1
在GPU 0,1上训练网络。
如果您想继续实验,运行
python train.py --gpu 0-1 --continue
可以使用--gpu 0,1
代替--gpu 0-1
。
测试
将训练好的模型放在output/model_dump/
中。
在main
文件夹中,运行
python test.py --gpu 0-1 --test_epoch 20
在GPU 0,1上使用第20个epoch训练的模型进行测试。可以使用--gpu 0,1
代替--gpu 0-1
。
结果
- RootNet的预训练模型在这里。
- Human3.6M和MuPoTS-3D数据集的边界框(来自DetectNet且未扩展)在这里。您可以使用这个来测试RootNet。
- Human3.6M、MSCOCO和MuPoTS-3D数据集的边界框(来自DetectNet且已扩展)和根关节坐标(来自RootNet)在这里。您不应该使用此文件中的边界框来测试RootNet,因为这些边界框已经扩展。请使用上面的那个(来自DetectNet且未扩展的边界框)。
- 3DPW数据集(仅测试集)的边界框(GT)和根关节坐标(来自RootNet)在这里。该结果是从在MuCo+MSCOCO上训练的RootNet获得的(不包括3DPW训练集)。
对于评估,您可以运行test.py
,或者在Human36M
和MuPoTS
中有评估代码。
Human3.6M数据集使用协议2(毫米)
方法 | MRPE | MRPE_x | MRPE_y | MRPE_z |
---|---|---|---|---|
RootNet | 120.0 | 23.3 | 23.0 | 108.1 |
MuPoTS-3D数据集(百分比)
方法 | AP_25 |
---|---|
RootNet | 31.0 |
3DPW数据集(测试集,米)
方法 | MRPE | MRPE_x | MRPE_y | MRPE_z |
---|---|---|---|---|
RootNet | 0.386 | 0.045 | 0.094 | 0.353 |
MSCOCO数据集
我们额外提供了MSCOCO数据集上的估计3D人体根坐标。坐标在3D相机坐标系中,x和y轴的焦距都设置为1500mm。您可以使用方程2或我的论文补充材料中的方程来更改焦距和相应的距离。
参考文献
@InProceedings{Moon_2019_ICCV_3DMPPE,
author = {Moon, Gyeongsik and Chang, Juyong and Lee, Kyoung Mu},
title = {Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB Image},
booktitle = {The IEEE Conference on International Conference on Computer Vision (ICCV)},
year = {2019}
}