学习多人姿态估计的精细局部表征(ECCV 2020聚焦)
*这是[残差步骤网络][11]的PyTorch实现,该网络在2019年COCO关键点挑战赛中获胜,并在COCO测试开发集和测试挑战集上排名第一,如[COCO排行榜][1]所示。
新闻
- 2020年9月: 我们的RSN已被整合到优秀的MMPose框架中。感谢他们的努力。欢迎使用他们的代码库和预训练模型库。⭐
- 2020年7月: 我们的论文被ECCV 2020接收为Spotlight论文 :rocket:
- 2019年9月: 我们的工作在COCO 2019关键点挑战赛中获得第一名和最佳论文奖 :trophy:
摘要: 在本文中,我们提出了一种新颖的方法,称为残差步骤网络(RSN)。RSN有效地聚合具有相同空间大小的特征(层内特征),以获得精细的局部表征,保留丰富的低层空间信息,从而实现精确的关键点定位。此外,我们提出了一种高效的注意力机制 - 姿态优化机(PRM)来进一步优化关键点位置。我们的方法在2019年COCO关键点挑战赛中获得第一名,并在COCO和MPII基准测试中取得了最先进的结果,且没有使用额外的训练数据和预训练模型。我们的单一模型在COCO测试开发集上达到78.6,在MPII测试数据集上达到93.0。集成模型在COCO测试开发集上达到79.2,在COCO测试挑战集上达到77.1。
残差步骤网络的流程
姿态优化机的架构
我们方法在COCO和MPII验证数据集上的一些预测结果
结果(原始版本)
COCO验证数据集上的结果
模型 | 输入尺寸 | GFLOPs | AP | AP50 | AP75 | APM | APL | AR |
---|---|---|---|---|---|---|---|---|
Res-18 | 256x192 | 2.3 | 70.7 | 89.5 | 77.5 | 66.8 | 75.9 | 75.8 |
RSN-18 | 256x192 | 2.5 | 73.6 | 90.5 | 80.9 | 67.8 | 79.1 | 78.8 |
RSN-50 | 256x192 | 6.4 | 74.7 | 91.4 | 81.5 | 71.0 | 80.2 | 80.0 |
RSN-101 | 256x192 | 11.5 | 75.8 | 92.4 | 83.0 | 72.1 | 81.2 | 81.1 |
2×RSN-50 | 256x192 | 13.9 | 77.2 | 92.3 | 84.0 | 73.8 | 82.5 | 82.2 |
3×RSN-50 | 256x192 | 20.7 | 78.2 | 92.3 | 85.1 | 74.7 | 83.7 | 83.1 |
4×RSN-50 | 256x192 | 29.3 | 79.0 | 92.5 | 85.7 | 75.2 | 84.5 | 83.7 |
4×RSN-50 | 384x288 | 65.9 | 79.6 | 92.5 | 85.8 | 75.5 | 85.2 | 84.2 |
COCO测试开发数据集上的结果
模型 | 输入尺寸 | GFLOPs | AP | AP50 | AP75 | APM | APL | AR |
---|---|---|---|---|---|---|---|---|
RSN-18 | 256x192 | 2.5 | 71.6 | 92.6 | 80.3 | 68.8 | 75.8 | 77.7 |
RSN-50 | 256x192 | 6.4 | 72.5 | 93.0 | 81.3 | 69.9 | 76.5 | 78.8 |
2×RSN-50 | 256x192 | 13.9 | 75.5 | 93.6 | 84.0 | 73.0 | 79.6 | 81.3 |
4×RSN-50 | 256x192 | 29.3 | 78.0 | 94.2 | 86.5 | 75.3 | 82.2 | 83.4 |
4×RSN-50 | 384x288 | 65.9 | 78.6 | 94.3 | 86.6 | 75.5 | 83.3 | 83.8 |
4×RSN-50+ | - | - | 79.2 | 94.4 | 87.1 | 76.1 | 83.8 | 84.1 |
COCO测试挑战数据集上的结果
模型 | 输入尺寸 | GFLOPs | AP | AP50 | AP75 | APM | APL | AR |
---|---|---|---|---|---|---|---|---|
4×RSN-50+ | - | - | 77.1 | 93.3 | 83.6 | 72.2 | 83.6 | 82.6 |
MPII数据集上的结果
模型 | 分割 | 输入尺寸 | 头部 | 肩部 | 肘部 | 手腕 | 臀部 | 膝盖 | 脚踝 | 平均 |
---|---|---|---|---|---|---|---|---|---|---|
4×RSN-50 | 验证 | 256x256 | 96.7 | 96.7 | 92.3 | 88.2 | 90.3 | 89.0 | 85.3 | 91.6 |
4×RSN-50 | 测试 | 256x256 | 98.5 | 97.3 | 93.9 | 89.9 | 92.0 | 90.6 | 86.8 | 93.0 |
结果(Pytorch版本)
COCO验证集结果
模型 | 输入尺寸 | GFLOPs | AP | AP50 | AP75 | APM | APL | AR |
---|---|---|---|---|---|---|---|---|
Res-18 | 256x192 | 2.3 | 65.2 | 87.3 | 71.5 | 61.2 | 72.2 | 71.3 |
RSN-18 | 256x192 | 2.5 | 70.4 | 88.8 | 77.7 | 67.2 | 76.7 | 76.5 |
注意
- + 表示使用集成模型。
- 所有模型均在8块V100 GPU上训练。
- 我们使用自己原创的深度学习平台进行了所有实验,论文中的所有结果都是在这个平台上报告的。它与Pytorch之间存在一些差异。
仓库结构
本仓库的组织结构如下:
$RSN_HOME
|-- cvpack
|
|-- dataset
| |-- COCO
| | |-- det_json
| | |-- gt_json
| | |-- images
| | |-- train2014
| | |-- val2014
| |
| |-- MPII
| |-- det_json
| |-- gt_json
| |-- images
|
|-- lib
| |-- models
| |-- utils
|
|-- exps
| |-- exp1
| |-- exp2
| |-- ...
|
|-- model_logs
|
|-- README.md
|-- requirements.txt
快速开始
安装
-
参考[Pytorch网站][2]安装Pytorch。
-
克隆本仓库,并在**/etc/profile或~/.bashrc中配置RSN_HOME**,例如:
export RSN_HOME='/path/of/your/cloned/repo'
export PYTHONPATH=$PYTHONPATH:$RSN_HOME
- 安装依赖:
pip3 install -r requirements.txt
- 参考[cocoapi网站][3]安装COCOAPI,或者:
git clone https://github.com/cocodataset/cocoapi.git $RSN_HOME/lib/COCOAPI
cd $RSN_HOME/lib/COCOAPI/PythonAPI
make install
数据集
COCO
-
从[COCO网站][4]下载图片,并将train2014/val2014分别放入**$RSN_HOME/dataset/COCO/images/**。
-
从[Google Drive][6]或[百度网盘][10](提取码:fc51)下载ground truth,并放入**$RSN_HOME/dataset/COCO/gt_json/**。
-
从[Google Drive][6]或[百度网盘][10](提取码:fc51)下载检测结果,并放入**$RSN_HOME/dataset/COCO/det_json/**。
MPII
-
从[MPII网站][5]下载图片,并将图片放入**$RSN_HOME/dataset/MPII/images/**。
-
从[Google Drive][6]或[百度网盘][10](提取码:fc51)下载ground truth,并放入**$RSN_HOME/dataset/MPII/gt_json/**。
-
从[Google Drive][6]或[百度网盘][10](提取码:fc51)下载检测结果,并放入**$RSN_HOME/dataset/MPII/det_json/**。
日志
创建一个目录来保存日志和模型:
mkdir $RSN_HOME/model_logs
训练
进入指定的实验目录,例如:
cd $RSN_HOME/exps/RSN50.coco
然后运行:
python config.py -log
python -m torch.distributed.launch --nproc_per_node=gpu_num train.py
其中gpu_num是GPU的数量。
测试
python -m torch.distributed.launch --nproc_per_node=gpu_num test.py -i iter_num
其中gpu_num是GPU的数量,iter_num是你想要测试的迭代次数。
引用
如果我们的项目对您的研究有帮助,请考虑在您的出版物中引用它们。
@inproceedings{cai2020learning,
title={Learning Delicate Local Representations for Multi-Person Pose Estimation},
author={Yuanhao Cai and Zhicheng Wang and Zhengxiong Luo and Binyi Yin and Angang Du and Haoqian Wang and Xinyu Zhou and Erjin Zhou and Xiangyu Zhang and Jian Sun},
booktitle={ECCV},
year={2020}
}
@inproceedings{cai2019res,
title={Res-steps-net for multi-person pose estimation},
author={Cai, Yuanhao and Wang, Zhicheng and Yin, Binyi and Yin, Ruihao and Du, Angang and Luo, Zhengxiong and Li, Zeming and Zhou, Xinyu and Yu, Gang and Zhou, Erjin and others},
booktitle={Joint COCO and Mapillary Workshop at ICCV},
year={2019}
}