From c23b7ca094a5b4feb2aad89c1f2cb0a0d348394f Mon Sep 17 00:00:00 2001 From: xin-li-67 Date: Sun, 23 Apr 2023 09:30:51 +0800 Subject: [PATCH 1/6] fix naming issue --- configs/face_2d_keypoint/topdown_regression/README.md | 2 +- configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.md | 2 +- .../face_2d_keypoint/topdown_regression/wflw/resnet_wflw.yml | 2 +- ..._wflw-256x256.py => td-reg_res50_8xb64-210e_wflw-256x256.py} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename configs/face_2d_keypoint/topdown_regression/wflw/{td-reg_res50_8x64e-210e_wflw-256x256.py => td-reg_res50_8xb64-210e_wflw-256x256.py} (100%) diff --git a/configs/face_2d_keypoint/topdown_regression/README.md b/configs/face_2d_keypoint/topdown_regression/README.md index 030ee6b8fa..fef409acd3 100644 --- a/configs/face_2d_keypoint/topdown_regression/README.md +++ b/configs/face_2d_keypoint/topdown_regression/README.md @@ -14,4 +14,4 @@ Result on WFLW test set | Model | Input Size | NME | ckpt | log | | :-------------------------------------------------------------- | :--------: | :--: | :------------------------------------------------------------: | :-----------------------------------------------------------: | -| [ResNet-50](/configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8x64e-210e_wflw-256x256.py) | 256x256 | 4.88 | [ckpt](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256-92d0ba7f_20210303.pth) | [log](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256_20210303.log.json) | +| [ResNet-50](/configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8xb64-210e_wflw-256x256.py) | 256x256 | 4.88 | [ckpt](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256-92d0ba7f_20210303.pth) | [log](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256_20210303.log.json) | diff --git a/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.md b/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.md index afaac002e9..1ec3e76dba 100644 --- a/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.md +++ b/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.md @@ -55,4 +55,4 @@ The model is trained on WFLW train set. | Model | Input Size | NME | ckpt | log | | :-------------------------------------------------------------- | :--------: | :--: | :------------------------------------------------------------: | :-----------------------------------------------------------: | -| [ResNet-50](/configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8x64e-210e_wflw-256x256.py) | 256x256 | 4.88 | [ckpt](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256-92d0ba7f_20210303.pth) | [log](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256_20210303.log.json) | +| [ResNet-50](/configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8xb64-210e_wflw-256x256.py) | 256x256 | 4.88 | [ckpt](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256-92d0ba7f_20210303.pth) | [log](https://download.openmmlab.com/mmpose/face/deeppose/deeppose_res50_wflw_256x256_20210303.log.json) | diff --git a/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.yml b/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.yml index 113cb33fc3..81c7b79a7e 100644 --- a/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.yml +++ b/configs/face_2d_keypoint/topdown_regression/wflw/resnet_wflw.yml @@ -1,5 +1,5 @@ Models: -- Config: configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8x64e-210e_wflw-256x256.py +- Config: configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8xb64-210e_wflw-256x256.py In Collection: ResNet Metadata: Architecture: diff --git a/configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8x64e-210e_wflw-256x256.py b/configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8xb64-210e_wflw-256x256.py similarity index 100% rename from configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8x64e-210e_wflw-256x256.py rename to configs/face_2d_keypoint/topdown_regression/wflw/td-reg_res50_8xb64-210e_wflw-256x256.py From d7711cbe42a06b864f13bfc45ce594f679a0415e Mon Sep 17 00:00:00 2001 From: Tau Date: Sun, 23 Apr 2023 12:13:09 +0800 Subject: [PATCH 2/6] [Feature] Support LaPa Dataset (#2281) --- configs/_base_/datasets/lapa.py | 688 ++++++++++++++++++ configs/face_2d_keypoint/rtmpose/README.md | 8 + .../lapa/rtmpose-m_8xb64-120e_lapa-256x256.py | 247 +++++++ .../rtmpose/lapa/rtmpose_lapa.md | 40 + .../rtmpose/lapa/rtmpose_lapa.yml | 15 + demo/topdown_demo_with_mmdet.py | 3 +- docs/en/dataset_zoo/2d_face_keypoint.md | 56 ++ mmpose/datasets/datasets/face/__init__.py | 3 +- mmpose/datasets/datasets/face/lapa_dataset.py | 54 ++ mmpose/datasets/transforms/converting.py | 79 +- projects/rtmpose/README.md | 48 +- projects/rtmpose/README_CN.md | 54 +- ...y => rtmpose-m_8xb64-120e_lapa-256x256.py} | 45 +- tests/data/lapa/10773046825_0.jpg | Bin 0 -> 363612 bytes tests/data/lapa/13609937564_5.jpg | Bin 0 -> 59876 bytes tests/data/lapa/test_lapa.json | 39 + .../test_face_datasets/test_lapa_dataset.py | 93 +++ .../test_transforms/test_converting.py | 37 + tools/dataset_converters/lapa2coco.py | 104 +++ 19 files changed, 1543 insertions(+), 70 deletions(-) create mode 100644 configs/_base_/datasets/lapa.py create mode 100644 configs/face_2d_keypoint/rtmpose/lapa/rtmpose-m_8xb64-120e_lapa-256x256.py create mode 100644 configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.md create mode 100644 configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.yml create mode 100644 mmpose/datasets/datasets/face/lapa_dataset.py rename projects/rtmpose/rtmpose/face_2d_keypoint/{rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py => rtmpose-m_8xb64-120e_lapa-256x256.py} (84%) create mode 100644 tests/data/lapa/10773046825_0.jpg create mode 100644 tests/data/lapa/13609937564_5.jpg create mode 100644 tests/data/lapa/test_lapa.json create mode 100644 tests/test_datasets/test_datasets/test_face_datasets/test_lapa_dataset.py create mode 100644 tools/dataset_converters/lapa2coco.py diff --git a/configs/_base_/datasets/lapa.py b/configs/_base_/datasets/lapa.py new file mode 100644 index 0000000000..26a0843404 --- /dev/null +++ b/configs/_base_/datasets/lapa.py @@ -0,0 +1,688 @@ +dataset_info = dict( + dataset_name='lapa', + paper_info=dict( + author='Liu, Yinglu and Shi, Hailin and Shen, Hao and Si, ' + 'Yue and Wang, Xiaobo and Mei, Tao', + title='A New Dataset and Boundary-Attention Semantic ' + 'Segmentation for Face Parsing.', + container='Proceedings of the AAAI Conference on ' + 'Artificial Intelligence 2020', + year='2020', + homepage='https://github.com/JDAI-CV/lapa-dataset', + ), + keypoint_info={ + 0: + dict( + name='kpt-0', id=0, color=[255, 0, 0], type='upper', + swap='kpt-32'), + 1: + dict( + name='kpt-1', id=1, color=[255, 0, 0], type='upper', + swap='kpt-31'), + 2: + dict( + name='kpt-2', id=2, color=[255, 0, 0], type='upper', + swap='kpt-30'), + 3: + dict( + name='kpt-3', id=3, color=[255, 0, 0], type='lower', + swap='kpt-29'), + 4: + dict( + name='kpt-4', id=4, color=[255, 0, 0], type='lower', + swap='kpt-28'), + 5: + dict( + name='kpt-5', id=5, color=[255, 0, 0], type='lower', + swap='kpt-27'), + 6: + dict( + name='kpt-6', id=6, color=[255, 0, 0], type='lower', + swap='kpt-26'), + 7: + dict( + name='kpt-7', id=7, color=[255, 0, 0], type='lower', + swap='kpt-25'), + 8: + dict( + name='kpt-8', id=8, color=[255, 0, 0], type='lower', + swap='kpt-24'), + 9: + dict( + name='kpt-9', id=9, color=[255, 0, 0], type='lower', + swap='kpt-23'), + 10: + dict( + name='kpt-10', + id=10, + color=[255, 0, 0], + type='lower', + swap='kpt-22'), + 11: + dict( + name='kpt-11', + id=11, + color=[255, 0, 0], + type='lower', + swap='kpt-21'), + 12: + dict( + name='kpt-12', + id=12, + color=[255, 0, 0], + type='lower', + swap='kpt-20'), + 13: + dict( + name='kpt-13', + id=13, + color=[255, 0, 0], + type='lower', + swap='kpt-19'), + 14: + dict( + name='kpt-14', + id=14, + color=[255, 0, 0], + type='lower', + swap='kpt-18'), + 15: + dict( + name='kpt-15', + id=15, + color=[255, 0, 0], + type='lower', + swap='kpt-17'), + 16: + dict(name='kpt-16', id=16, color=[255, 0, 0], type='lower', swap=''), + 17: + dict( + name='kpt-17', + id=17, + color=[255, 0, 0], + type='lower', + swap='kpt-15'), + 18: + dict( + name='kpt-18', + id=18, + color=[255, 0, 0], + type='lower', + swap='kpt-14'), + 19: + dict( + name='kpt-19', + id=19, + color=[255, 0, 0], + type='lower', + swap='kpt-13'), + 20: + dict( + name='kpt-20', + id=20, + color=[255, 0, 0], + type='lower', + swap='kpt-12'), + 21: + dict( + name='kpt-21', + id=21, + color=[255, 0, 0], + type='lower', + swap='kpt-11'), + 22: + dict( + name='kpt-22', + id=22, + color=[255, 0, 0], + type='lower', + swap='kpt-10'), + 23: + dict( + name='kpt-23', + id=23, + color=[255, 0, 0], + type='lower', + swap='kpt-9'), + 24: + dict( + name='kpt-24', + id=24, + color=[255, 0, 0], + type='lower', + swap='kpt-8'), + 25: + dict( + name='kpt-25', + id=25, + color=[255, 0, 0], + type='lower', + swap='kpt-7'), + 26: + dict( + name='kpt-26', + id=26, + color=[255, 0, 0], + type='lower', + swap='kpt-6'), + 27: + dict( + name='kpt-27', + id=27, + color=[255, 0, 0], + type='lower', + swap='kpt-5'), + 28: + dict( + name='kpt-28', + id=28, + color=[255, 0, 0], + type='lower', + swap='kpt-4'), + 29: + dict( + name='kpt-29', + id=29, + color=[255, 0, 0], + type='lower', + swap='kpt-3'), + 30: + dict( + name='kpt-30', + id=30, + color=[255, 0, 0], + type='upper', + swap='kpt-2'), + 31: + dict( + name='kpt-31', + id=31, + color=[255, 0, 0], + type='upper', + swap='kpt-1'), + 32: + dict( + name='kpt-32', + id=32, + color=[255, 0, 0], + type='upper', + swap='kpt-0'), + 33: + dict( + name='kpt-33', + id=33, + color=[255, 0, 0], + type='upper', + swap='kpt-46'), + 34: + dict( + name='kpt-34', + id=34, + color=[255, 0, 0], + type='upper', + swap='kpt-45'), + 35: + dict( + name='kpt-35', + id=35, + color=[255, 0, 0], + type='upper', + swap='kpt-44'), + 36: + dict( + name='kpt-36', + id=36, + color=[255, 0, 0], + type='upper', + swap='kpt-43'), + 37: + dict( + name='kpt-37', + id=37, + color=[255, 0, 0], + type='upper', + swap='kpt-42'), + 38: + dict( + name='kpt-38', + id=38, + color=[255, 0, 0], + type='upper', + swap='kpt-50'), + 39: + dict( + name='kpt-39', + id=39, + color=[255, 0, 0], + type='upper', + swap='kpt-49'), + 40: + dict( + name='kpt-40', + id=40, + color=[255, 0, 0], + type='upper', + swap='kpt-48'), + 41: + dict( + name='kpt-41', + id=41, + color=[255, 0, 0], + type='upper', + swap='kpt-47'), + 42: + dict( + name='kpt-42', + id=42, + color=[255, 0, 0], + type='upper', + swap='kpt-37'), + 43: + dict( + name='kpt-43', + id=43, + color=[255, 0, 0], + type='upper', + swap='kpt-36'), + 44: + dict( + name='kpt-44', + id=44, + color=[255, 0, 0], + type='upper', + swap='kpt-35'), + 45: + dict( + name='kpt-45', + id=45, + color=[255, 0, 0], + type='upper', + swap='kpt-34'), + 46: + dict( + name='kpt-46', + id=46, + color=[255, 0, 0], + type='upper', + swap='kpt-33'), + 47: + dict( + name='kpt-47', + id=47, + color=[255, 0, 0], + type='upper', + swap='kpt-41'), + 48: + dict( + name='kpt-48', + id=48, + color=[255, 0, 0], + type='upper', + swap='kpt-40'), + 49: + dict( + name='kpt-49', + id=49, + color=[255, 0, 0], + type='upper', + swap='kpt-39'), + 50: + dict( + name='kpt-50', + id=50, + color=[255, 0, 0], + type='upper', + swap='kpt-38'), + 51: + dict(name='kpt-51', id=51, color=[255, 0, 0], type='upper', swap=''), + 52: + dict(name='kpt-52', id=52, color=[255, 0, 0], type='upper', swap=''), + 53: + dict(name='kpt-53', id=53, color=[255, 0, 0], type='lower', swap=''), + 54: + dict(name='kpt-54', id=54, color=[255, 0, 0], type='lower', swap=''), + 55: + dict( + name='kpt-55', + id=55, + color=[255, 0, 0], + type='upper', + swap='kpt-65'), + 56: + dict( + name='kpt-56', + id=56, + color=[255, 0, 0], + type='lower', + swap='kpt-64'), + 57: + dict( + name='kpt-57', + id=57, + color=[255, 0, 0], + type='lower', + swap='kpt-63'), + 58: + dict( + name='kpt-58', + id=58, + color=[255, 0, 0], + type='lower', + swap='kpt-62'), + 59: + dict( + name='kpt-59', + id=59, + color=[255, 0, 0], + type='lower', + swap='kpt-61'), + 60: + dict(name='kpt-60', id=60, color=[255, 0, 0], type='lower', swap=''), + 61: + dict( + name='kpt-61', + id=61, + color=[255, 0, 0], + type='lower', + swap='kpt-59'), + 62: + dict( + name='kpt-62', + id=62, + color=[255, 0, 0], + type='lower', + swap='kpt-58'), + 63: + dict( + name='kpt-63', + id=63, + color=[255, 0, 0], + type='lower', + swap='kpt-57'), + 64: + dict( + name='kpt-64', + id=64, + color=[255, 0, 0], + type='lower', + swap='kpt-56'), + 65: + dict( + name='kpt-65', + id=65, + color=[255, 0, 0], + type='upper', + swap='kpt-55'), + 66: + dict( + name='kpt-66', + id=66, + color=[255, 0, 0], + type='upper', + swap='kpt-79'), + 67: + dict( + name='kpt-67', + id=67, + color=[255, 0, 0], + type='upper', + swap='kpt-78'), + 68: + dict( + name='kpt-68', + id=68, + color=[255, 0, 0], + type='upper', + swap='kpt-77'), + 69: + dict( + name='kpt-69', + id=69, + color=[255, 0, 0], + type='upper', + swap='kpt-76'), + 70: + dict( + name='kpt-70', + id=70, + color=[255, 0, 0], + type='upper', + swap='kpt-75'), + 71: + dict( + name='kpt-71', + id=71, + color=[255, 0, 0], + type='upper', + swap='kpt-82'), + 72: + dict( + name='kpt-72', + id=72, + color=[255, 0, 0], + type='upper', + swap='kpt-81'), + 73: + dict( + name='kpt-73', + id=73, + color=[255, 0, 0], + type='upper', + swap='kpt-80'), + 74: + dict( + name='kpt-74', + id=74, + color=[255, 0, 0], + type='upper', + swap='kpt-83'), + 75: + dict( + name='kpt-75', + id=75, + color=[255, 0, 0], + type='upper', + swap='kpt-70'), + 76: + dict( + name='kpt-76', + id=76, + color=[255, 0, 0], + type='upper', + swap='kpt-69'), + 77: + dict( + name='kpt-77', + id=77, + color=[255, 0, 0], + type='upper', + swap='kpt-68'), + 78: + dict( + name='kpt-78', + id=78, + color=[255, 0, 0], + type='upper', + swap='kpt-67'), + 79: + dict( + name='kpt-79', + id=79, + color=[255, 0, 0], + type='upper', + swap='kpt-66'), + 80: + dict( + name='kpt-80', + id=80, + color=[255, 0, 0], + type='upper', + swap='kpt-73'), + 81: + dict( + name='kpt-81', + id=81, + color=[255, 0, 0], + type='upper', + swap='kpt-72'), + 82: + dict( + name='kpt-82', + id=82, + color=[255, 0, 0], + type='upper', + swap='kpt-71'), + 83: + dict( + name='kpt-83', + id=83, + color=[255, 0, 0], + type='upper', + swap='kpt-74'), + 84: + dict( + name='kpt-84', + id=84, + color=[255, 0, 0], + type='lower', + swap='kpt-90'), + 85: + dict( + name='kpt-85', + id=85, + color=[255, 0, 0], + type='lower', + swap='kpt-89'), + 86: + dict( + name='kpt-86', + id=86, + color=[255, 0, 0], + type='lower', + swap='kpt-88'), + 87: + dict(name='kpt-87', id=87, color=[255, 0, 0], type='lower', swap=''), + 88: + dict( + name='kpt-88', + id=88, + color=[255, 0, 0], + type='lower', + swap='kpt-86'), + 89: + dict( + name='kpt-89', + id=89, + color=[255, 0, 0], + type='lower', + swap='kpt-85'), + 90: + dict( + name='kpt-90', + id=90, + color=[255, 0, 0], + type='lower', + swap='kpt-84'), + 91: + dict( + name='kpt-91', + id=91, + color=[255, 0, 0], + type='lower', + swap='kpt-95'), + 92: + dict( + name='kpt-92', + id=92, + color=[255, 0, 0], + type='lower', + swap='kpt-94'), + 93: + dict(name='kpt-93', id=93, color=[255, 0, 0], type='lower', swap=''), + 94: + dict( + name='kpt-94', + id=94, + color=[255, 0, 0], + type='lower', + swap='kpt-92'), + 95: + dict( + name='kpt-95', + id=95, + color=[255, 0, 0], + type='lower', + swap='kpt-91'), + 96: + dict( + name='kpt-96', + id=96, + color=[255, 0, 0], + type='lower', + swap='kpt-100'), + 97: + dict( + name='kpt-97', + id=97, + color=[255, 0, 0], + type='lower', + swap='kpt-99'), + 98: + dict(name='kpt-98', id=98, color=[255, 0, 0], type='lower', swap=''), + 99: + dict( + name='kpt-99', + id=99, + color=[255, 0, 0], + type='lower', + swap='kpt-97'), + 100: + dict( + name='kpt-100', + id=100, + color=[255, 0, 0], + type='lower', + swap='kpt-96'), + 101: + dict( + name='kpt-101', + id=101, + color=[255, 0, 0], + type='lower', + swap='kpt-103'), + 102: + dict(name='kpt-102', id=102, color=[255, 0, 0], type='lower', swap=''), + 103: + dict( + name='kpt-103', + id=103, + color=[255, 0, 0], + type='lower', + swap='kpt-101'), + 104: + dict( + name='kpt-104', + id=104, + color=[255, 0, 0], + type='upper', + swap='kpt-105'), + 105: + dict( + name='kpt-105', + id=105, + color=[255, 0, 0], + type='upper', + swap='kpt-104') + }, + skeleton_info={}, + joint_weights=[ + 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, + 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, + 0.8, 0.8, 0.8, 0.8, 0.8, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, + 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, + 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.0, 1.0 + ], + sigmas=[]) diff --git a/configs/face_2d_keypoint/rtmpose/README.md b/configs/face_2d_keypoint/rtmpose/README.md index d309696bed..5381e966f6 100644 --- a/configs/face_2d_keypoint/rtmpose/README.md +++ b/configs/face_2d_keypoint/rtmpose/README.md @@ -22,3 +22,11 @@ Results on WFLW dataset | Model | Input Size | NME | Details and Download | | :-------: | :--------: | :--: | :---------------------------------------: | | RTMPose-m | 256x256 | 4.01 | [rtmpose_wflw.md](./wflw/rtmpose_wflw.md) | + +### LaPa Dataset + +Results on LaPa dataset + +| Model | Input Size | NME | Details and Download | +| :-------: | :--------: | :--: | :---------------------------------------: | +| RTMPose-m | 256x256 | 1.29 | [rtmpose_lapa.md](./wflw/rtmpose_lapa.md) | diff --git a/configs/face_2d_keypoint/rtmpose/lapa/rtmpose-m_8xb64-120e_lapa-256x256.py b/configs/face_2d_keypoint/rtmpose/lapa/rtmpose-m_8xb64-120e_lapa-256x256.py new file mode 100644 index 0000000000..97b7104e9a --- /dev/null +++ b/configs/face_2d_keypoint/rtmpose/lapa/rtmpose-m_8xb64-120e_lapa-256x256.py @@ -0,0 +1,247 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +max_epochs = 120 +stage2_num_epochs = 10 +base_lr = 4e-3 + +train_cfg = dict(max_epochs=max_epochs, val_interval=1) +randomness = dict(seed=21) + +# optimizer +optim_wrapper = dict( + type='OptimWrapper', + optimizer=dict(type='AdamW', lr=base_lr, weight_decay=0.05), + paramwise_cfg=dict( + norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True)) + +# learning rate +param_scheduler = [ + dict( + type='LinearLR', + start_factor=1.0e-5, + by_epoch=False, + begin=0, + end=1000), + dict( + # use cosine lr from 150 to 300 epoch + type='CosineAnnealingLR', + eta_min=base_lr * 0.05, + begin=max_epochs // 2, + end=max_epochs, + T_max=max_epochs // 2, + by_epoch=True, + convert_to_iter_based=True), +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=512) + +# codec settings +codec = dict( + type='SimCCLabel', + input_size=(256, 256), + sigma=(5.66, 5.66), + simcc_split_ratio=2.0, + normalize=False, + use_dark=False) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + _scope_='mmdet', + type='CSPNeXt', + arch='P5', + expand_ratio=0.5, + deepen_factor=0.67, + widen_factor=0.75, + out_indices=(4, ), + channel_attention=True, + norm_cfg=dict(type='SyncBN'), + act_cfg=dict(type='SiLU'), + init_cfg=dict( + type='Pretrained', + prefix='backbone.', + checkpoint='https://download.openmmlab.com/mmpose/v1/projects/' + 'rtmposev1/cspnext-m_udp-aic-coco_210e-256x192-f2f7d6f6_20230130.pth' # noqa + )), + head=dict( + type='RTMCCHead', + in_channels=768, + out_channels=106, + input_size=codec['input_size'], + in_featuremap_size=(8, 8), + simcc_split_ratio=codec['simcc_split_ratio'], + final_layer_kernel_size=7, + gau_cfg=dict( + hidden_dims=256, + s=128, + expansion_factor=2, + dropout_rate=0., + drop_path=0., + act_fn='SiLU', + use_rel_bias=False, + pos_enc=False), + loss=dict( + type='KLDiscretLoss', + use_target_weight=True, + beta=10., + label_softmax=True), + decoder=codec), + test_cfg=dict(flip_test=True, )) + +# base dataset settings +dataset_type = 'LapaDataset' +data_mode = 'topdown' +data_root = 'data/LaPa/' + +backend_args = dict(backend='local') +# backend_args = dict( +# backend='petrel', +# path_mapping=dict({ +# f'{data_root}': 's3://openmmlab/datasets/pose/LaPa/', +# f'{data_root}': 's3://openmmlab/datasets/pose/LaPa/' +# })) + +# pipelines +train_pipeline = [ + dict(type='LoadImage', backend_args=backend_args), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomHalfBody'), + dict( + type='RandomBBoxTransform', scale_factor=[0.5, 1.5], rotate_factor=80), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='mmdet.YOLOXHSVRandomAug'), + dict(type='PhotometricDistortion'), + dict( + type='Albumentation', + transforms=[ + dict(type='Blur', p=0.2), + dict(type='MedianBlur', p=0.2), + dict( + type='CoarseDropout', + max_holes=1, + max_height=0.4, + max_width=0.4, + min_holes=1, + min_height=0.2, + min_width=0.2, + p=1.0), + ]), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage', backend_args=backend_args), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +train_pipeline_stage2 = [ + dict(type='LoadImage', backend_args=backend_args), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + # dict(type='RandomHalfBody'), + dict( + type='RandomBBoxTransform', + shift_factor=0., + scale_factor=[0.75, 1.25], + rotate_factor=60), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='mmdet.YOLOXHSVRandomAug'), + dict( + type='Albumentation', + transforms=[ + dict(type='Blur', p=0.1), + dict(type='MedianBlur', p=0.1), + dict( + type='CoarseDropout', + max_holes=1, + max_height=0.4, + max_width=0.4, + min_holes=1, + min_height=0.2, + min_width=0.2, + p=0.5), + ]), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=32, + num_workers=10, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='annotations/lapa_train.json', + data_prefix=dict(img='train/images/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=10, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='annotations/lapa_val.json', + data_prefix=dict(img='val/images/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = dict( + batch_size=32, + num_workers=10, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='annotations/lapa_test.json', + data_prefix=dict(img='test/images/'), + test_mode=True, + pipeline=val_pipeline, + )) + +# hooks +default_hooks = dict( + checkpoint=dict( + save_best='NME', rule='less', max_keep_ckpts=1, interval=1)) + +custom_hooks = [ + dict( + type='EMAHook', + ema_type='ExpMomentumEMA', + momentum=0.0002, + update_buffers=True, + priority=49), + dict( + type='mmdet.PipelineSwitchHook', + switch_epoch=max_epochs - stage2_num_epochs, + switch_pipeline=train_pipeline_stage2) +] + +# evaluators +val_evaluator = dict( + type='NME', + norm_mode='keypoint_distance', +) +test_evaluator = val_evaluator diff --git a/configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.md b/configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.md new file mode 100644 index 0000000000..62a3f25157 --- /dev/null +++ b/configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.md @@ -0,0 +1,40 @@ + + +
+RTMDet (ArXiv 2022) + +```bibtex +@misc{lyu2022rtmdet, + title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors}, + author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen}, + year={2022}, + eprint={2212.07784}, + archivePrefix={arXiv}, + primaryClass={cs.CV} +} +``` + +
+ + + +
+LaPa (AAAI'2020) + +```bibtex +@inproceedings{liu2020new, + title={A New Dataset and Boundary-Attention Semantic Segmentation for Face Parsing.}, + author={Liu, Yinglu and Shi, Hailin and Shen, Hao and Si, Yue and Wang, Xiaobo and Mei, Tao}, + booktitle={AAAI}, + pages={11637--11644}, + year={2020} +} +``` + +
+ +Results on COCO-WholeBody-Face val set + +| Arch | Input Size | NME | ckpt | log | +| :------------------------------------------------------------- | :--------: | :--: | :------------------------------------------------------------: | :------------------------------------------------------------: | +| [pose_rtmpose_m](/configs/face_2d_keypoint/rtmpose/lapa/rtmpose-m_8xb64-120e_lapa-256x256.py) | 256x256 | 1.29 | [ckpt](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-lapa_pt-aic-coco_120e-256x256-762b1ae2_20230422.pth) | [log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-lapa_pt-aic-coco_120e-256x256-762b1ae2_20230422.json) | diff --git a/configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.yml b/configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.yml new file mode 100644 index 0000000000..96acff8de6 --- /dev/null +++ b/configs/face_2d_keypoint/rtmpose/lapa/rtmpose_lapa.yml @@ -0,0 +1,15 @@ +Models: +- Config: configs/face_2d_keypoint/rtmpose/lapa/rtmpose-m_8xb64-120e_lapa-256x256.py + In Collection: RTMPose + Alias: face + Metadata: + Architecture: + - RTMPose + Training Data: LaPa + Name: rtmpose-m_8xb64-120e_lapa-256x256 + Results: + - Dataset: WFLW + Metrics: + NME: 1.29 + Task: Face 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-lapa_pt-aic-coco_120e-256x256-762b1ae2_20230422.pth diff --git a/demo/topdown_demo_with_mmdet.py b/demo/topdown_demo_with_mmdet.py index c2e3d8d714..cd001e8db6 100644 --- a/demo/topdown_demo_with_mmdet.py +++ b/demo/topdown_demo_with_mmdet.py @@ -214,7 +214,8 @@ def main(): if output_file: img_vis = visualizer.get_image() - mmcv.imwrite(mmcv.rgb2bgr(img_vis), output_file) + if args.show: + mmcv.imwrite(mmcv.rgb2bgr(img_vis), output_file) elif input_type in ['webcam', 'video']: from mmpose.visualization import FastVisualizer diff --git a/docs/en/dataset_zoo/2d_face_keypoint.md b/docs/en/dataset_zoo/2d_face_keypoint.md index 17eb823954..1fe40273db 100644 --- a/docs/en/dataset_zoo/2d_face_keypoint.md +++ b/docs/en/dataset_zoo/2d_face_keypoint.md @@ -10,6 +10,7 @@ MMPose supported datasets: - [AFLW](#aflw-dataset) \[ [Homepage](https://www.tugraz.at/institute/icg/research/team-bischof/lrs/downloads/aflw/) \] - [COFW](#cofw-dataset) \[ [Homepage](http://www.vision.caltech.edu/xpburgos/ICCV13/) \] - [COCO-WholeBody-Face](#coco-wholebody-face) \[ [Homepage](https://github.com/jin-s13/COCO-WholeBody/) \] +- [LaPa](#lapa-dataset) \[ [Homepage](https://github.com/JDAI-CV/lapa-dataset) \] ## 300W Dataset @@ -325,3 +326,58 @@ mmpose Please also install the latest version of [Extended COCO API](https://github.com/jin-s13/xtcocoapi) to support COCO-WholeBody evaluation: `pip install xtcocotools` + +## LaPa + + + +
+LaPa (AAAI'2020) + +```bibtex +@inproceedings{liu2020new, + title={A New Dataset and Boundary-Attention Semantic Segmentation for Face Parsing.}, + author={Liu, Yinglu and Shi, Hailin and Shen, Hao and Si, Yue and Wang, Xiaobo and Mei, Tao}, + booktitle={AAAI}, + pages={11637--11644}, + year={2020} +} +``` + +
+ +
+ +
+ +For [LaPa](https://github.com/JDAI-CV/lapa-dataset) dataset, images can be downloaded from [their github page](https://github.com/JDAI-CV/lapa-dataset). + +Download and extract them under $MMPOSE/data, and use our `tools/dataset_converters/lapa2coco.py` to make them look like this: + +```text +mmpose +├── mmpose +├── docs +├── tests +├── tools +├── configs +`── data + │── LaPa + │-- annotations + │ │-- lapa_train.json + │ |-- lapa_val.json + │ |-- lapa_test.json + │-- train + │ │-- images + │ │-- labels + │ │-- landmarks + │-- val + │ │-- images + │ │-- labels + │ │-- landmarks + `-- test + │ │-- images + │ │-- labels + │ │-- landmarks + +``` diff --git a/mmpose/datasets/datasets/face/__init__.py b/mmpose/datasets/datasets/face/__init__.py index e0a725cd0e..700cb605f7 100644 --- a/mmpose/datasets/datasets/face/__init__.py +++ b/mmpose/datasets/datasets/face/__init__.py @@ -3,9 +3,10 @@ from .coco_wholebody_face_dataset import CocoWholeBodyFaceDataset from .cofw_dataset import COFWDataset from .face_300w_dataset import Face300WDataset +from .lapa_dataset import LapaDataset from .wflw_dataset import WFLWDataset __all__ = [ 'Face300WDataset', 'WFLWDataset', 'AFLWDataset', 'COFWDataset', - 'CocoWholeBodyFaceDataset' + 'CocoWholeBodyFaceDataset', 'LapaDataset' ] diff --git a/mmpose/datasets/datasets/face/lapa_dataset.py b/mmpose/datasets/datasets/face/lapa_dataset.py new file mode 100644 index 0000000000..1a5bdc4ec0 --- /dev/null +++ b/mmpose/datasets/datasets/face/lapa_dataset.py @@ -0,0 +1,54 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmpose.registry import DATASETS +from ..base import BaseCocoStyleDataset + + +@DATASETS.register_module() +class LapaDataset(BaseCocoStyleDataset): + """LaPa dataset for face keypoint localization. + + "A New Dataset and Boundary-Attention Semantic Segmentation + for Face Parsing", AAAI'2020. + + The landmark annotations follow the 106 points mark-up. The definition + can be found in `https://github.com/JDAI-CV/lapa-dataset/`__ . + + Args: + ann_file (str): Annotation file path. Default: ''. + bbox_file (str, optional): Detection result file path. If + ``bbox_file`` is set, detected bboxes loaded from this file will + be used instead of ground-truth bboxes. This setting is only for + evaluation, i.e., ignored when ``test_mode`` is ``False``. + Default: ``None``. + data_mode (str): Specifies the mode of data samples: ``'topdown'`` or + ``'bottomup'``. In ``'topdown'`` mode, each data sample contains + one instance; while in ``'bottomup'`` mode, each data sample + contains all instances in a image. Default: ``'topdown'`` + metainfo (dict, optional): Meta information for dataset, such as class + information. Default: ``None``. + data_root (str, optional): The root directory for ``data_prefix`` and + ``ann_file``. Default: ``None``. + data_prefix (dict, optional): Prefix for training data. Default: + ``dict(img=None, ann=None)``. + filter_cfg (dict, optional): Config for filter data. Default: `None`. + indices (int or Sequence[int], optional): Support using first few + data in annotation file to facilitate training/testing on a smaller + dataset. Default: ``None`` which means using all ``data_infos``. + serialize_data (bool, optional): Whether to hold memory using + serialized objects, when enabled, data loader workers can use + shared RAM from master process instead of making a copy. + Default: ``True``. + pipeline (list, optional): Processing pipeline. Default: []. + test_mode (bool, optional): ``test_mode=True`` means in test phase. + Default: ``False``. + lazy_init (bool, optional): Whether to load annotation during + instantiation. In some cases, such as visualization, only the meta + information of the dataset is needed, which is not necessary to + load annotation file. ``Basedataset`` can skip load annotations to + save time by set ``lazy_init=False``. Default: ``False``. + max_refetch (int, optional): If ``Basedataset.prepare_data`` get a + None img. The maximum extra number of cycles to get a valid + image. Default: 1000. + """ + + METAINFO: dict = dict(from_file='configs/_base_/datasets/lapa.py') diff --git a/mmpose/datasets/transforms/converting.py b/mmpose/datasets/transforms/converting.py index 0730808967..38dcea0994 100644 --- a/mmpose/datasets/transforms/converting.py +++ b/mmpose/datasets/transforms/converting.py @@ -1,5 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. -from typing import List, Tuple +from typing import List, Tuple, Union import numpy as np from mmcv.transforms import BaseTransform @@ -25,11 +25,66 @@ class KeypointConverter(BaseTransform): num_keypoints (int): The number of keypoints in target dataset. mapping (list): A list containing mapping indexes. Each element has format (source_index, target_index) + + Example: + >>> import numpy as np + >>> # case 1: 1-to-1 mapping + >>> # (0, 0) means target[0] = source[0] + >>> self = KeypointConverter( + >>> num_keypoints=3, + >>> mapping=[ + >>> (0, 0), (1, 1), (2, 2), (3, 3) + >>> ]) + >>> results = dict( + >>> keypoints=np.arange(34).reshape(2, 3, 2), + >>> keypoints_visible=np.arange(34).reshape(2, 3, 2) % 2) + >>> results = self(results) + >>> assert np.equal(results['keypoints'], + >>> np.arange(34).reshape(2, 3, 2)).all() + >>> assert np.equal(results['keypoints_visible'], + >>> np.arange(34).reshape(2, 3, 2) % 2).all() + >>> + >>> # case 2: 2-to-1 mapping + >>> # ((1, 2), 0) means target[0] = (source[1] + source[2]) / 2 + >>> self = KeypointConverter( + >>> num_keypoints=3, + >>> mapping=[ + >>> ((1, 2), 0), (1, 1), (2, 2) + >>> ]) + >>> results = dict( + >>> keypoints=np.arange(34).reshape(2, 3, 2), + >>> keypoints_visible=np.arange(34).reshape(2, 3, 2) % 2) + >>> results = self(results) """ - def __init__(self, num_keypoints: int, mapping: List[Tuple[int, int]]): + def __init__(self, num_keypoints: int, + mapping: Union[List[Tuple[int, int]], List[Tuple[Tuple, + int]]]): self.num_keypoints = num_keypoints self.mapping = mapping + source_index, target_index = zip(*mapping) + + src1, src2 = [], [] + interpolation = False + for x in source_index: + if isinstance(x, (list, tuple)): + assert len(x) == 2, 'source_index should be a list/tuple of ' \ + 'length 2' + src1.append(x[0]) + src2.append(x[1]) + interpolation = True + else: + src1.append(x) + src2.append(x) + + # When paired source_indexes are input, + # keep a self.source_index2 for interpolation + if interpolation: + self.source_index2 = src2 + + self.source_index = src1 + self.target_index = target_index + self.interpolation = interpolation def transform(self, results: dict) -> dict: num_instances = results['keypoints'].shape[0] @@ -37,10 +92,22 @@ def transform(self, results: dict) -> dict: keypoints = np.zeros((num_instances, self.num_keypoints, 2)) keypoints_visible = np.zeros((num_instances, self.num_keypoints)) - source_index, target_index = zip(*self.mapping) - keypoints[:, target_index] = results['keypoints'][:, source_index] - keypoints_visible[:, target_index] = results[ - 'keypoints_visible'][:, source_index] + # When paired source_indexes are input, + # perform interpolation with self.source_index and self.source_index2 + if self.interpolation: + keypoints[:, self.target_index] = 0.5 * ( + results['keypoints'][:, self.source_index] + + results['keypoints'][:, self.source_index2]) + + keypoints_visible[:, self.target_index] = results[ + 'keypoints_visible'][:, self.source_index] * \ + results['keypoints_visible'][:, self.source_index2] + else: + keypoints[:, + self.target_index] = results['keypoints'][:, self. + source_index] + keypoints_visible[:, self.target_index] = results[ + 'keypoints_visible'][:, self.source_index] results['keypoints'] = keypoints results['keypoints_visible'] = keypoints_visible diff --git a/projects/rtmpose/README.md b/projects/rtmpose/README.md index bdb1db13d1..d697af3dcc 100644 --- a/projects/rtmpose/README.md +++ b/projects/rtmpose/README.md @@ -157,14 +157,14 @@ Feel free to join our community group for more help: ### Body 2d (17 Keypoints) -| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Logs | Download | -| :---------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :--------: | :------------: | -| [RTMPose-t](./rtmpose/body_2d_keypoint/rtmpose-t_8xb256-420e_coco-256x192.py) | 256x192 | 68.5 | 3.34 | 0.36 | 3.20 | 1.06 | 9.02 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-tiny_simcc-aic-coco_pt-aic-coco_420e-256x192-cfc8f33d_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-tiny_simcc-aic-coco_pt-aic-coco_420e-256x192-cfc8f33d_20230126.pth) | -| [RTMPose-s](./rtmpose/body_2d_keypoint/rtmpose-s_8xb256-420e_coco-256x192.py) | 256x192 | 72.2 | 5.47 | 0.68 | 4.48 | 1.39 | 13.89 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-s_simcc-aic-coco_pt-aic-coco_420e-256x192-fcb2599b_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-s_simcc-aic-coco_pt-aic-coco_420e-256x192-fcb2599b_20230126.pth) | -| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-256x192.py) | 256x192 | 75.8 | 13.59 | 1.93 | 11.06 | 2.29 | 26.44 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pth) | -| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-256x192.py) | 256x192 | 76.5 | 27.66 | 4.16 | 18.85 | 3.46 | 45.37 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-256x192-f016ffe0_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-256x192-f016ffe0_20230126.pth) | -| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-384x288.py) | 384x288 | 77.0 | 13.72 | 4.33 | 24.78 | 3.66 | - | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-384x288-a62a0b32_20230228.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-384x288-a62a0b32_20230228.pth) | -| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-384x288.py) | 384x288 | 77.3 | 27.79 | 9.35 | - | 6.05 | - | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-384x288-97d6cb0f_20230228.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-384x288-97d6cb0f_20230228.pth) | +| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Download | +| :--------------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :-----------------: | +| [RTMPose-t](./rtmpose/body_2d_keypoint/rtmpose-t_8xb256-420e_coco-256x192.py) | 256x192 | 68.5 | 3.34 | 0.36 | 3.20 | 1.06 | 9.02 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-tiny_simcc-aic-coco_pt-aic-coco_420e-256x192-cfc8f33d_20230126.pth) | +| [RTMPose-s](./rtmpose/body_2d_keypoint/rtmpose-s_8xb256-420e_coco-256x192.py) | 256x192 | 72.2 | 5.47 | 0.68 | 4.48 | 1.39 | 13.89 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-s_simcc-aic-coco_pt-aic-coco_420e-256x192-fcb2599b_20230126.pth) | +| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-256x192.py) | 256x192 | 75.8 | 13.59 | 1.93 | 11.06 | 2.29 | 26.44 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pth) | +| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-256x192.py) | 256x192 | 76.5 | 27.66 | 4.16 | 18.85 | 3.46 | 45.37 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-256x192-f016ffe0_20230126.pth) | +| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-384x288.py) | 384x288 | 77.0 | 13.72 | 4.33 | 24.78 | 3.66 | - | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-384x288-a62a0b32_20230228.pth) | +| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-384x288.py) | 384x288 | 77.3 | 27.79 | 9.35 | - | 6.05 | - | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-384x288-97d6cb0f_20230228.pth) | #### Model Pruning @@ -172,29 +172,35 @@ Feel free to join our community group for more help: - Model pruning is supported by [MMRazor](https://github.com/open-mmlab/mmrazor) -| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Logs | Download | -| :---------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :--------: | :------------: | -| RTMPose-s-aic-coco-pruned | 256x192 | 69.4 | 3.43 | 0.35 | - | - | - | [log](https://download.openmmlab.com/mmrazor/v1/pruning/group_fisher/rtmpose-s/group_fisher_finetune_rtmpose-s_8xb256-420e_aic-coco-256x192.json) | [model](https://download.openmmlab.com/mmrazor/v1/pruning/group_fisher/rtmpose-s/group_fisher_finetune_rtmpose-s_8xb256-420e_aic-coco-256x192.pth) | +| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Download | +| :--------------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :-----------------: | +| RTMPose-s-aic-coco-pruned | 256x192 | 69.4 | 3.43 | 0.35 | - | - | - | [Model](https://download.openmmlab.com/mmrazor/v1/pruning/group_fisher/rtmpose-s/group_fisher_finetune_rtmpose-s_8xb256-420e_aic-coco-256x192.pth) | For more details, please refer to [GroupFisher Pruning for RTMPose](./rtmpose/pruning/README.md). ### WholeBody 2d (133 Keypoints) -| Config | Input Size | Whole AP | Whole AR | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Logs | Download | -| :----------------------------- | :--------: | :------: | :------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------: | :-------------------------------: | -| [RTMPose-m](./rtmpose/wholebody_2d_keypoint/rtmpose-m_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 60.4 | 66.7 | 2.22 | 13.50 | 4.00 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.pth) | -| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 63.2 | 69.4 | 4.52 | 23.41 | 5.67 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-256x192-6f206314_20230124.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-256x192-6f206314_20230124.pth) | -| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb32-270e_coco-wholebody-384x288.py) | 384x288 | 67.0 | 72.3 | 10.07 | 44.58 | 7.68 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.pth) | +| Config | Input Size | Whole AP | Whole AR | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Download | +| :------------------------------------------- | :--------: | :------: | :------: | :------: | :--------------------------------: | :---------------------------------------: | :---------------------------------------------: | +| [RTMPose-m](./rtmpose/wholebody_2d_keypoint/rtmpose-m_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 60.4 | 66.7 | 2.22 | 13.50 | 4.00 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.pth) | +| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 63.2 | 69.4 | 4.52 | 23.41 | 5.67 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-256x192-6f206314_20230124.pth) | +| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb32-270e_coco-wholebody-384x288.py) | 384x288 | 67.0 | 72.3 | 10.07 | 44.58 | 7.68 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.pth) | ### Animal 2d (17 Keypoints) -| Config | Input Size | AP
(AP10K) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Logs | Download | -| :---------------------------: | :--------: | :----------------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------: | :------------------------------: | -| [RTMPose-m](./rtmpose/animal_2d_keypoint/rtmpose-m_8xb64-210e_ap10k-256x256.py) | 256x256 | 72.2 | 2.57 | 14.157 | 2.404 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.pth) | +| Config | Input Size | AP
(AP10K) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Download | +| :-----------------------------------------: | :--------: | :----------------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | +| [RTMPose-m](./rtmpose/animal_2d_keypoint/rtmpose-m_8xb64-210e_ap10k-256x256.py) | 256x256 | 72.2 | 2.57 | 14.157 | 2.404 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.pth) | -### Face 2d +### Face 2d (106 Keypoints) -Coming soon +
+ +
+ +| Config | Input Size | NME
(LaPa) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Download | +| :----------------------------------------------------------------------------: | :--------: | :----------------: | :------: | :--------------------------------: | :---------------------------------------: | :---------: | +| [RTMPose-m (alpha version)](./rtmpose/face_2d_keypoint/rtmpose-m_8xb64-120e_lapa-256x256.py) | 256x256 | 1.70 | - | - | - | Coming soon | ### Hand 2d diff --git a/projects/rtmpose/README_CN.md b/projects/rtmpose/README_CN.md index 5b7979c3ec..0b25ebece2 100644 --- a/projects/rtmpose/README_CN.md +++ b/projects/rtmpose/README_CN.md @@ -148,14 +148,14 @@ RTMPose 是一个长期优化迭代的项目,致力于业务场景下的高性 ### 人体 2d 关键点 (17 Keypoints) -| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Logs | Download | -| :---------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :--------: | :------------: | -| [RTMPose-t](./rtmpose/body_2d_keypoint/rtmpose-t_8xb256-420e_coco-256x192.py) | 256x192 | 68.5 | 3.34 | 0.36 | 3.20 | 1.06 | 9.02 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-tiny_simcc-aic-coco_pt-aic-coco_420e-256x192-cfc8f33d_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-tiny_simcc-aic-coco_pt-aic-coco_420e-256x192-cfc8f33d_20230126.pth) | -| [RTMPose-s](./rtmpose/body_2d_keypoint/rtmpose-s_8xb256-420e_coco-256x192.py) | 256x192 | 72.2 | 5.47 | 0.68 | 4.48 | 1.39 | 13.89 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-s_simcc-aic-coco_pt-aic-coco_420e-256x192-fcb2599b_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-s_simcc-aic-coco_pt-aic-coco_420e-256x192-fcb2599b_20230126.pth) | -| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-256x192.py) | 256x192 | 75.8 | 13.59 | 1.93 | 11.06 | 2.29 | 26.44 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pth) | -| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-256x192.py) | 256x192 | 76.5 | 27.66 | 4.16 | 18.85 | 3.46 | 45.37 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-256x192-f016ffe0_20230126.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-256x192-f016ffe0_20230126.pth) | -| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-384x288.py) | 384x288 | 77.0 | 13.72 | 4.33 | 24.78 | 3.66 | - | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-384x288-a62a0b32_20230228.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-384x288-a62a0b32_20230228.pth) | -| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-384x288.py) | 384x288 | 77.3 | 27.79 | 9.35 | - | 6.05 | - | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-384x288-97d6cb0f_20230228.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-384x288-97d6cb0f_20230228.pth) | +| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Download | +| :--------------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :-----------------: | +| [RTMPose-t](./rtmpose/body_2d_keypoint/rtmpose-t_8xb256-420e_coco-256x192.py) | 256x192 | 68.5 | 3.34 | 0.36 | 3.20 | 1.06 | 9.02 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-tiny_simcc-aic-coco_pt-aic-coco_420e-256x192-cfc8f33d_20230126.pth) | +| [RTMPose-s](./rtmpose/body_2d_keypoint/rtmpose-s_8xb256-420e_coco-256x192.py) | 256x192 | 72.2 | 5.47 | 0.68 | 4.48 | 1.39 | 13.89 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-s_simcc-aic-coco_pt-aic-coco_420e-256x192-fcb2599b_20230126.pth) | +| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-256x192.py) | 256x192 | 75.8 | 13.59 | 1.93 | 11.06 | 2.29 | 26.44 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-256x192-63eb25f7_20230126.pth) | +| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-256x192.py) | 256x192 | 76.5 | 27.66 | 4.16 | 18.85 | 3.46 | 45.37 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-256x192-f016ffe0_20230126.pth) | +| [RTMPose-m](./rtmpose/body_2d_keypoint/rtmpose-m_8xb256-420e_coco-384x288.py) | 384x288 | 77.0 | 13.72 | 4.33 | 24.78 | 3.66 | - | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-aic-coco_pt-aic-coco_420e-384x288-a62a0b32_20230228.pth) | +| [RTMPose-l](./rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-384x288.py) | 384x288 | 77.3 | 27.79 | 9.35 | - | 6.05 | - | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-aic-coco_pt-aic-coco_420e-384x288-97d6cb0f_20230228.pth) | #### 模型剪枝 @@ -163,37 +163,39 @@ RTMPose 是一个长期优化迭代的项目,致力于业务场景下的高性 - 模型剪枝由 [MMRazor](https://github.com/open-mmlab/mmrazor) 提供 -| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Logs | Download | -| :---------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :--------: | :------------: | -| RTMPose-s-aic-coco-pruned | 256x192 | 69.4 | 3.43 | 0.35 | - | - | - | [log](https://download.openmmlab.com/mmrazor/v1/pruning/group_fisher/rtmpose-s/group_fisher_finetune_rtmpose-s_8xb256-420e_aic-coco-256x192.json) | [model](https://download.openmmlab.com/mmrazor/v1/pruning/group_fisher/rtmpose-s/group_fisher_finetune_rtmpose-s_8xb256-420e_aic-coco-256x192.pth) | +| Config | Input Size | AP
(COCO) | Params(M) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | ncnn-FP16-Latency(ms)
(Snapdragon 865) | Download | +| :--------------: | :--------: | :---------------: | :-------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | :-----------------: | +| RTMPose-s-aic-coco-pruned | 256x192 | 69.4 | 3.43 | 0.35 | - | - | - | [Model](https://download.openmmlab.com/mmrazor/v1/pruning/group_fisher/rtmpose-s/group_fisher_finetune_rtmpose-s_8xb256-420e_aic-coco-256x192.pth) | 更多信息,请参考 [GroupFisher Pruning for RTMPose](./rtmpose/pruning/README.md). ### 人体全身 2d 关键点 (133 Keypoints) -| Config | Input Size | Whole AP | Whole AR | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Logs | Download | -| :----------------------------- | :--------: | :------: | :------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------: | :-------------------------------: | -| [RTMPose-m](./rtmpose/wholebody_2d_keypoint/rtmpose-m_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 60.4 | 66.7 | 2.22 | 13.50 | 4.00 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.pth) | -| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 63.2 | 69.4 | 4.52 | 23.41 | 5.67 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-256x192-6f206314_20230124.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-256x192-6f206314_20230124.pth) | -| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb32-270e_coco-wholebody-384x288.py) | 384x288 | 67.0 | 72.3 | 10.07 | 44.58 | 7.68 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.pth) | +| Config | Input Size | Whole AP | Whole AR | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Download | +| :------------------------------------------- | :--------: | :------: | :------: | :------: | :--------------------------------: | :---------------------------------------: | :---------------------------------------------: | +| [RTMPose-m](./rtmpose/wholebody_2d_keypoint/rtmpose-m_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 60.4 | 66.7 | 2.22 | 13.50 | 4.00 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-coco-wholebody_pt-aic-coco_270e-256x192-cd5e845c_20230123.pth) | +| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb64-270e_coco-wholebody-256x192.py) | 256x192 | 63.2 | 69.4 | 4.52 | 23.41 | 5.67 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-256x192-6f206314_20230124.pth) | +| [RTMPose-l](./rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb32-270e_coco-wholebody-384x288.py) | 384x288 | 67.0 | 72.3 | 10.07 | 44.58 | 7.68 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.pth) | ### 动物 2d 关键点 (17 Keypoints) -| Config | Input Size | AP
(AP10K) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Logs | Download | -| :---------------------------: | :--------: | :----------------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------: | :------------------------------: | -| [RTMPose-m](./rtmpose/animal_2d_keypoint/rtmpose-m_8xb64-210e_ap10k-256x256.py) | 256x256 | 72.2 | 2.57 | 14.157 | 2.404 | [Log](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.json) | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.pth) | +| Config | Input Size | AP
(AP10K) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Download | +| :-----------------------------------------: | :--------: | :----------------: | :------: | :--------------------------------: | :---------------------------------------: | :--------------------------------------------: | +| [RTMPose-m](./rtmpose/animal_2d_keypoint/rtmpose-m_8xb64-210e_ap10k-256x256.py) | 256x256 | 72.2 | 2.57 | 14.157 | 2.404 | [Model](https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-m_simcc-ap10k_pt-aic-coco_210e-256x256-7a041aa1_20230206.pth) | -### 脸部 2d 关键点 +### 脸部 2d 关键点 (106 Keypoints) -| Config | Input Size | NME
(COCO-WholeBody-Face) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Logs | Download | -| :--------------------------------------------------: | :--------: | :-------------------------------: | :------: | :--------------------------------: | :---------------------------------------: | :---------: | :---------: | -| [RTMPose-m](./rtmpose/face_2d_keypoint/wflw/rtmpose-m_8xb64-60e_coco-wholebody-face-256x256.py) | 256x256 | 4.57 | - | - | - | Coming soon | Coming soon | +
+ +
+ +| Config | Input Size | NME
(LaPa) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Download | +| :----------------------------------------------------------------------------: | :--------: | :----------------: | :------: | :--------------------------------: | :---------------------------------------: | :---------: | +| [RTMPose-m (alpha version)](./rtmpose/face_2d_keypoint/rtmpose-m_8xb64-120e_lapa-256x256.py) | 256x256 | 1.70 | - | - | - | Coming soon | ### 手部 2d 关键点 -| Config | Input Size | PCK
(COCO-WholeBody-Hand) | FLOPS(G) | ORT-Latency(ms)
(i7-11700) | TRT-FP16-Latency(ms)
(GTX 1660Ti) | Logs | Download | -| :--------------------------------------------------: | :--------: | :-------------------------------: | :------: | :--------------------------------: | :---------------------------------------: | :---------: | :---------: | -| [RTMPose-m](./rtmpose/hand_2d_keypoint/coco_wholebody_hand/rtmpose-m_8xb32-210e_coco-wholebody-hand-256x256.py) | 256x256 | 81.5 | - | - | - | Coming soon | Coming soon | +Coming soon ### 预训练模型 diff --git a/projects/rtmpose/rtmpose/face_2d_keypoint/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py b/projects/rtmpose/rtmpose/face_2d_keypoint/rtmpose-m_8xb64-120e_lapa-256x256.py similarity index 84% rename from projects/rtmpose/rtmpose/face_2d_keypoint/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py rename to projects/rtmpose/rtmpose/face_2d_keypoint/rtmpose-m_8xb64-120e_lapa-256x256.py index d331dac91a..309414d371 100644 --- a/projects/rtmpose/rtmpose/face_2d_keypoint/rtmpose-m_8xb32-60e_coco-wholebody-face-256x256.py +++ b/projects/rtmpose/rtmpose/face_2d_keypoint/rtmpose-m_8xb64-120e_lapa-256x256.py @@ -1,7 +1,7 @@ _base_ = ['mmpose::_base_/default_runtime.py'] # runtime -max_epochs = 60 +max_epochs = 120 stage2_num_epochs = 10 base_lr = 4e-3 @@ -74,7 +74,7 @@ head=dict( type='RTMCCHead', in_channels=768, - out_channels=68, + out_channels=106, input_size=codec['input_size'], in_featuremap_size=(8, 8), simcc_split_ratio=codec['simcc_split_ratio'], @@ -97,16 +97,16 @@ test_cfg=dict(flip_test=True, )) # base dataset settings -dataset_type = 'CocoWholeBodyFaceDataset' +dataset_type = 'LapaDataset' data_mode = 'topdown' -data_root = 'data/coco/' +data_root = 'data/LaPa/' backend_args = dict(backend='local') # backend_args = dict( # backend='petrel', # path_mapping=dict({ -# f'{data_root}': 's3://openmmlab/datasets/detection/coco/', -# f'{data_root}': 's3://openmmlab/datasets/detection/coco/' +# f'{data_root}': 's3://openmmlab/datasets/pose/LaPa/', +# f'{data_root}': 's3://openmmlab/datasets/pose/LaPa/' # })) # pipelines @@ -114,16 +114,17 @@ dict(type='LoadImage', backend_args=backend_args), dict(type='GetBBoxCenterScale'), dict(type='RandomFlip', direction='horizontal'), - # dict(type='RandomHalfBody'), + dict(type='RandomHalfBody'), dict( - type='RandomBBoxTransform', scale_factor=[0.6, 1.4], rotate_factor=80), + type='RandomBBoxTransform', scale_factor=[0.5, 1.5], rotate_factor=80), dict(type='TopdownAffine', input_size=codec['input_size']), dict(type='mmdet.YOLOXHSVRandomAug'), + dict(type='PhotometricDistortion'), dict( type='Albumentation', transforms=[ - dict(type='Blur', p=0.1), - dict(type='MedianBlur', p=0.1), + dict(type='Blur', p=0.2), + dict(type='MedianBlur', p=0.2), dict( type='CoarseDropout', max_holes=1, @@ -185,8 +186,8 @@ type=dataset_type, data_root=data_root, data_mode=data_mode, - ann_file='annotations/coco_wholebody_train_v1.0.json', - data_prefix=dict(img='train2017/'), + ann_file='annotations/lapa_train.json', + data_prefix=dict(img='train/images/'), pipeline=train_pipeline, )) val_dataloader = dict( @@ -199,12 +200,26 @@ type=dataset_type, data_root=data_root, data_mode=data_mode, - ann_file='annotations/coco_wholebody_val_v1.0.json', - data_prefix=dict(img='val2017/'), + ann_file='annotations/lapa_val.json', + data_prefix=dict(img='val/images/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = dict( + batch_size=32, + num_workers=10, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='annotations/lapa_test.json', + data_prefix=dict(img='test/images/'), test_mode=True, pipeline=val_pipeline, )) -test_dataloader = val_dataloader # hooks default_hooks = dict( diff --git a/tests/data/lapa/10773046825_0.jpg b/tests/data/lapa/10773046825_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebbc0a3bc55bcf3fd06b56044538f65990f839e2 GIT binary patch literal 363612 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
q}HuFsyQN4?{@Afsh3u;GR4B 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%0D#1Ujtx0j0iC%9rQdS2 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 z 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 literal 0 HcmV?d00001 diff --git a/tests/data/lapa/13609937564_5.jpg b/tests/data/lapa/13609937564_5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9c2c08682ff9c5fb5ecc56ea9b1893323de8b10 GIT binary patch literal 59876 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 A#{d8T literal 0 HcmV?d00001 diff --git a/tests/data/lapa/test_lapa.json b/tests/data/lapa/test_lapa.json new file mode 100644 index 0000000000..0484f08c06 --- /dev/null +++ b/tests/data/lapa/test_lapa.json @@ -0,0 +1,39 @@ +{ + "categories": [ + { + "supercategory": "person", + "id": 1, + "name": "face", + "keypoints": [], + "skeleton": [] + } + ], + "images": [ + {"id": 40, "file_name": "10773046825_0.jpg", "height": 1494, "width": 1424}, + {"id": 41, "file_name": "13609937564_5.jpg", "height": 496, "width": 486} + ], + "annotations": [ + { + "keypoints": [ + 406.0, 644.0, 2.0, 402.0, 682.0, 2.0, 397.0, 719.0, 2.0, 391.0, 757.0, 2.0, 388.0, 795.0, 2.0, 389.0, 834.0, 2.0, 394.0, 874.0, 2.0, 402.0, 913.0, 2.0, 413.0, 952.0, 2.0, 426.0, 989.0, 2.0, 443.0, 1025.0, 2.0, 461.0, 1059.0, 2.0, 481.0, 1092.0, 2.0, 502.0, 1126.0, 2.0, 527.0, 1156.0, 2.0, 559.0, 1180.0, 2.0, 603.0, 1193.0, 2.0, 658.0, 1195.0, 2.0, 713.0, 1187.0, 2.0, 766.0, 1172.0, 2.0, 816.0, 1151.0, 2.0, 863.0, 1128.0, 2.0, 907.0, 1101.0, 2.0, 945.0, 1067.0, 2.0, 978.0, 1029.0, 2.0, 1003.0, 986.0, 2.0, 1019.0, 938.0, 2.0, 1030.0, 888.0, 2.0, 1037.0, 838.0, 2.0, 1040.0, 788.0, 2.0, 1040.0, 739.0, 2.0, 1037.0, 689.0, 2.0, 1033.0, 640.0, 2.0, 417.0, 595.0, 2.0, 445.0, 559.0, 2.0, 488.0, 548.0, 2.0, 535.0, 558.0, 2.0, 569.0, 579.0, 2.0, 562.0, 604.0, 2.0, 526.0, 588.0, 2.0, 487.0, 579.0, 2.0, 451.0, 581.0, 2.0, 662.0, 566.0, 2.0, 713.0, 545.0, 2.0, 777.0, 541.0, 2.0, 839.0, 558.0, 2.0, 887.0, 600.0, 2.0, 832.0, 581.0, 2.0, 777.0, 572.0, 2.0, 721.0, 578.0, 2.0, 669.0, 593.0, 2.0, 614.0, 654.0, 2.0, 602.0, 704.0, 2.0, 590.0, 755.0, 2.0, 577.0, 807.0, 2.0, 573.0, 678.0, 2.0, 540.0, 778.0, 2.0, 518.0, 826.0, 2.0, 538.0, 846.0, 2.0, 562.0, 855.0, 2.0, 592.0, 866.0, 2.0, 632.0, 856.0, 2.0, 668.0, 848.0, 2.0, 703.0, 827.0, 2.0, 681.0, 778.0, 2.0, 667.0, 676.0, 2.0, 447.0, 672.0, 2.0, 472.0, 662.0, 2.0, 499.0, 658.0, 2.0, 526.0, 662.0, 2.0, 550.0, 675.0, 2.0, 524.0, 674.0, 2.0, 498.0, 673.0, 2.0, 472.0, 673.0, 2.0, 501.0, 666.0, 2.0, 701.0, 673.0, 2.0, 729.0, 658.0, 2.0, 760.0, 654.0, 2.0, 792.0, 659.0, 2.0, 822.0, 671.0, 2.0, 791.0, 672.0, 2.0, 761.0, 672.0, 2.0, 731.0, 672.0, 2.0, 762.0, 663.0, 2.0, 503.0, 940.0, 2.0, 532.0, 923.0, 2.0, 575.0, 921.0, 2.0, 602.0, 927.0, 2.0, 631.0, 922.0, 2.0, 704.0, 930.0, 2.0, 775.0, 951.0, 2.0, 735.0, 1001.0, 2.0, 680.0, 1032.0, 2.0, 608.0, 1040.0, 2.0, 553.0, 1023.0, 2.0, 522.0, 987.0, 2.0, 519.0, 945.0, 2.0, 549.0, 937.0, 2.0, 604.0, 944.0, 2.0, 687.0, 942.0, 2.0, 751.0, 955.0, 2.0, 700.0, 996.0, 2.0, 609.0, 1007.0, 2.0, 546.0, 987.0, 2.0, 501.0, 666.0, 2.0, 762.0, 663.0, 2.0], + "image_id": 40, + "id": 40, + "num_keypoints": 106, + "bbox": [388.0, 541.0, 652.0, 654.0], + "iscrowd": 0, + "area": 426408, + "category_id": 1 + }, + { + "keypoints": [ + 179.0, 213.0, 2.0, 176.0, 225.0, 2.0, 173.0, 237.0, 2.0, 170.0, 249.0, 2.0, 167.0, 261.0, 2.0, 166.0, 273.0, 2.0, 165.0, 286.0, 2.0, 166.0, 299.0, 2.0, 170.0, 311.0, 2.0, 176.0, 322.0, 2.0, 184.0, 331.0, 2.0, 194.0, 340.0, 2.0, 206.0, 347.0, 2.0, 218.0, 353.0, 2.0, 231.0, 358.0, 2.0, 244.0, 362.0, 2.0, 258.0, 365.0, 2.0, 269.0, 364.0, 2.0, 278.0, 361.0, 2.0, 286.0, 355.0, 2.0, 293.0, 349.0, 2.0, 300.0, 342.0, 2.0, 306.0, 334.0, 2.0, 311.0, 326.0, 2.0, 315.0, 317.0, 2.0, 318.0, 307.0, 2.0, 321.0, 298.0, 2.0, 323.0, 288.0, 2.0, 323.0, 279.0, 2.0, 323.0, 269.0, 2.0, 322.0, 260.0, 2.0, 321.0, 251.0, 2.0, 322.0, 242.0, 2.0, 207.0, 214.0, 2.0, 220.0, 206.0, 2.0, 236.0, 204.0, 2.0, 253.0, 208.0, 2.0, 266.0, 214.0, 2.0, 263.0, 221.0, 2.0, 250.0, 216.0, 2.0, 235.0, 212.0, 2.0, 221.0, 212.0, 2.0, 293.0, 223.0, 2.0, 302.0, 221.0, 2.0, 313.0, 221.0, 2.0, 321.0, 225.0, 2.0, 325.0, 233.0, 2.0, 318.0, 230.0, 2.0, 311.0, 228.0, 2.0, 302.0, 227.0, 2.0, 293.0, 228.0, 2.0, 277.0, 234.0, 2.0, 280.0, 244.0, 2.0, 283.0, 254.0, 2.0, 285.0, 265.0, 2.0, 261.0, 238.0, 2.0, 256.0, 257.0, 2.0, 248.0, 269.0, 2.0, 256.0, 275.0, 2.0, 266.0, 278.0, 2.0, 275.0, 282.0, 2.0, 282.0, 281.0, 2.0, 288.0, 281.0, 2.0, 293.0, 277.0, 2.0, 291.0, 263.0, 2.0, 285.0, 243.0, 2.0, 220.0, 228.0, 2.0, 228.0, 224.0, 2.0, 237.0, 224.0, 2.0, 245.0, 228.0, 2.0, 251.0, 235.0, 2.0, 243.0, 234.0, 2.0, 234.0, 234.0, 2.0, 226.0, 231.0, 2.0, 232.0, 228.0, 2.0, 287.0, 242.0, 2.0, 293.0, 238.0, 2.0, 301.0, 237.0, 2.0, 307.0, 241.0, 2.0, 311.0, 246.0, 2.0, 306.0, 247.0, 2.0, 299.0, 246.0, 2.0, 293.0, 245.0, 2.0, 297.0, 241.0, 2.0, 222.0, 299.0, 2.0, 242.0, 293.0, 2.0, 263.0, 292.0, 2.0, 271.0, 295.0, 2.0, 279.0, 295.0, 2.0, 288.0, 302.0, 2.0, 292.0, 310.0, 2.0, 286.0, 318.0, 2.0, 277.0, 324.0, 2.0, 263.0, 325.0, 2.0, 246.0, 320.0, 2.0, 233.0, 310.0, 2.0, 229.0, 300.0, 2.0, 246.0, 298.0, 2.0, 269.0, 302.0, 2.0, 282.0, 305.0, 2.0, 289.0, 310.0, 2.0, 280.0, 313.0, 2.0, 265.0, 313.0, 2.0, 243.0, 307.0, 2.0, 232.0, 228.0, 2.0, 297.0, 241.0, 2.0], + "image_id": 41, + "id": 41, + "num_keypoints": 106, + "bbox": [165.0, 204.0, 160.0, 161.0], + "iscrowd": 0, + "area": 25760, + "category_id": 1 + } + ] +} diff --git a/tests/test_datasets/test_datasets/test_face_datasets/test_lapa_dataset.py b/tests/test_datasets/test_datasets/test_face_datasets/test_lapa_dataset.py new file mode 100644 index 0000000000..991f285476 --- /dev/null +++ b/tests/test_datasets/test_datasets/test_face_datasets/test_lapa_dataset.py @@ -0,0 +1,93 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from unittest import TestCase + +import numpy as np + +from mmpose.datasets.datasets.face import LapaDataset + + +class TestLaPaDataset(TestCase): + + def build_lapa_dataset(self, **kwargs): + + cfg = dict( + ann_file='test_lapa.json', + bbox_file=None, + data_mode='topdown', + data_root='tests/data/lapa', + pipeline=[], + test_mode=False) + + cfg.update(kwargs) + return LapaDataset(**cfg) + + def check_data_info_keys(self, + data_info: dict, + data_mode: str = 'topdown'): + if data_mode == 'topdown': + expected_keys = dict( + img_id=int, + img_path=str, + bbox=np.ndarray, + bbox_score=np.ndarray, + keypoints=np.ndarray, + keypoints_visible=np.ndarray, + id=int) + else: + raise ValueError(f'Invalid data_mode {data_mode}') + + for key, type_ in expected_keys.items(): + self.assertIn(key, data_info) + self.assertIsInstance(data_info[key], type_, key) + + def check_metainfo_keys(self, metainfo: dict): + expected_keys = dict( + dataset_name=str, + num_keypoints=int, + keypoint_id2name=dict, + keypoint_name2id=dict, + upper_body_ids=list, + lower_body_ids=list, + flip_indices=list, + flip_pairs=list, + keypoint_colors=np.ndarray, + num_skeleton_links=int, + skeleton_links=list, + skeleton_link_colors=np.ndarray, + dataset_keypoint_weights=np.ndarray) + + for key, type_ in expected_keys.items(): + self.assertIn(key, metainfo) + self.assertIsInstance(metainfo[key], type_, key) + + def test_metainfo(self): + dataset = self.build_lapa_dataset() + self.check_metainfo_keys(dataset.metainfo) + # test dataset_name + self.assertEqual(dataset.metainfo['dataset_name'], 'lapa') + + # test number of keypoints + num_keypoints = 106 + self.assertEqual(dataset.metainfo['num_keypoints'], num_keypoints) + self.assertEqual( + len(dataset.metainfo['keypoint_colors']), num_keypoints) + self.assertEqual( + len(dataset.metainfo['dataset_keypoint_weights']), num_keypoints) + # note that len(sigmas) may be zero if dataset.metainfo['sigmas'] = [] + self.assertEqual(len(dataset.metainfo['sigmas']), 0) + + def test_topdown(self): + # test topdown training + dataset = self.build_lapa_dataset(data_mode='topdown') + self.assertEqual(dataset.data_mode, 'topdown') + self.assertEqual(dataset.bbox_file, None) + # filter invalid insances due to face_valid = false + self.assertEqual(len(dataset), 2) + self.check_data_info_keys(dataset[0]) + + # test topdown testing + dataset = self.build_lapa_dataset(data_mode='topdown', test_mode=True) + self.assertEqual(dataset.data_mode, 'topdown') + self.assertEqual(dataset.bbox_file, None) + self.assertEqual(len(dataset), 2) + self.check_data_info_keys(dataset[0]) diff --git a/tests/test_datasets/test_transforms/test_converting.py b/tests/test_datasets/test_transforms/test_converting.py index f345a44063..09f06e1e65 100644 --- a/tests/test_datasets/test_transforms/test_converting.py +++ b/tests/test_datasets/test_transforms/test_converting.py @@ -13,6 +13,7 @@ def setUp(self): img_shape=(240, 320), num_instances=4, with_bbox_cs=True) def test_transform(self): + # 1-to-1 mapping mapping = [(3, 0), (6, 1), (16, 2), (5, 3)] transform = KeypointConverter(num_keypoints=5, mapping=mapping) results = transform(self.data_info.copy()) @@ -34,3 +35,39 @@ def test_transform(self): self.assertTrue( (results['keypoints_visible'][:, target_index] == self.data_info['keypoints_visible'][:, source_index]).all()) + + # 2-to-1 mapping + mapping = [((3, 5), 0), (6, 1), (16, 2), (5, 3)] + transform = KeypointConverter(num_keypoints=5, mapping=mapping) + results = transform(self.data_info.copy()) + + # check shape + self.assertEqual(results['keypoints'].shape[0], + self.data_info['keypoints'].shape[0]) + self.assertEqual(results['keypoints'].shape[1], 5) + self.assertEqual(results['keypoints'].shape[2], 2) + self.assertEqual(results['keypoints_visible'].shape[0], + self.data_info['keypoints_visible'].shape[0]) + self.assertEqual(results['keypoints_visible'].shape[1], 5) + + # check value + for source_index, target_index in mapping: + if isinstance(source_index, tuple): + source_index, source_index2 = source_index + self.assertTrue( + (results['keypoints'][:, target_index] == 0.5 * + (self.data_info['keypoints'][:, source_index] + + self.data_info['keypoints'][:, source_index2])).all()) + self.assertTrue( + (results['keypoints_visible'][:, target_index] == + self.data_info['keypoints_visible'][:, source_index] * + self.data_info['keypoints_visible'][:, + source_index2]).all()) + else: + self.assertTrue( + (results['keypoints'][:, target_index] == + self.data_info['keypoints'][:, source_index]).all()) + self.assertTrue( + (results['keypoints_visible'][:, target_index] == + self.data_info['keypoints_visible'][:, + source_index]).all()) diff --git a/tools/dataset_converters/lapa2coco.py b/tools/dataset_converters/lapa2coco.py new file mode 100644 index 0000000000..7727bdf022 --- /dev/null +++ b/tools/dataset_converters/lapa2coco.py @@ -0,0 +1,104 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import json +import os +import os.path as osp +import time + +import cv2 +import mmengine +import numpy as np + + +def default_dump(obj): + """Convert numpy classes to JSON serializable objects.""" + if isinstance(obj, (np.integer, np.floating, np.bool_)): + return obj.item() + elif isinstance(obj, np.ndarray): + return obj.tolist() + else: + return obj + + +def convert_labpa_to_coco(ann_dir, out_file): + landmark_dir = osp.join(ann_dir, 'landmarks') + ann_list = os.listdir(landmark_dir) + + img_dir = osp.join(ann_dir, 'images') + + annotations = [] + images = [] + cnt = 0 + for idx, ann_file in enumerate(mmengine.track_iter_progress(ann_list)): + cnt += 1 + ann_path = osp.join(landmark_dir, ann_file) + file_name = ann_file[:-4] + '.jpg' + img_path = osp.join(img_dir, file_name) + data_info = open(ann_path).readlines() + + img = cv2.imread(img_path) + + keypoints = [] + for line in data_info[1:]: + x, y = line.strip().split(' ') + x, y = float(x), float(y) + keypoints.append([x, y, 2]) + keypoints = np.array(keypoints) + + x1, y1, _ = np.amin(keypoints, axis=0) + x2, y2, _ = np.amax(keypoints, axis=0) + w, h = x2 - x1, y2 - y1 + bbox = [x1, y1, w, h] + + image = {} + image['id'] = cnt + image['file_name'] = file_name + image['height'] = img.shape[0] + image['width'] = img.shape[1] + images.append(image) + + ann = {} + ann['keypoints'] = keypoints.reshape(-1).tolist() + ann['image_id'] = cnt + ann['id'] = cnt + ann['num_keypoints'] = len(keypoints) + ann['bbox'] = bbox + ann['iscrowd'] = 0 + ann['area'] = int(ann['bbox'][2] * ann['bbox'][3]) + ann['category_id'] = 1 + + annotations.append(ann) + + cocotype = {} + + cocotype['info'] = {} + cocotype['info']['description'] = 'LaPa Generated by MMPose Team' + cocotype['info']['version'] = 1.0 + cocotype['info']['year'] = time.strftime('%Y', time.localtime()) + cocotype['info']['date_created'] = time.strftime('%Y/%m/%d', + time.localtime()) + + cocotype['images'] = images + cocotype['annotations'] = annotations + cocotype['categories'] = [{ + 'supercategory': 'person', + 'id': 1, + 'name': 'face', + 'keypoints': [], + 'skeleton': [] + }] + + json.dump( + cocotype, + open(out_file, 'w'), + ensure_ascii=False, + default=default_dump) + print(f'done {out_file}') + + +if __name__ == '__main__': + if not osp.exists('data/LaPa/annotations'): + os.makedirs('data/LaPa/annotations') + for tv in ['val', 'test', 'train']: + print(f'processing {tv}') + convert_labpa_to_coco(f'data/LaPa/{tv}', + f'data/LaPa/annotations/lapa_{tv}.json') From 8c2d3fad79cd7e3438f17fe25e557e4e718945fb Mon Sep 17 00:00:00 2001 From: FishBigOcean <36850642+FishBigOcean@users.noreply.github.com> Date: Sun, 23 Apr 2023 14:09:08 +0800 Subject: [PATCH 3/6] fix and op bug (#2286) --- mmpose/evaluation/functional/nms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmpose/evaluation/functional/nms.py b/mmpose/evaluation/functional/nms.py index 50bbe1550b..eed4e5cf73 100644 --- a/mmpose/evaluation/functional/nms.py +++ b/mmpose/evaluation/functional/nms.py @@ -102,7 +102,7 @@ def oks_iou(g: np.ndarray, dy = yd - yg e = (dx**2 + dy**2) / vars / ((a_g + a_d[n_d]) / 2 + np.spacing(1)) / 2 if vis_thr is not None: - ind = list(vg > vis_thr) and list(vd > vis_thr) + ind = list((vg > vis_thr) & (vd > vis_thr)) e = e[ind] ious[n_d] = np.sum(np.exp(-e)) / len(e) if len(e) != 0 else 0.0 return ious From 9551fe54bda1ced2c7a66678f07e59fb0e2145ea Mon Sep 17 00:00:00 2001 From: Tau Date: Sun, 23 Apr 2023 15:15:02 +0800 Subject: [PATCH 4/6] [Fix] Fix CI and Update lowest torch version (#2288) --- .circleci/test.yml | 4 +- .github/ISSUE_TEMPLATE/1-bug-report.yml | 93 ++++++++++++++++++ .github/ISSUE_TEMPLATE/2-feature_request.yml | 37 +++++++ ...l_questions.md => 3-general_questions.yml} | 2 - .github/ISSUE_TEMPLATE/bug-report.md | 96 ------------------- .github/ISSUE_TEMPLATE/feature_request.md | 42 -------- .github/workflows/merge_stage_test.yml | 16 ++-- .github/workflows/pr_stage_test.yml | 8 +- README.md | 2 +- README_CN.md | 2 +- demo/MMPose_Tutorial.ipynb | 4 +- docker/Dockerfile | 2 +- docs/en/faq.md | 3 +- docs/en/installation.md | 2 +- docs/zh_cn/faq.md | 3 +- docs/zh_cn/installation.md | 2 +- requirements/mminstall.txt | 4 +- tools/misc/publish_model.py | 2 +- 18 files changed, 157 insertions(+), 167 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/1-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/2-feature_request.yml rename .github/ISSUE_TEMPLATE/{general_questions.md => 3-general_questions.yml} (92%) delete mode 100644 .github/ISSUE_TEMPLATE/bug-report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.circleci/test.yml b/.circleci/test.yml index 534ba7fa4e..7e2f892cbf 100644 --- a/.circleci/test.yml +++ b/.circleci/test.yml @@ -62,7 +62,7 @@ jobs: pip install -U numpy pip install git+https://github.com/open-mmlab/mmengine.git@main pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x pip install -r requirements/tests.txt pip install -r requirements/albu.txt @@ -111,7 +111,7 @@ jobs: docker exec mmpose pip install -U numpy docker exec mmpose pip install -e /mmengine docker exec mmpose pip install -U openmim - docker exec mmpose mim install 'mmcv >= 2.0.0rc1' + docker exec mmpose mim install 'mmcv >= 2.0.0' docker exec mmpose pip install -e /mmdetection docker exec mmpose pip install -r requirements/tests.txt docker exec mmpose pip install -r requirements/albu.txt diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yml b/.github/ISSUE_TEMPLATE/1-bug-report.yml new file mode 100644 index 0000000000..23427231b8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-bug-report.yml @@ -0,0 +1,93 @@ +name: "🐞 Bug report" +description: "Create a report to help us reproduce and fix the bug" +labels: bug +title: "[Bug] " + +body: + - type: markdown + attributes: + value: | + ## Note + For general usage questions or idea discussions, please post it to our [**Forum**](https://github.com/open-mmlab/mmpose/discussions) + Please fill in as **much** of the following form as you're able to. **The clearer the description, the shorter it will take to solve it.** + + - type: checkboxes + attributes: + label: Prerequisite + description: Please check the following items before creating a new issue. + options: + + - label: I have searched [Issues](https://github.com/open-mmlab/mmpose/issues) and [Discussions](https://github.com/open-mmlab/mmpose/discussions) but cannot get the expected help. + required: true + - label: The bug has not been fixed in the latest version(https://github.com/open-mmlab/mmpose). + required: true + + - type: textarea + attributes: + label: Environment + description: | + Please run following commands and and copy-paste it here: + - `python -c "from mmpose.utils import collect_env; print(collect_env())"` to collect necessary environment information. + - `pip list | grep mm` to collect repositories related to OpenMMLab. + - \[Optional\] Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.) + validations: + required: true + + - type: textarea + attributes: + label: Reproduces the problem - code sample + description: | + Please provide a code sample that reproduces the problem you ran into. It can be a Colab link or just a code snippet. + placeholder: | + ```python + # Sample code to reproduce the problem + ``` + validations: + required: true + + - type: textarea + attributes: + label: Reproduces the problem - command or script + description: | + What command or script did you run? + placeholder: | + ```shell + The command or script you run. + ``` + validations: + required: true + + - type: textarea + attributes: + label: Reproduces the problem - error message + description: | + Please provide the error message or logs you got, with the full traceback. + + Tip: You can attach screenshots or log files by dragging them into the text area.. + placeholder: | + ``` + The error message or logs you got, with the full traceback. + ``` + validations: + required: true + + - type: textarea + attributes: + label: Additional information + description: | + Tell us anything else you think we should know. + + Tip: You can attach screenshots or log files by dragging them into the text area. + placeholder: | + 1. What's your expected result? + 2. What dataset did you use? + 3. What do you think might be the reason? + + - type: markdown + attributes: + value: | + ## Acknowledgement + Thanks for taking the time to fill out this report. + + If you have already identified the reason, we strongly appreciate you creating a new PR to fix it [**Here**](https://github.com/open-mmlab/mmpose/pulls)! + Please refer to [**Contribution Guide**](https://mmpose.readthedocs.io/en/latest/contribution_guide.html) for contributing. diff --git a/.github/ISSUE_TEMPLATE/2-feature_request.yml b/.github/ISSUE_TEMPLATE/2-feature_request.yml new file mode 100644 index 0000000000..47247a0e17 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-feature_request.yml @@ -0,0 +1,37 @@ +name: 🚀 Feature request +description: Suggest an idea for this project +labels: feature-request +title: "[Feature] " + +body: + - type: markdown + attributes: + value: | + ## Note + For general usage questions or idea discussions, please post it to our [**Forum**](https://github.com/open-mmlab/mmpose/discussions) + + Please fill in as **much** of the following form as you're able to. **The clearer the description, the shorter it will take to solve it.** + + - type: textarea + attributes: + label: What is the feature? + description: Tell us more about the feature and how this feature can help. + placeholder: | + E.g., It is inconvenient when \[....\]. + validations: + required: true + + - type: textarea + attributes: + label: Any other context? + description: | + Have you considered any alternative solutions or features? If so, what are they? Also, feel free to add any other context or screenshots about the feature request here. + + - type: markdown + attributes: + value: | + ## Acknowledgement + Thanks for taking the time to fill out this report. + + We strongly appreciate you creating a new PR to implement it [**Here**](https://github.com/open-mmlab/mmpose/pulls)! + Please refer to [**Contribution Guide**](https://mmpose.readthedocs.io/en/latest/contribution_guide.html) for contributing. diff --git a/.github/ISSUE_TEMPLATE/general_questions.md b/.github/ISSUE_TEMPLATE/3-general_questions.yml similarity index 92% rename from .github/ISSUE_TEMPLATE/general_questions.md rename to .github/ISSUE_TEMPLATE/3-general_questions.yml index f02dd63a80..0b1194dc2e 100644 --- a/.github/ISSUE_TEMPLATE/general_questions.md +++ b/.github/ISSUE_TEMPLATE/3-general_questions.yml @@ -1,7 +1,5 @@ ---- name: General questions about: Ask general questions to get help title: '' labels: '' assignees: '' ---- diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md deleted file mode 100644 index 2f9c005993..0000000000 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ /dev/null @@ -1,96 +0,0 @@ -name: "🐞 Bug report" -description: "Create a report to help us reproduce and fix the bug" -labels: bug -title: "\[Bug\] " - -body: - -- type: markdown - attributes: - value: | - \## Note - For general usage questions or idea discussions, please post it to our [**Forum**](https://github.com/open-mmlab/mmpose/discussions) - Please fill in as **much** of the following form as you're able to. **The clearer the description, the shorter it will take to solve it.** - -- type: checkboxes - attributes: - label: Prerequisite - description: Please check the following items before creating a new issue. - options: - - - label: I have searched [Issues](https://github.com/open-mmlab/mmpose/issues) and [Discussions](https://github.com/open-mmlab/mmpose/discussions) but cannot get the expected help. - required: true - - label: The bug has not been fixed in the latest version(https://github.com/open-mmlab/mmpose). - required: true - -- type: textarea - attributes: - label: Environment - description: | - Please run following commands and and copy-paste it here: - \- `python -c "from mmpose.utils import collect_env; print(collect_env())"` to collect necessary environment information. - \- `pip list | grep mm` to collect repositories related to OpenMMLab. - \- \[Optional\] Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.) - validations: - required: true - -- type: textarea - attributes: - label: Reproduces the problem - code sample - description: | - Please provide a code sample that reproduces the problem you ran into. It can be a Colab link or just a code snippet. - placeholder: | - `python # Sample code to reproduce the problem ` - validations: - required: true - -- type: textarea - attributes: - label: Reproduces the problem - command or script - description: | - What command or script did you run? - placeholder: | - `shell The command or script you run. ` - validations: - required: true - -- type: textarea - attributes: - label: Reproduces the problem - error message - description: | - Please provide the error message or logs you got, with the full traceback. - - ``` - Tip: You can attach screenshots or log files by dragging them into the text area.. - ``` - - placeholder: | - ` The error message or logs you got, with the full traceback. ` - validations: - required: true - -- type: textarea - attributes: - label: Additional information - description: | - Tell us anything else you think we should know. - - ``` - Tip: You can attach screenshots or log files by dragging them into the text area. - ``` - - placeholder: | - 1\. What's your expected result? - 2\. What dataset did you use? - 3\. What do you think might be the reason? - -- type: markdown - attributes: - value: | - \## Acknowledgement - Thanks for taking the time to fill out this report. - - ``` - If you have already identified the reason, we strongly appreciate you creating a new PR to fix it [**Here**](https://github.com/open-mmlab/mmpose/pulls)! - Please refer to [**Contribution Guide**](https://mmpose.readthedocs.io/en/latest/contribution_guide.html) for contributing. - ``` diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index ca94a6f1de..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,42 +0,0 @@ -name: 🚀 Feature request -description: Suggest an idea for this project -labels: \[feature-request\] -title: "\[Feature\] " - -body: - -- type: markdown - attributes: - value: | - \## Note - For general usage questions or idea discussions, please post it to our [**Forum**](https://github.com/open-mmlab/mmpose/discussions) - - ``` - Please fill in as **much** of the following form as you're able to. **The clearer the description, the shorter it will take to solve it.** - ``` - -- type: textarea - attributes: - label: What is the feature? - description: Tell us more about the feature and how this feature can help. - placeholder: | - E.g., It is inconvenient when \[....\]. - validations: - required: true - -- type: textarea - attributes: - label: Any other context? - description: | - Have you considered any alternative solutions or features? If so, what are they? Also, feel free to add any other context or screenshots about the feature request here. - -- type: markdown - attributes: - value: | - \## Acknowledgement - Thanks for taking the time to fill out this report. - - ``` - We strongly appreciate you creating a new PR to implement it [**Here**](https://github.com/open-mmlab/mmpose/pulls)! - Please refer to [**Contribution Guide**](https://mmpose.readthedocs.io/en/latest/contribution_guide.html) for contributing. - ``` diff --git a/.github/workflows/merge_stage_test.yml b/.github/workflows/merge_stage_test.yml index d2a64590ae..bb60ad40fa 100644 --- a/.github/workflows/merge_stage_test.yml +++ b/.github/workflows/merge_stage_test.yml @@ -43,7 +43,7 @@ jobs: - name: Install MMCV run: | pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' - name: Install MMDet run: | python -m pip install --upgrade pip setuptools wheel @@ -67,12 +67,10 @@ jobs: strategy: matrix: python-version: [3.7] - torch: [1.6.0, 1.7.1, 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.12.1, 1.13.0] + torch: [1.8.0, 1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.12.1, 1.13.0] include: - - torch: 1.6.0 - torchvision: 0.7.0 - - torch: 1.7.1 - torchvision: 0.8.2 + - torch: 1.8.0 + torchvision: 0.9.0 - torch: 1.8.1 torchvision: 0.9.1 - torch: 1.9.1 @@ -105,7 +103,7 @@ jobs: - name: Install MMCV run: | pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' - name: Install MMDet run: | python -m pip install --upgrade pip setuptools wheel @@ -167,7 +165,7 @@ jobs: pip install -U numpy pip install git+https://github.com/open-mmlab/mmengine.git@main pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x pip install -r requirements/tests.txt pip install -r requirements/runtime.txt @@ -212,7 +210,7 @@ jobs: python -m pip install -U numpy python -m pip install git+https://github.com/open-mmlab/mmengine.git@main python -m pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' python -m pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x python -m pip install -r requirements/tests.txt python -m pip install -r requirements/runtime.txt diff --git a/.github/workflows/pr_stage_test.yml b/.github/workflows/pr_stage_test.yml index c5f99b0ebd..5ed6fc8ae7 100644 --- a/.github/workflows/pr_stage_test.yml +++ b/.github/workflows/pr_stage_test.yml @@ -41,7 +41,7 @@ jobs: pip install -U numpy pip install git+https://github.com/open-mmlab/mmengine.git@main pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x pip install -r requirements/tests.txt pip install -r requirements/runtime.txt @@ -95,7 +95,7 @@ jobs: pip install -U numpy pip install git+https://github.com/open-mmlab/mmengine.git@main pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x pip install -r requirements/tests.txt pip install -r requirements/runtime.txt @@ -135,7 +135,7 @@ jobs: pip install -U numpy pip install git+https://github.com/open-mmlab/mmengine.git@main pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x pip install -r requirements/tests.txt pip install -r requirements/runtime.txt @@ -180,7 +180,7 @@ jobs: python -m pip install -U numpy python -m pip install git+https://github.com/open-mmlab/mmengine.git@main python -m pip install -U openmim - mim install 'mmcv >= 2.0.0rc1' + mim install 'mmcv >= 2.0.0' python -m pip install git+https://github.com/open-mmlab/mmdetection.git@dev-3.x python -m pip install -r requirements/tests.txt python -m pip install -r requirements/albu.txt diff --git a/README.md b/README.md index 34f9caacda..951c4adf2e 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ English | [简体中文](README_CN.md) MMPose is an open-source toolbox for pose estimation based on PyTorch. It is a part of the [OpenMMLab project](https://github.com/open-mmlab). -The master branch works with **PyTorch 1.6+**. +The master branch works with **PyTorch 1.8+**. https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb-84f6-24eeddbf4d91.mp4 diff --git a/README_CN.md b/README_CN.md index 1b8121767d..49a956cab9 100644 --- a/README_CN.md +++ b/README_CN.md @@ -62,7 +62,7 @@ MMPose 是一款基于 PyTorch 的姿态分析的开源工具箱,是 [OpenMMLab](https://github.com/open-mmlab) 项目的成员之一。 -主分支代码目前支持 **PyTorch 1.6 以上**的版本。 +主分支代码目前支持 **PyTorch 1.8 以上**的版本。 https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb-84f6-24eeddbf4d91.mp4 diff --git a/demo/MMPose_Tutorial.ipynb b/demo/MMPose_Tutorial.ipynb index 1866a38aa8..1fa381c3f8 100644 --- a/demo/MMPose_Tutorial.ipynb +++ b/demo/MMPose_Tutorial.ipynb @@ -299,8 +299,8 @@ "# install MMEngine, MMCV and MMDetection using MIM\n", "%pip install -U openmim\n", "!mim install mmengine\n", - "!mim install \"mmcv>=2.0.0rc1\"\n", - "!mim install \"mmdet>=3.0.0rc0\"" + "!mim install \"mmcv>=2.0.0\"\n", + "!mim install \"mmdet>=3.0.0\"" ] }, { diff --git a/docker/Dockerfile b/docker/Dockerfile index 347af89ca8..064b803979 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -22,7 +22,7 @@ RUN pip install xtcocotools # Install MMEngine and MMCV RUN pip install openmim -RUN mim install mmengine "mmcv>=2.0.0rc1" +RUN mim install mmengine "mmcv>=2.0.0" # Install MMPose RUN conda clean --all diff --git a/docs/en/faq.md b/docs/en/faq.md index 40676cbb67..b3efa69255 100644 --- a/docs/en/faq.md +++ b/docs/en/faq.md @@ -14,6 +14,7 @@ Compatible MMPose and MMCV versions are shown as below. Please choose the correc | MMPose version | MMCV/MMEngine version | | :------------: | :-----------------------------: | +| 1.0.0 | mmcv>=2.0.0, mmengine>=0.7.0 | | 1.0.0rc1 | mmcv>=2.0.0rc4, mmengine>=0.6.0 | | 1.0.0rc0 | mmcv>=2.0.0rc0, mmengine>=0.0.1 | | 1.0.0b0 | mmcv>=2.0.0rc0, mmengine>=0.0.1 | @@ -22,7 +23,7 @@ Compatible MMPose and MMCV versions are shown as below. Please choose the correc | MMPose version | MMCV version | | :------------: | :-----------------------: | -| master | mmcv-full>=1.3.8, \<1.8.0 | +| 0.x | mmcv-full>=1.3.8, \<1.8.0 | | 0.29.0 | mmcv-full>=1.3.8, \<1.7.0 | | 0.28.1 | mmcv-full>=1.3.8, \<1.7.0 | | 0.28.0 | mmcv-full>=1.3.8, \<1.6.0 | diff --git a/docs/en/installation.md b/docs/en/installation.md index dc4a0ab386..7285982059 100644 --- a/docs/en/installation.md +++ b/docs/en/installation.md @@ -220,7 +220,7 @@ Note that within Jupyter, the exclamation mark `!` is used to call external exec We provide a [Dockerfile](https://github.com/open-mmlab/mmpose/blob/master/docker/Dockerfile) to build an image. Ensure that your [docker version](https://docs.docker.com/engine/install/) >=19.03. ```shell -# build an image with PyTorch 1.6.0, CUDA 10.1, CUDNN 7. +# build an image with PyTorch 1.8.0, CUDA 10.1, CUDNN 7. # If you prefer other versions, just modified the Dockerfile docker build -t mmpose docker/ ``` diff --git a/docs/zh_cn/faq.md b/docs/zh_cn/faq.md index 15e3fbb98d..ea929b9f91 100644 --- a/docs/zh_cn/faq.md +++ b/docs/zh_cn/faq.md @@ -14,6 +14,7 @@ Compatible MMPose and MMCV versions are shown as below. Please choose the correc | MMPose version | MMCV/MMEngine version | | :------------: | :-----------------------------: | +| 1.0.0 | mmcv>=2.0.0, mmengine>=0.7.0 | | 1.0.0rc1 | mmcv>=2.0.0rc4, mmengine>=0.6.0 | | 1.0.0rc0 | mmcv>=2.0.0rc0, mmengine>=0.0.1 | | 1.0.0b0 | mmcv>=2.0.0rc0, mmengine>=0.0.1 | @@ -22,7 +23,7 @@ Compatible MMPose and MMCV versions are shown as below. Please choose the correc | MMPose version | MMCV version | | :------------: | :-----------------------: | -| master | mmcv-full>=1.3.8, \<1.8.0 | +| 0.x | mmcv-full>=1.3.8, \<1.8.0 | | 0.29.0 | mmcv-full>=1.3.8, \<1.7.0 | | 0.28.1 | mmcv-full>=1.3.8, \<1.7.0 | | 0.28.0 | mmcv-full>=1.3.8, \<1.6.0 | diff --git a/docs/zh_cn/installation.md b/docs/zh_cn/installation.md index 1ec42fe78a..3e9a709e9e 100644 --- a/docs/zh_cn/installation.md +++ b/docs/zh_cn/installation.md @@ -227,7 +227,7 @@ MMPose 提供 [Dockerfile](https://github.com/open-mmlab/mmpose/blob/master/dock 用于构建镜像。请确保您的 [Docker 版本](https://docs.docker.com/engine/install/) >=19.03。 ```shell -# 构建默认的 PyTorch 1.6.0,CUDA 10.1 版本镜像 +# 构建默认的 PyTorch 1.8.0,CUDA 10.1 版本镜像 # 如果您希望使用其他版本,请修改 Dockerfile docker build -t mmpose docker/ ``` diff --git a/requirements/mminstall.txt b/requirements/mminstall.txt index fb0519c072..24be7462fc 100644 --- a/requirements/mminstall.txt +++ b/requirements/mminstall.txt @@ -1,3 +1,3 @@ -mmcv>=2.0.0rc1,<2.1.0 -mmdet>=3.0.0rc6,<3.1.0 +mmcv>=2.0.0,<2.1.0 +mmdet>=3.0.0,<3.1.0 mmengine>=0.4.0,<1.0.0 diff --git a/tools/misc/publish_model.py b/tools/misc/publish_model.py index 4a8338fdbd..addf4cca64 100644 --- a/tools/misc/publish_model.py +++ b/tools/misc/publish_model.py @@ -41,7 +41,7 @@ def process_checkpoint(in_file, out_file, save_keys=['meta', 'state_dict']): # if it is necessary to remove some sensitive data in checkpoint['meta'], # add the code here. - if digit_version(TORCH_VERSION) >= digit_version('1.6.0'): + if digit_version(TORCH_VERSION) >= digit_version('1.8.0'): torch.save(checkpoint, out_file, _use_new_zipfile_serialization=False) else: torch.save(checkpoint, out_file) From c3fb09cf8c010f8032e62046035c2bded1c6ce3f Mon Sep 17 00:00:00 2001 From: Hanxiao Xiang <107178092+ATang0729@users.noreply.github.com> Date: Sun, 23 Apr 2023 15:35:22 +0800 Subject: [PATCH 5/6] [Feature] Add support for deepfashion2 dataset (#2201) --- configs/_base_/datasets/deepfashion2.py | 2660 +++++++++++++++++ .../deepfashion2/res50_deepfashion2.md | 67 + .../deepfashion2/res50_deepfasion2.yml | 185 ++ ..._deepfasion2-long-sleeved-dress-256x192.py | 122 + ...50_1xb64-210e_deepfasion2-skirt-256x192.py | 122 + ...b64-210e_deepfasion2-vest-dress-256x192.py | 122 + ...2xb64-210e_deepfasion2-trousers-256x192.py | 122 + ...0_3xb64-210e_deepfasion2-shorts-256x192.py | 122 + ...deepfasion2-short-sleeved-dress-256x192.py | 122 + ...50_4xb64-210e_deepfasion2-sling-256x192.py | 122 + ...64-210e_deepfasion2-sling-dress-256x192.py | 122 + ...s50_4xb64-210e_deepfasion2-vest-256x192.py | 122 + ...deepfasion2-short-sleeved-shirt-256x192.py | 122 + ...eepfasion2-long-sleeved-outwear-256x192.py | 123 + ..._deepfasion2-long-sleeved-shirt-256x192.py | 122 + ...epfasion2-short-sleeved-outwear-256x192.py | 123 + docs/en/dataset_zoo/2d_fashion_landmark.md | 62 + docs/zh_cn/dataset_zoo/2d_fashion_landmark.md | 81 +- docs/zh_cn/user_guides/inference.md | 211 +- .../inferencers/base_mmpose_inferencer.py | 12 +- mmpose/apis/inferencers/mmpose_inferencer.py | 2 +- mmpose/apis/inferencers/pose2d_inferencer.py | 27 +- mmpose/datasets/datasets/fashion/__init__.py | 3 +- .../datasets/fashion/deepfashion2_dataset.py | 10 + model-index.yml | 1 + projects/yolox-pose/configs/_base_/datasets | 2 +- projects/yolox-pose/demo | 2 +- projects/yolox-pose/tools | 2 +- tests/data/deepfasion2/000264.jpg | Bin 0 -> 69862 bytes tests/data/deepfasion2/000265.jpg | Bin 0 -> 51574 bytes tests/data/deepfasion2/deepfasion2.json | 2404 +++++++++++++++ 31 files changed, 7218 insertions(+), 101 deletions(-) create mode 100644 configs/_base_/datasets/deepfashion2.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfashion2.md create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfasion2.yml create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-vest-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192.py create mode 100644 configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192.py create mode 100644 mmpose/datasets/datasets/fashion/deepfashion2_dataset.py create mode 100644 tests/data/deepfasion2/000264.jpg create mode 100644 tests/data/deepfasion2/000265.jpg create mode 100644 tests/data/deepfasion2/deepfasion2.json diff --git a/configs/_base_/datasets/deepfashion2.py b/configs/_base_/datasets/deepfashion2.py new file mode 100644 index 0000000000..f65d1bb591 --- /dev/null +++ b/configs/_base_/datasets/deepfashion2.py @@ -0,0 +1,2660 @@ +colors = dict( + sss=[255, 128, 0], # short_sleeve_shirt + lss=[255, 0, 128], # long_sleeved_shirt + sso=[128, 0, 255], # short_sleeved_outwear + lso=[0, 128, 255], # long_sleeved_outwear + vest=[0, 128, 128], # vest + sling=[0, 0, 128], # sling + shorts=[128, 128, 128], # shorts + trousers=[128, 0, 128], # trousers + skirt=[64, 128, 128], # skirt + ssd=[64, 64, 128], # short_sleeved_dress + lsd=[128, 64, 0], # long_sleeved_dress + vd=[128, 64, 255], # vest_dress + sd=[128, 64, 0], # sling_dress +) +dataset_info = dict( + dataset_name='deepfashion2', + paper_info=dict( + author='Yuying Ge and Ruimao Zhang and Lingyun Wu ' + 'and Xiaogang Wang and Xiaoou Tang and Ping Luo', + title='DeepFashion2: A Versatile Benchmark for ' + 'Detection, Pose Estimation, Segmentation and ' + 'Re-Identification of Clothing Images', + container='Proceedings of IEEE Conference on Computer ' + 'Vision and Pattern Recognition (CVPR)', + year='2019', + homepage='https://github.com/switchablenorms/DeepFashion2', + ), + keypoint_info={ + # short_sleeved_shirt + 0: + dict(name='sss_kpt1', id=0, color=colors['sss'], type='', swap=''), + 1: + dict( + name='sss_kpt2', + id=1, + color=colors['sss'], + type='', + swap='sss_kpt6'), + 2: + dict( + name='sss_kpt3', + id=2, + color=colors['sss'], + type='', + swap='sss_kpt5'), + 3: + dict(name='sss_kpt4', id=3, color=colors['sss'], type='', swap=''), + 4: + dict( + name='sss_kpt5', + id=4, + color=colors['sss'], + type='', + swap='sss_kpt3'), + 5: + dict( + name='sss_kpt6', + id=5, + color=colors['sss'], + type='', + swap='sss_kpt2'), + 6: + dict( + name='sss_kpt7', + id=6, + color=colors['sss'], + type='', + swap='sss_kpt25'), + 7: + dict( + name='sss_kpt8', + id=7, + color=colors['sss'], + type='', + swap='sss_kpt24'), + 8: + dict( + name='sss_kpt9', + id=8, + color=colors['sss'], + type='', + swap='sss_kpt23'), + 9: + dict( + name='sss_kpt10', + id=9, + color=colors['sss'], + type='', + swap='sss_kpt22'), + 10: + dict( + name='sss_kpt11', + id=10, + color=colors['sss'], + type='', + swap='sss_kpt21'), + 11: + dict( + name='sss_kpt12', + id=11, + color=colors['sss'], + type='', + swap='sss_kpt20'), + 12: + dict( + name='sss_kpt13', + id=12, + color=colors['sss'], + type='', + swap='sss_kpt19'), + 13: + dict( + name='sss_kpt14', + id=13, + color=colors['sss'], + type='', + swap='sss_kpt18'), + 14: + dict( + name='sss_kpt15', + id=14, + color=colors['sss'], + type='', + swap='sss_kpt17'), + 15: + dict(name='sss_kpt16', id=15, color=colors['sss'], type='', swap=''), + 16: + dict( + name='sss_kpt17', + id=16, + color=colors['sss'], + type='', + swap='sss_kpt15'), + 17: + dict( + name='sss_kpt18', + id=17, + color=colors['sss'], + type='', + swap='sss_kpt14'), + 18: + dict( + name='sss_kpt19', + id=18, + color=colors['sss'], + type='', + swap='sss_kpt13'), + 19: + dict( + name='sss_kpt20', + id=19, + color=colors['sss'], + type='', + swap='sss_kpt12'), + 20: + dict( + name='sss_kpt21', + id=20, + color=colors['sss'], + type='', + swap='sss_kpt11'), + 21: + dict( + name='sss_kpt22', + id=21, + color=colors['sss'], + type='', + swap='sss_kpt10'), + 22: + dict( + name='sss_kpt23', + id=22, + color=colors['sss'], + type='', + swap='sss_kpt9'), + 23: + dict( + name='sss_kpt24', + id=23, + color=colors['sss'], + type='', + swap='sss_kpt8'), + 24: + dict( + name='sss_kpt25', + id=24, + color=colors['sss'], + type='', + swap='sss_kpt7'), + # long_sleeved_shirt + 25: + dict(name='lss_kpt1', id=25, color=colors['lss'], type='', swap=''), + 26: + dict( + name='lss_kpt2', + id=26, + color=colors['lss'], + type='', + swap='lss_kpt6'), + 27: + dict( + name='lss_kpt3', + id=27, + color=colors['lss'], + type='', + swap='lss_kpt5'), + 28: + dict(name='lss_kpt4', id=28, color=colors['lss'], type='', swap=''), + 29: + dict( + name='lss_kpt5', + id=29, + color=colors['lss'], + type='', + swap='lss_kpt3'), + 30: + dict( + name='lss_kpt6', + id=30, + color=colors['lss'], + type='', + swap='lss_kpt2'), + 31: + dict( + name='lss_kpt7', + id=31, + color=colors['lss'], + type='', + swap='lss_kpt33'), + 32: + dict( + name='lss_kpt8', + id=32, + color=colors['lss'], + type='', + swap='lss_kpt32'), + 33: + dict( + name='lss_kpt9', + id=33, + color=colors['lss'], + type='', + swap='lss_kpt31'), + 34: + dict( + name='lss_kpt10', + id=34, + color=colors['lss'], + type='', + swap='lss_kpt30'), + 35: + dict( + name='lss_kpt11', + id=35, + color=colors['lss'], + type='', + swap='lss_kpt29'), + 36: + dict( + name='lss_kpt12', + id=36, + color=colors['lss'], + type='', + swap='lss_kpt28'), + 37: + dict( + name='lss_kpt13', + id=37, + color=colors['lss'], + type='', + swap='lss_kpt27'), + 38: + dict( + name='lss_kpt14', + id=38, + color=colors['lss'], + type='', + swap='lss_kpt26'), + 39: + dict( + name='lss_kpt15', + id=39, + color=colors['lss'], + type='', + swap='lss_kpt25'), + 40: + dict( + name='lss_kpt16', + id=40, + color=colors['lss'], + type='', + swap='lss_kpt24'), + 41: + dict( + name='lss_kpt17', + id=41, + color=colors['lss'], + type='', + swap='lss_kpt23'), + 42: + dict( + name='lss_kpt18', + id=42, + color=colors['lss'], + type='', + swap='lss_kpt22'), + 43: + dict( + name='lss_kpt19', + id=43, + color=colors['lss'], + type='', + swap='lss_kpt21'), + 44: + dict(name='lss_kpt20', id=44, color=colors['lss'], type='', swap=''), + 45: + dict( + name='lss_kpt21', + id=45, + color=colors['lss'], + type='', + swap='lss_kpt19'), + 46: + dict( + name='lss_kpt22', + id=46, + color=colors['lss'], + type='', + swap='lss_kpt18'), + 47: + dict( + name='lss_kpt23', + id=47, + color=colors['lss'], + type='', + swap='lss_kpt17'), + 48: + dict( + name='lss_kpt24', + id=48, + color=colors['lss'], + type='', + swap='lss_kpt16'), + 49: + dict( + name='lss_kpt25', + id=49, + color=colors['lss'], + type='', + swap='lss_kpt15'), + 50: + dict( + name='lss_kpt26', + id=50, + color=colors['lss'], + type='', + swap='lss_kpt14'), + 51: + dict( + name='lss_kpt27', + id=51, + color=colors['lss'], + type='', + swap='lss_kpt13'), + 52: + dict( + name='lss_kpt28', + id=52, + color=colors['lss'], + type='', + swap='lss_kpt12'), + 53: + dict( + name='lss_kpt29', + id=53, + color=colors['lss'], + type='', + swap='lss_kpt11'), + 54: + dict( + name='lss_kpt30', + id=54, + color=colors['lss'], + type='', + swap='lss_kpt10'), + 55: + dict( + name='lss_kpt31', + id=55, + color=colors['lss'], + type='', + swap='lss_kpt9'), + 56: + dict( + name='lss_kpt32', + id=56, + color=colors['lss'], + type='', + swap='lss_kpt8'), + 57: + dict( + name='lss_kpt33', + id=57, + color=colors['lss'], + type='', + swap='lss_kpt7'), + # short_sleeved_outwear + 58: + dict(name='sso_kpt1', id=58, color=colors['sso'], type='', swap=''), + 59: + dict( + name='sso_kpt2', + id=59, + color=colors['sso'], + type='', + swap='sso_kpt26'), + 60: + dict( + name='sso_kpt3', + id=60, + color=colors['sso'], + type='', + swap='sso_kpt5'), + 61: + dict( + name='sso_kpt4', + id=61, + color=colors['sso'], + type='', + swap='sso_kpt6'), + 62: + dict( + name='sso_kpt5', + id=62, + color=colors['sso'], + type='', + swap='sso_kpt3'), + 63: + dict( + name='sso_kpt6', + id=63, + color=colors['sso'], + type='', + swap='sso_kpt4'), + 64: + dict( + name='sso_kpt7', + id=64, + color=colors['sso'], + type='', + swap='sso_kpt25'), + 65: + dict( + name='sso_kpt8', + id=65, + color=colors['sso'], + type='', + swap='sso_kpt24'), + 66: + dict( + name='sso_kpt9', + id=66, + color=colors['sso'], + type='', + swap='sso_kpt23'), + 67: + dict( + name='sso_kpt10', + id=67, + color=colors['sso'], + type='', + swap='sso_kpt22'), + 68: + dict( + name='sso_kpt11', + id=68, + color=colors['sso'], + type='', + swap='sso_kpt21'), + 69: + dict( + name='sso_kpt12', + id=69, + color=colors['sso'], + type='', + swap='sso_kpt20'), + 70: + dict( + name='sso_kpt13', + id=70, + color=colors['sso'], + type='', + swap='sso_kpt19'), + 71: + dict( + name='sso_kpt14', + id=71, + color=colors['sso'], + type='', + swap='sso_kpt18'), + 72: + dict( + name='sso_kpt15', + id=72, + color=colors['sso'], + type='', + swap='sso_kpt17'), + 73: + dict( + name='sso_kpt16', + id=73, + color=colors['sso'], + type='', + swap='sso_kpt29'), + 74: + dict( + name='sso_kpt17', + id=74, + color=colors['sso'], + type='', + swap='sso_kpt15'), + 75: + dict( + name='sso_kpt18', + id=75, + color=colors['sso'], + type='', + swap='sso_kpt14'), + 76: + dict( + name='sso_kpt19', + id=76, + color=colors['sso'], + type='', + swap='sso_kpt13'), + 77: + dict( + name='sso_kpt20', + id=77, + color=colors['sso'], + type='', + swap='sso_kpt12'), + 78: + dict( + name='sso_kpt21', + id=78, + color=colors['sso'], + type='', + swap='sso_kpt11'), + 79: + dict( + name='sso_kpt22', + id=79, + color=colors['sso'], + type='', + swap='sso_kpt10'), + 80: + dict( + name='sso_kpt23', + id=80, + color=colors['sso'], + type='', + swap='sso_kpt9'), + 81: + dict( + name='sso_kpt24', + id=81, + color=colors['sso'], + type='', + swap='sso_kpt8'), + 82: + dict( + name='sso_kpt25', + id=82, + color=colors['sso'], + type='', + swap='sso_kpt7'), + 83: + dict( + name='sso_kpt26', + id=83, + color=colors['sso'], + type='', + swap='sso_kpt2'), + 84: + dict( + name='sso_kpt27', + id=84, + color=colors['sso'], + type='', + swap='sso_kpt30'), + 85: + dict( + name='sso_kpt28', + id=85, + color=colors['sso'], + type='', + swap='sso_kpt31'), + 86: + dict( + name='sso_kpt29', + id=86, + color=colors['sso'], + type='', + swap='sso_kpt16'), + 87: + dict( + name='sso_kpt30', + id=87, + color=colors['sso'], + type='', + swap='sso_kpt27'), + 88: + dict( + name='sso_kpt31', + id=88, + color=colors['sso'], + type='', + swap='sso_kpt28'), + # long_sleeved_outwear + 89: + dict(name='lso_kpt1', id=89, color=colors['lso'], type='', swap=''), + 90: + dict( + name='lso_kpt2', + id=90, + color=colors['lso'], + type='', + swap='lso_kpt6'), + 91: + dict( + name='lso_kpt3', + id=91, + color=colors['lso'], + type='', + swap='lso_kpt5'), + 92: + dict( + name='lso_kpt4', + id=92, + color=colors['lso'], + type='', + swap='lso_kpt34'), + 93: + dict( + name='lso_kpt5', + id=93, + color=colors['lso'], + type='', + swap='lso_kpt3'), + 94: + dict( + name='lso_kpt6', + id=94, + color=colors['lso'], + type='', + swap='lso_kpt2'), + 95: + dict( + name='lso_kpt7', + id=95, + color=colors['lso'], + type='', + swap='lso_kpt33'), + 96: + dict( + name='lso_kpt8', + id=96, + color=colors['lso'], + type='', + swap='lso_kpt32'), + 97: + dict( + name='lso_kpt9', + id=97, + color=colors['lso'], + type='', + swap='lso_kpt31'), + 98: + dict( + name='lso_kpt10', + id=98, + color=colors['lso'], + type='', + swap='lso_kpt30'), + 99: + dict( + name='lso_kpt11', + id=99, + color=colors['lso'], + type='', + swap='lso_kpt29'), + 100: + dict( + name='lso_kpt12', + id=100, + color=colors['lso'], + type='', + swap='lso_kpt28'), + 101: + dict( + name='lso_kpt13', + id=101, + color=colors['lso'], + type='', + swap='lso_kpt27'), + 102: + dict( + name='lso_kpt14', + id=102, + color=colors['lso'], + type='', + swap='lso_kpt26'), + 103: + dict( + name='lso_kpt15', + id=103, + color=colors['lso'], + type='', + swap='lso_kpt25'), + 104: + dict( + name='lso_kpt16', + id=104, + color=colors['lso'], + type='', + swap='lso_kpt24'), + 105: + dict( + name='lso_kpt17', + id=105, + color=colors['lso'], + type='', + swap='lso_kpt23'), + 106: + dict( + name='lso_kpt18', + id=106, + color=colors['lso'], + type='', + swap='lso_kpt22'), + 107: + dict( + name='lso_kpt19', + id=107, + color=colors['lso'], + type='', + swap='lso_kpt21'), + 108: + dict( + name='lso_kpt20', + id=108, + color=colors['lso'], + type='', + swap='lso_kpt37'), + 109: + dict( + name='lso_kpt21', + id=109, + color=colors['lso'], + type='', + swap='lso_kpt19'), + 110: + dict( + name='lso_kpt22', + id=110, + color=colors['lso'], + type='', + swap='lso_kpt18'), + 111: + dict( + name='lso_kpt23', + id=111, + color=colors['lso'], + type='', + swap='lso_kpt17'), + 112: + dict( + name='lso_kpt24', + id=112, + color=colors['lso'], + type='', + swap='lso_kpt16'), + 113: + dict( + name='lso_kpt25', + id=113, + color=colors['lso'], + type='', + swap='lso_kpt15'), + 114: + dict( + name='lso_kpt26', + id=114, + color=colors['lso'], + type='', + swap='lso_kpt14'), + 115: + dict( + name='lso_kpt27', + id=115, + color=colors['lso'], + type='', + swap='lso_kpt13'), + 116: + dict( + name='lso_kpt28', + id=116, + color=colors['lso'], + type='', + swap='lso_kpt12'), + 117: + dict( + name='lso_kpt29', + id=117, + color=colors['lso'], + type='', + swap='lso_kpt11'), + 118: + dict( + name='lso_kpt30', + id=118, + color=colors['lso'], + type='', + swap='lso_kpt10'), + 119: + dict( + name='lso_kpt31', + id=119, + color=colors['lso'], + type='', + swap='lso_kpt9'), + 120: + dict( + name='lso_kpt32', + id=120, + color=colors['lso'], + type='', + swap='lso_kpt8'), + 121: + dict( + name='lso_kpt33', + id=121, + color=colors['lso'], + type='', + swap='lso_kpt7'), + 122: + dict( + name='lso_kpt34', + id=122, + color=colors['lso'], + type='', + swap='lso_kpt4'), + 123: + dict( + name='lso_kpt35', + id=123, + color=colors['lso'], + type='', + swap='lso_kpt38'), + 124: + dict( + name='lso_kpt36', + id=124, + color=colors['lso'], + type='', + swap='lso_kpt39'), + 125: + dict( + name='lso_kpt37', + id=125, + color=colors['lso'], + type='', + swap='lso_kpt20'), + 126: + dict( + name='lso_kpt38', + id=126, + color=colors['lso'], + type='', + swap='lso_kpt35'), + 127: + dict( + name='lso_kpt39', + id=127, + color=colors['lso'], + type='', + swap='lso_kpt36'), + # vest + 128: + dict(name='vest_kpt1', id=128, color=colors['vest'], type='', swap=''), + 129: + dict( + name='vest_kpt2', + id=129, + color=colors['vest'], + type='', + swap='vest_kpt6'), + 130: + dict( + name='vest_kpt3', + id=130, + color=colors['vest'], + type='', + swap='vest_kpt5'), + 131: + dict(name='vest_kpt4', id=131, color=colors['vest'], type='', swap=''), + 132: + dict( + name='vest_kpt5', + id=132, + color=colors['vest'], + type='', + swap='vest_kpt3'), + 133: + dict( + name='vest_kpt6', + id=133, + color=colors['vest'], + type='', + swap='vest_kpt2'), + 134: + dict( + name='vest_kpt7', + id=134, + color=colors['vest'], + type='', + swap='vest_kpt15'), + 135: + dict( + name='vest_kpt8', + id=135, + color=colors['vest'], + type='', + swap='vest_kpt14'), + 136: + dict( + name='vest_kpt9', + id=136, + color=colors['vest'], + type='', + swap='vest_kpt13'), + 137: + dict( + name='vest_kpt10', + id=137, + color=colors['vest'], + type='', + swap='vest_kpt12'), + 138: + dict( + name='vest_kpt11', id=138, color=colors['vest'], type='', swap=''), + 139: + dict( + name='vest_kpt12', + id=139, + color=colors['vest'], + type='', + swap='vest_kpt10'), + 140: + dict( + name='vest_kpt13', id=140, color=colors['vest'], type='', swap=''), + 141: + dict( + name='vest_kpt14', + id=141, + color=colors['vest'], + type='', + swap='vest_kpt8'), + 142: + dict( + name='vest_kpt15', + id=142, + color=colors['vest'], + type='', + swap='vest_kpt7'), + # sling + 143: + dict( + name='sling_kpt1', id=143, color=colors['sling'], type='', + swap=''), + 144: + dict( + name='sling_kpt2', + id=144, + color=colors['sling'], + type='', + swap='sling_kpt6'), + 145: + dict( + name='sling_kpt3', + id=145, + color=colors['sling'], + type='', + swap='sling_kpt5'), + 146: + dict( + name='sling_kpt4', id=146, color=colors['sling'], type='', + swap=''), + 147: + dict( + name='sling_kpt5', + id=147, + color=colors['sling'], + type='', + swap='sling_kpt3'), + 148: + dict( + name='sling_kpt6', + id=148, + color=colors['sling'], + type='', + swap='sling_kpt2'), + 149: + dict( + name='sling_kpt7', + id=149, + color=colors['sling'], + type='', + swap='sling_kpt15'), + 150: + dict( + name='sling_kpt8', + id=150, + color=colors['sling'], + type='', + swap='sling_kpt14'), + 151: + dict( + name='sling_kpt9', + id=151, + color=colors['sling'], + type='', + swap='sling_kpt13'), + 152: + dict( + name='sling_kpt10', + id=152, + color=colors['sling'], + type='', + swap='sling_kpt12'), + 153: + dict( + name='sling_kpt11', + id=153, + color=colors['sling'], + type='', + swap=''), + 154: + dict( + name='sling_kpt12', + id=154, + color=colors['sling'], + type='', + swap='sling_kpt10'), + 155: + dict( + name='sling_kpt13', + id=155, + color=colors['sling'], + type='', + swap='sling_kpt9'), + 156: + dict( + name='sling_kpt14', + id=156, + color=colors['sling'], + type='', + swap='sling_kpt8'), + 157: + dict( + name='sling_kpt15', + id=157, + color=colors['sling'], + type='', + swap='sling_kpt7'), + # shorts + 158: + dict( + name='shorts_kpt1', + id=158, + color=colors['shorts'], + type='', + swap='shorts_kpt3'), + 159: + dict( + name='shorts_kpt2', + id=159, + color=colors['shorts'], + type='', + swap=''), + 160: + dict( + name='shorts_kpt3', + id=160, + color=colors['shorts'], + type='', + swap='shorts_kpt1'), + 161: + dict( + name='shorts_kpt4', + id=161, + color=colors['shorts'], + type='', + swap='shorts_kpt10'), + 162: + dict( + name='shorts_kpt5', + id=162, + color=colors['shorts'], + type='', + swap='shorts_kpt9'), + 163: + dict( + name='shorts_kpt6', + id=163, + color=colors['shorts'], + type='', + swap='shorts_kpt8'), + 164: + dict( + name='shorts_kpt7', + id=164, + color=colors['shorts'], + type='', + swap=''), + 165: + dict( + name='shorts_kpt8', + id=165, + color=colors['shorts'], + type='', + swap='shorts_kpt6'), + 166: + dict( + name='shorts_kpt9', + id=166, + color=colors['shorts'], + type='', + swap='shorts_kpt5'), + 167: + dict( + name='shorts_kpt10', + id=167, + color=colors['shorts'], + type='', + swap='shorts_kpt4'), + # trousers + 168: + dict( + name='trousers_kpt1', + id=168, + color=colors['trousers'], + type='', + swap='trousers_kpt3'), + 169: + dict( + name='trousers_kpt2', + id=169, + color=colors['trousers'], + type='', + swap=''), + 170: + dict( + name='trousers_kpt3', + id=170, + color=colors['trousers'], + type='', + swap='trousers_kpt1'), + 171: + dict( + name='trousers_kpt4', + id=171, + color=colors['trousers'], + type='', + swap='trousers_kpt14'), + 172: + dict( + name='trousers_kpt5', + id=172, + color=colors['trousers'], + type='', + swap='trousers_kpt13'), + 173: + dict( + name='trousers_kpt6', + id=173, + color=colors['trousers'], + type='', + swap='trousers_kpt12'), + 174: + dict( + name='trousers_kpt7', + id=174, + color=colors['trousers'], + type='', + swap='trousers_kpt11'), + 175: + dict( + name='trousers_kpt8', + id=175, + color=colors['trousers'], + type='', + swap='trousers_kpt10'), + 176: + dict( + name='trousers_kpt9', + id=176, + color=colors['trousers'], + type='', + swap=''), + 177: + dict( + name='trousers_kpt10', + id=177, + color=colors['trousers'], + type='', + swap='trousers_kpt8'), + 178: + dict( + name='trousers_kpt11', + id=178, + color=colors['trousers'], + type='', + swap='trousers_kpt7'), + 179: + dict( + name='trousers_kpt12', + id=179, + color=colors['trousers'], + type='', + swap='trousers_kpt6'), + 180: + dict( + name='trousers_kpt13', + id=180, + color=colors['trousers'], + type='', + swap='trousers_kpt5'), + 181: + dict( + name='trousers_kpt14', + id=181, + color=colors['trousers'], + type='', + swap='trousers_kpt4'), + # skirt + 182: + dict( + name='skirt_kpt1', + id=182, + color=colors['skirt'], + type='', + swap='skirt_kpt3'), + 183: + dict( + name='skirt_kpt2', id=183, color=colors['skirt'], type='', + swap=''), + 184: + dict( + name='skirt_kpt3', + id=184, + color=colors['skirt'], + type='', + swap='skirt_kpt1'), + 185: + dict( + name='skirt_kpt4', + id=185, + color=colors['skirt'], + type='', + swap='skirt_kpt8'), + 186: + dict( + name='skirt_kpt5', + id=186, + color=colors['skirt'], + type='', + swap='skirt_kpt7'), + 187: + dict( + name='skirt_kpt6', id=187, color=colors['skirt'], type='', + swap=''), + 188: + dict( + name='skirt_kpt7', + id=188, + color=colors['skirt'], + type='', + swap='skirt_kpt5'), + 189: + dict( + name='skirt_kpt8', + id=189, + color=colors['skirt'], + type='', + swap='skirt_kpt4'), + # short_sleeved_dress + 190: + dict(name='ssd_kpt1', id=190, color=colors['ssd'], type='', swap=''), + 191: + dict( + name='ssd_kpt2', + id=191, + color=colors['ssd'], + type='', + swap='ssd_kpt6'), + 192: + dict( + name='ssd_kpt3', + id=192, + color=colors['ssd'], + type='', + swap='ssd_kpt5'), + 193: + dict(name='ssd_kpt4', id=193, color=colors['ssd'], type='', swap=''), + 194: + dict( + name='ssd_kpt5', + id=194, + color=colors['ssd'], + type='', + swap='ssd_kpt3'), + 195: + dict( + name='ssd_kpt6', + id=195, + color=colors['ssd'], + type='', + swap='ssd_kpt2'), + 196: + dict( + name='ssd_kpt7', + id=196, + color=colors['ssd'], + type='', + swap='ssd_kpt29'), + 197: + dict( + name='ssd_kpt8', + id=197, + color=colors['ssd'], + type='', + swap='ssd_kpt28'), + 198: + dict( + name='ssd_kpt9', + id=198, + color=colors['ssd'], + type='', + swap='ssd_kpt27'), + 199: + dict( + name='ssd_kpt10', + id=199, + color=colors['ssd'], + type='', + swap='ssd_kpt26'), + 200: + dict( + name='ssd_kpt11', + id=200, + color=colors['ssd'], + type='', + swap='ssd_kpt25'), + 201: + dict( + name='ssd_kpt12', + id=201, + color=colors['ssd'], + type='', + swap='ssd_kpt24'), + 202: + dict( + name='ssd_kpt13', + id=202, + color=colors['ssd'], + type='', + swap='ssd_kpt23'), + 203: + dict( + name='ssd_kpt14', + id=203, + color=colors['ssd'], + type='', + swap='ssd_kpt22'), + 204: + dict( + name='ssd_kpt15', + id=204, + color=colors['ssd'], + type='', + swap='ssd_kpt21'), + 205: + dict( + name='ssd_kpt16', + id=205, + color=colors['ssd'], + type='', + swap='ssd_kpt20'), + 206: + dict( + name='ssd_kpt17', + id=206, + color=colors['ssd'], + type='', + swap='ssd_kpt19'), + 207: + dict(name='ssd_kpt18', id=207, color=colors['ssd'], type='', swap=''), + 208: + dict( + name='ssd_kpt19', + id=208, + color=colors['ssd'], + type='', + swap='ssd_kpt17'), + 209: + dict( + name='ssd_kpt20', + id=209, + color=colors['ssd'], + type='', + swap='ssd_kpt16'), + 210: + dict( + name='ssd_kpt21', + id=210, + color=colors['ssd'], + type='', + swap='ssd_kpt15'), + 211: + dict( + name='ssd_kpt22', + id=211, + color=colors['ssd'], + type='', + swap='ssd_kpt14'), + 212: + dict( + name='ssd_kpt23', + id=212, + color=colors['ssd'], + type='', + swap='ssd_kpt13'), + 213: + dict( + name='ssd_kpt24', + id=213, + color=colors['ssd'], + type='', + swap='ssd_kpt12'), + 214: + dict( + name='ssd_kpt25', + id=214, + color=colors['ssd'], + type='', + swap='ssd_kpt11'), + 215: + dict( + name='ssd_kpt26', + id=215, + color=colors['ssd'], + type='', + swap='ssd_kpt10'), + 216: + dict( + name='ssd_kpt27', + id=216, + color=colors['ssd'], + type='', + swap='ssd_kpt9'), + 217: + dict( + name='ssd_kpt28', + id=217, + color=colors['ssd'], + type='', + swap='ssd_kpt8'), + 218: + dict( + name='ssd_kpt29', + id=218, + color=colors['ssd'], + type='', + swap='ssd_kpt7'), + # long_sleeved_dress + 219: + dict(name='lsd_kpt1', id=219, color=colors['lsd'], type='', swap=''), + 220: + dict( + name='lsd_kpt2', + id=220, + color=colors['lsd'], + type='', + swap='lsd_kpt6'), + 221: + dict( + name='lsd_kpt3', + id=221, + color=colors['lsd'], + type='', + swap='lsd_kpt5'), + 222: + dict(name='lsd_kpt4', id=222, color=colors['lsd'], type='', swap=''), + 223: + dict( + name='lsd_kpt5', + id=223, + color=colors['lsd'], + type='', + swap='lsd_kpt3'), + 224: + dict( + name='lsd_kpt6', + id=224, + color=colors['lsd'], + type='', + swap='lsd_kpt2'), + 225: + dict( + name='lsd_kpt7', + id=225, + color=colors['lsd'], + type='', + swap='lsd_kpt37'), + 226: + dict( + name='lsd_kpt8', + id=226, + color=colors['lsd'], + type='', + swap='lsd_kpt36'), + 227: + dict( + name='lsd_kpt9', + id=227, + color=colors['lsd'], + type='', + swap='lsd_kpt35'), + 228: + dict( + name='lsd_kpt10', + id=228, + color=colors['lsd'], + type='', + swap='lsd_kpt34'), + 229: + dict( + name='lsd_kpt11', + id=229, + color=colors['lsd'], + type='', + swap='lsd_kpt33'), + 230: + dict( + name='lsd_kpt12', + id=230, + color=colors['lsd'], + type='', + swap='lsd_kpt32'), + 231: + dict( + name='lsd_kpt13', + id=231, + color=colors['lsd'], + type='', + swap='lsd_kpt31'), + 232: + dict( + name='lsd_kpt14', + id=232, + color=colors['lsd'], + type='', + swap='lsd_kpt30'), + 233: + dict( + name='lsd_kpt15', + id=233, + color=colors['lsd'], + type='', + swap='lsd_kpt29'), + 234: + dict( + name='lsd_kpt16', + id=234, + color=colors['lsd'], + type='', + swap='lsd_kpt28'), + 235: + dict( + name='lsd_kpt17', + id=235, + color=colors['lsd'], + type='', + swap='lsd_kpt27'), + 236: + dict( + name='lsd_kpt18', + id=236, + color=colors['lsd'], + type='', + swap='lsd_kpt26'), + 237: + dict( + name='lsd_kpt19', + id=237, + color=colors['lsd'], + type='', + swap='lsd_kpt25'), + 238: + dict( + name='lsd_kpt20', + id=238, + color=colors['lsd'], + type='', + swap='lsd_kpt24'), + 239: + dict( + name='lsd_kpt21', + id=239, + color=colors['lsd'], + type='', + swap='lsd_kpt23'), + 240: + dict(name='lsd_kpt22', id=240, color=colors['lsd'], type='', swap=''), + 241: + dict( + name='lsd_kpt23', + id=241, + color=colors['lsd'], + type='', + swap='lsd_kpt21'), + 242: + dict( + name='lsd_kpt24', + id=242, + color=colors['lsd'], + type='', + swap='lsd_kpt20'), + 243: + dict( + name='lsd_kpt25', + id=243, + color=colors['lsd'], + type='', + swap='lsd_kpt19'), + 244: + dict( + name='lsd_kpt26', + id=244, + color=colors['lsd'], + type='', + swap='lsd_kpt18'), + 245: + dict( + name='lsd_kpt27', + id=245, + color=colors['lsd'], + type='', + swap='lsd_kpt17'), + 246: + dict( + name='lsd_kpt28', + id=246, + color=colors['lsd'], + type='', + swap='lsd_kpt16'), + 247: + dict( + name='lsd_kpt29', + id=247, + color=colors['lsd'], + type='', + swap='lsd_kpt15'), + 248: + dict( + name='lsd_kpt30', + id=248, + color=colors['lsd'], + type='', + swap='lsd_kpt14'), + 249: + dict( + name='lsd_kpt31', + id=249, + color=colors['lsd'], + type='', + swap='lsd_kpt13'), + 250: + dict( + name='lsd_kpt32', + id=250, + color=colors['lsd'], + type='', + swap='lsd_kpt12'), + 251: + dict( + name='lsd_kpt33', + id=251, + color=colors['lsd'], + type='', + swap='lsd_kpt11'), + 252: + dict( + name='lsd_kpt34', + id=252, + color=colors['lsd'], + type='', + swap='lsd_kpt10'), + 253: + dict( + name='lsd_kpt35', + id=253, + color=colors['lsd'], + type='', + swap='lsd_kpt9'), + 254: + dict( + name='lsd_kpt36', + id=254, + color=colors['lsd'], + type='', + swap='lsd_kpt8'), + 255: + dict( + name='lsd_kpt37', + id=255, + color=colors['lsd'], + type='', + swap='lsd_kpt7'), + # vest_dress + 256: + dict(name='vd_kpt1', id=256, color=colors['vd'], type='', swap=''), + 257: + dict( + name='vd_kpt2', + id=257, + color=colors['vd'], + type='', + swap='vd_kpt6'), + 258: + dict( + name='vd_kpt3', + id=258, + color=colors['vd'], + type='', + swap='vd_kpt5'), + 259: + dict(name='vd_kpt4', id=259, color=colors['vd'], type='', swap=''), + 260: + dict( + name='vd_kpt5', + id=260, + color=colors['vd'], + type='', + swap='vd_kpt3'), + 261: + dict( + name='vd_kpt6', + id=261, + color=colors['vd'], + type='', + swap='vd_kpt2'), + 262: + dict( + name='vd_kpt7', + id=262, + color=colors['vd'], + type='', + swap='vd_kpt19'), + 263: + dict( + name='vd_kpt8', + id=263, + color=colors['vd'], + type='', + swap='vd_kpt18'), + 264: + dict( + name='vd_kpt9', + id=264, + color=colors['vd'], + type='', + swap='vd_kpt17'), + 265: + dict( + name='vd_kpt10', + id=265, + color=colors['vd'], + type='', + swap='vd_kpt16'), + 266: + dict( + name='vd_kpt11', + id=266, + color=colors['vd'], + type='', + swap='vd_kpt15'), + 267: + dict( + name='vd_kpt12', + id=267, + color=colors['vd'], + type='', + swap='vd_kpt14'), + 268: + dict(name='vd_kpt13', id=268, color=colors['vd'], type='', swap=''), + 269: + dict( + name='vd_kpt14', + id=269, + color=colors['vd'], + type='', + swap='vd_kpt12'), + 270: + dict( + name='vd_kpt15', + id=270, + color=colors['vd'], + type='', + swap='vd_kpt11'), + 271: + dict( + name='vd_kpt16', + id=271, + color=colors['vd'], + type='', + swap='vd_kpt10'), + 272: + dict( + name='vd_kpt17', + id=272, + color=colors['vd'], + type='', + swap='vd_kpt9'), + 273: + dict( + name='vd_kpt18', + id=273, + color=colors['vd'], + type='', + swap='vd_kpt8'), + 274: + dict( + name='vd_kpt19', + id=274, + color=colors['vd'], + type='', + swap='vd_kpt7'), + # sling_dress + 275: + dict(name='sd_kpt1', id=275, color=colors['sd'], type='', swap=''), + 276: + dict( + name='sd_kpt2', + id=276, + color=colors['sd'], + type='', + swap='sd_kpt6'), + 277: + dict( + name='sd_kpt3', + id=277, + color=colors['sd'], + type='', + swap='sd_kpt5'), + 278: + dict(name='sd_kpt4', id=278, color=colors['sd'], type='', swap=''), + 279: + dict( + name='sd_kpt5', + id=279, + color=colors['sd'], + type='', + swap='sd_kpt3'), + 280: + dict( + name='sd_kpt6', + id=280, + color=colors['sd'], + type='', + swap='sd_kpt2'), + 281: + dict( + name='sd_kpt7', + id=281, + color=colors['sd'], + type='', + swap='sd_kpt19'), + 282: + dict( + name='sd_kpt8', + id=282, + color=colors['sd'], + type='', + swap='sd_kpt18'), + 283: + dict( + name='sd_kpt9', + id=283, + color=colors['sd'], + type='', + swap='sd_kpt17'), + 284: + dict( + name='sd_kpt10', + id=284, + color=colors['sd'], + type='', + swap='sd_kpt16'), + 285: + dict( + name='sd_kpt11', + id=285, + color=colors['sd'], + type='', + swap='sd_kpt15'), + 286: + dict( + name='sd_kpt12', + id=286, + color=colors['sd'], + type='', + swap='sd_kpt14'), + 287: + dict(name='sd_kpt13', id=287, color=colors['sd'], type='', swap=''), + 288: + dict( + name='sd_kpt14', + id=288, + color=colors['sd'], + type='', + swap='sd_kpt12'), + 289: + dict( + name='sd_kpt15', + id=289, + color=colors['sd'], + type='', + swap='sd_kpt11'), + 290: + dict( + name='sd_kpt16', + id=290, + color=colors['sd'], + type='', + swap='sd_kpt10'), + 291: + dict( + name='sd_kpt17', + id=291, + color=colors['sd'], + type='', + swap='sd_kpt9'), + 292: + dict( + name='sd_kpt18', + id=292, + color=colors['sd'], + type='', + swap='sd_kpt8'), + 293: + dict( + name='sd_kpt19', + id=293, + color=colors['sd'], + type='', + swap='sd_kpt7'), + }, + skeleton_info={ + # short_sleeved_shirt + 0: + dict(link=('sss_kpt1', 'sss_kpt2'), id=0, color=[255, 128, 0]), + 1: + dict(link=('sss_kpt2', 'sss_kpt7'), id=1, color=[255, 128, 0]), + 2: + dict(link=('sss_kpt7', 'sss_kpt8'), id=2, color=[255, 128, 0]), + 3: + dict(link=('sss_kpt8', 'sss_kpt9'), id=3, color=[255, 128, 0]), + 4: + dict(link=('sss_kpt9', 'sss_kpt10'), id=4, color=[255, 128, 0]), + 5: + dict(link=('sss_kpt10', 'sss_kpt11'), id=5, color=[255, 128, 0]), + 6: + dict(link=('sss_kpt11', 'sss_kpt12'), id=6, color=[255, 128, 0]), + 7: + dict(link=('sss_kpt12', 'sss_kpt13'), id=7, color=[255, 128, 0]), + 8: + dict(link=('sss_kpt13', 'sss_kpt14'), id=8, color=[255, 128, 0]), + 9: + dict(link=('sss_kpt14', 'sss_kpt15'), id=9, color=[255, 128, 0]), + 10: + dict(link=('sss_kpt15', 'sss_kpt16'), id=10, color=[255, 128, 0]), + 11: + dict(link=('sss_kpt16', 'sss_kpt17'), id=11, color=[255, 128, 0]), + 12: + dict(link=('sss_kpt17', 'sss_kpt18'), id=12, color=[255, 128, 0]), + 13: + dict(link=('sss_kpt18', 'sss_kpt19'), id=13, color=[255, 128, 0]), + 14: + dict(link=('sss_kpt19', 'sss_kpt20'), id=14, color=[255, 128, 0]), + 15: + dict(link=('sss_kpt20', 'sss_kpt21'), id=15, color=[255, 128, 0]), + 16: + dict(link=('sss_kpt21', 'sss_kpt22'), id=16, color=[255, 128, 0]), + 17: + dict(link=('sss_kpt22', 'sss_kpt23'), id=17, color=[255, 128, 0]), + 18: + dict(link=('sss_kpt23', 'sss_kpt24'), id=18, color=[255, 128, 0]), + 19: + dict(link=('sss_kpt24', 'sss_kpt25'), id=19, color=[255, 128, 0]), + 20: + dict(link=('sss_kpt25', 'sss_kpt6'), id=20, color=[255, 128, 0]), + 21: + dict(link=('sss_kpt6', 'sss_kpt1'), id=21, color=[255, 128, 0]), + 22: + dict(link=('sss_kpt2', 'sss_kpt3'), id=22, color=[255, 128, 0]), + 23: + dict(link=('sss_kpt3', 'sss_kpt4'), id=23, color=[255, 128, 0]), + 24: + dict(link=('sss_kpt4', 'sss_kpt5'), id=24, color=[255, 128, 0]), + 25: + dict(link=('sss_kpt5', 'sss_kpt6'), id=25, color=[255, 128, 0]), + # long_sleeve_shirt + 26: + dict(link=('lss_kpt1', 'lss_kpt2'), id=26, color=[255, 0, 128]), + 27: + dict(link=('lss_kpt2', 'lss_kpt7'), id=27, color=[255, 0, 128]), + 28: + dict(link=('lss_kpt7', 'lss_kpt8'), id=28, color=[255, 0, 128]), + 29: + dict(link=('lss_kpt8', 'lss_kpt9'), id=29, color=[255, 0, 128]), + 30: + dict(link=('lss_kpt9', 'lss_kpt10'), id=30, color=[255, 0, 128]), + 31: + dict(link=('lss_kpt10', 'lss_kpt11'), id=31, color=[255, 0, 128]), + 32: + dict(link=('lss_kpt11', 'lss_kpt12'), id=32, color=[255, 0, 128]), + 33: + dict(link=('lss_kpt12', 'lss_kpt13'), id=33, color=[255, 0, 128]), + 34: + dict(link=('lss_kpt13', 'lss_kpt14'), id=34, color=[255, 0, 128]), + 35: + dict(link=('lss_kpt14', 'lss_kpt15'), id=35, color=[255, 0, 128]), + 36: + dict(link=('lss_kpt15', 'lss_kpt16'), id=36, color=[255, 0, 128]), + 37: + dict(link=('lss_kpt16', 'lss_kpt17'), id=37, color=[255, 0, 128]), + 38: + dict(link=('lss_kpt17', 'lss_kpt18'), id=38, color=[255, 0, 128]), + 39: + dict(link=('lss_kpt18', 'lss_kpt19'), id=39, color=[255, 0, 128]), + 40: + dict(link=('lss_kpt19', 'lss_kpt20'), id=40, color=[255, 0, 128]), + 41: + dict(link=('lss_kpt20', 'lss_kpt21'), id=41, color=[255, 0, 128]), + 42: + dict(link=('lss_kpt21', 'lss_kpt22'), id=42, color=[255, 0, 128]), + 43: + dict(link=('lss_kpt22', 'lss_kpt23'), id=43, color=[255, 0, 128]), + 44: + dict(link=('lss_kpt23', 'lss_kpt24'), id=44, color=[255, 0, 128]), + 45: + dict(link=('lss_kpt24', 'lss_kpt25'), id=45, color=[255, 0, 128]), + 46: + dict(link=('lss_kpt25', 'lss_kpt26'), id=46, color=[255, 0, 128]), + 47: + dict(link=('lss_kpt26', 'lss_kpt27'), id=47, color=[255, 0, 128]), + 48: + dict(link=('lss_kpt27', 'lss_kpt28'), id=48, color=[255, 0, 128]), + 49: + dict(link=('lss_kpt28', 'lss_kpt29'), id=49, color=[255, 0, 128]), + 50: + dict(link=('lss_kpt29', 'lss_kpt30'), id=50, color=[255, 0, 128]), + 51: + dict(link=('lss_kpt30', 'lss_kpt31'), id=51, color=[255, 0, 128]), + 52: + dict(link=('lss_kpt31', 'lss_kpt32'), id=52, color=[255, 0, 128]), + 53: + dict(link=('lss_kpt32', 'lss_kpt33'), id=53, color=[255, 0, 128]), + 54: + dict(link=('lss_kpt33', 'lss_kpt6'), id=54, color=[255, 0, 128]), + 55: + dict(link=('lss_kpt6', 'lss_kpt5'), id=55, color=[255, 0, 128]), + 56: + dict(link=('lss_kpt5', 'lss_kpt4'), id=56, color=[255, 0, 128]), + 57: + dict(link=('lss_kpt4', 'lss_kpt3'), id=57, color=[255, 0, 128]), + 58: + dict(link=('lss_kpt3', 'lss_kpt2'), id=58, color=[255, 0, 128]), + 59: + dict(link=('lss_kpt6', 'lss_kpt1'), id=59, color=[255, 0, 128]), + # short_sleeved_outwear + 60: + dict(link=('sso_kpt1', 'sso_kpt4'), id=60, color=[128, 0, 255]), + 61: + dict(link=('sso_kpt4', 'sso_kpt7'), id=61, color=[128, 0, 255]), + 62: + dict(link=('sso_kpt7', 'sso_kpt8'), id=62, color=[128, 0, 255]), + 63: + dict(link=('sso_kpt8', 'sso_kpt9'), id=63, color=[128, 0, 255]), + 64: + dict(link=('sso_kpt9', 'sso_kpt10'), id=64, color=[128, 0, 255]), + 65: + dict(link=('sso_kpt10', 'sso_kpt11'), id=65, color=[128, 0, 255]), + 66: + dict(link=('sso_kpt11', 'sso_kpt12'), id=66, color=[128, 0, 255]), + 67: + dict(link=('sso_kpt12', 'sso_kpt13'), id=67, color=[128, 0, 255]), + 68: + dict(link=('sso_kpt13', 'sso_kpt14'), id=68, color=[128, 0, 255]), + 69: + dict(link=('sso_kpt14', 'sso_kpt15'), id=69, color=[128, 0, 255]), + 70: + dict(link=('sso_kpt15', 'sso_kpt16'), id=70, color=[128, 0, 255]), + 71: + dict(link=('sso_kpt16', 'sso_kpt31'), id=71, color=[128, 0, 255]), + 72: + dict(link=('sso_kpt31', 'sso_kpt30'), id=72, color=[128, 0, 255]), + 73: + dict(link=('sso_kpt30', 'sso_kpt2'), id=73, color=[128, 0, 255]), + 74: + dict(link=('sso_kpt2', 'sso_kpt3'), id=74, color=[128, 0, 255]), + 75: + dict(link=('sso_kpt3', 'sso_kpt4'), id=75, color=[128, 0, 255]), + 76: + dict(link=('sso_kpt1', 'sso_kpt6'), id=76, color=[128, 0, 255]), + 77: + dict(link=('sso_kpt6', 'sso_kpt25'), id=77, color=[128, 0, 255]), + 78: + dict(link=('sso_kpt25', 'sso_kpt24'), id=78, color=[128, 0, 255]), + 79: + dict(link=('sso_kpt24', 'sso_kpt23'), id=79, color=[128, 0, 255]), + 80: + dict(link=('sso_kpt23', 'sso_kpt22'), id=80, color=[128, 0, 255]), + 81: + dict(link=('sso_kpt22', 'sso_kpt21'), id=81, color=[128, 0, 255]), + 82: + dict(link=('sso_kpt21', 'sso_kpt20'), id=82, color=[128, 0, 255]), + 83: + dict(link=('sso_kpt20', 'sso_kpt19'), id=83, color=[128, 0, 255]), + 84: + dict(link=('sso_kpt19', 'sso_kpt18'), id=84, color=[128, 0, 255]), + 85: + dict(link=('sso_kpt18', 'sso_kpt17'), id=85, color=[128, 0, 255]), + 86: + dict(link=('sso_kpt17', 'sso_kpt29'), id=86, color=[128, 0, 255]), + 87: + dict(link=('sso_kpt29', 'sso_kpt28'), id=87, color=[128, 0, 255]), + 88: + dict(link=('sso_kpt28', 'sso_kpt27'), id=88, color=[128, 0, 255]), + 89: + dict(link=('sso_kpt27', 'sso_kpt26'), id=89, color=[128, 0, 255]), + 90: + dict(link=('sso_kpt26', 'sso_kpt5'), id=90, color=[128, 0, 255]), + 91: + dict(link=('sso_kpt5', 'sso_kpt6'), id=91, color=[128, 0, 255]), + # long_sleeved_outwear + 92: + dict(link=('lso_kpt1', 'lso_kpt2'), id=92, color=[0, 128, 255]), + 93: + dict(link=('lso_kpt2', 'lso_kpt7'), id=93, color=[0, 128, 255]), + 94: + dict(link=('lso_kpt7', 'lso_kpt8'), id=94, color=[0, 128, 255]), + 95: + dict(link=('lso_kpt8', 'lso_kpt9'), id=95, color=[0, 128, 255]), + 96: + dict(link=('lso_kpt9', 'lso_kpt10'), id=96, color=[0, 128, 255]), + 97: + dict(link=('lso_kpt10', 'lso_kpt11'), id=97, color=[0, 128, 255]), + 98: + dict(link=('lso_kpt11', 'lso_kpt12'), id=98, color=[0, 128, 255]), + 99: + dict(link=('lso_kpt12', 'lso_kpt13'), id=99, color=[0, 128, 255]), + 100: + dict(link=('lso_kpt13', 'lso_kpt14'), id=100, color=[0, 128, 255]), + 101: + dict(link=('lso_kpt14', 'lso_kpt15'), id=101, color=[0, 128, 255]), + 102: + dict(link=('lso_kpt15', 'lso_kpt16'), id=102, color=[0, 128, 255]), + 103: + dict(link=('lso_kpt16', 'lso_kpt17'), id=103, color=[0, 128, 255]), + 104: + dict(link=('lso_kpt17', 'lso_kpt18'), id=104, color=[0, 128, 255]), + 105: + dict(link=('lso_kpt18', 'lso_kpt19'), id=105, color=[0, 128, 255]), + 106: + dict(link=('lso_kpt19', 'lso_kpt20'), id=106, color=[0, 128, 255]), + 107: + dict(link=('lso_kpt20', 'lso_kpt39'), id=107, color=[0, 128, 255]), + 108: + dict(link=('lso_kpt39', 'lso_kpt38'), id=108, color=[0, 128, 255]), + 109: + dict(link=('lso_kpt38', 'lso_kpt4'), id=109, color=[0, 128, 255]), + 110: + dict(link=('lso_kpt4', 'lso_kpt3'), id=110, color=[0, 128, 255]), + 111: + dict(link=('lso_kpt3', 'lso_kpt2'), id=111, color=[0, 128, 255]), + 112: + dict(link=('lso_kpt1', 'lso_kpt6'), id=112, color=[0, 128, 255]), + 113: + dict(link=('lso_kpt6', 'lso_kpt33'), id=113, color=[0, 128, 255]), + 114: + dict(link=('lso_kpt33', 'lso_kpt32'), id=114, color=[0, 128, 255]), + 115: + dict(link=('lso_kpt32', 'lso_kpt31'), id=115, color=[0, 128, 255]), + 116: + dict(link=('lso_kpt31', 'lso_kpt30'), id=116, color=[0, 128, 255]), + 117: + dict(link=('lso_kpt30', 'lso_kpt29'), id=117, color=[0, 128, 255]), + 118: + dict(link=('lso_kpt29', 'lso_kpt28'), id=118, color=[0, 128, 255]), + 119: + dict(link=('lso_kpt28', 'lso_kpt27'), id=119, color=[0, 128, 255]), + 120: + dict(link=('lso_kpt27', 'lso_kpt26'), id=120, color=[0, 128, 255]), + 121: + dict(link=('lso_kpt26', 'lso_kpt25'), id=121, color=[0, 128, 255]), + 122: + dict(link=('lso_kpt25', 'lso_kpt24'), id=122, color=[0, 128, 255]), + 123: + dict(link=('lso_kpt24', 'lso_kpt23'), id=123, color=[0, 128, 255]), + 124: + dict(link=('lso_kpt23', 'lso_kpt22'), id=124, color=[0, 128, 255]), + 125: + dict(link=('lso_kpt22', 'lso_kpt21'), id=125, color=[0, 128, 255]), + 126: + dict(link=('lso_kpt21', 'lso_kpt37'), id=126, color=[0, 128, 255]), + 127: + dict(link=('lso_kpt37', 'lso_kpt36'), id=127, color=[0, 128, 255]), + 128: + dict(link=('lso_kpt36', 'lso_kpt35'), id=128, color=[0, 128, 255]), + 129: + dict(link=('lso_kpt35', 'lso_kpt34'), id=129, color=[0, 128, 255]), + 130: + dict(link=('lso_kpt34', 'lso_kpt5'), id=130, color=[0, 128, 255]), + 131: + dict(link=('lso_kpt5', 'lso_kpt6'), id=131, color=[0, 128, 255]), + # vest + 132: + dict(link=('vest_kpt1', 'vest_kpt2'), id=132, color=[0, 128, 128]), + 133: + dict(link=('vest_kpt2', 'vest_kpt7'), id=133, color=[0, 128, 128]), + 134: + dict(link=('vest_kpt7', 'vest_kpt8'), id=134, color=[0, 128, 128]), + 135: + dict(link=('vest_kpt8', 'vest_kpt9'), id=135, color=[0, 128, 128]), + 136: + dict(link=('vest_kpt9', 'vest_kpt10'), id=136, color=[0, 128, 128]), + 137: + dict(link=('vest_kpt10', 'vest_kpt11'), id=137, color=[0, 128, 128]), + 138: + dict(link=('vest_kpt11', 'vest_kpt12'), id=138, color=[0, 128, 128]), + 139: + dict(link=('vest_kpt12', 'vest_kpt13'), id=139, color=[0, 128, 128]), + 140: + dict(link=('vest_kpt13', 'vest_kpt14'), id=140, color=[0, 128, 128]), + 141: + dict(link=('vest_kpt14', 'vest_kpt15'), id=141, color=[0, 128, 128]), + 142: + dict(link=('vest_kpt15', 'vest_kpt6'), id=142, color=[0, 128, 128]), + 143: + dict(link=('vest_kpt6', 'vest_kpt1'), id=143, color=[0, 128, 128]), + 144: + dict(link=('vest_kpt2', 'vest_kpt3'), id=144, color=[0, 128, 128]), + 145: + dict(link=('vest_kpt3', 'vest_kpt4'), id=145, color=[0, 128, 128]), + 146: + dict(link=('vest_kpt4', 'vest_kpt5'), id=146, color=[0, 128, 128]), + 147: + dict(link=('vest_kpt5', 'vest_kpt6'), id=147, color=[0, 128, 128]), + # sling + 148: + dict(link=('sling_kpt1', 'sling_kpt2'), id=148, color=[0, 0, 128]), + 149: + dict(link=('sling_kpt2', 'sling_kpt8'), id=149, color=[0, 0, 128]), + 150: + dict(link=('sling_kpt8', 'sling_kpt9'), id=150, color=[0, 0, 128]), + 151: + dict(link=('sling_kpt9', 'sling_kpt10'), id=151, color=[0, 0, 128]), + 152: + dict(link=('sling_kpt10', 'sling_kpt11'), id=152, color=[0, 0, 128]), + 153: + dict(link=('sling_kpt11', 'sling_kpt12'), id=153, color=[0, 0, 128]), + 154: + dict(link=('sling_kpt12', 'sling_kpt13'), id=154, color=[0, 0, 128]), + 155: + dict(link=('sling_kpt13', 'sling_kpt14'), id=155, color=[0, 0, 128]), + 156: + dict(link=('sling_kpt14', 'sling_kpt6'), id=156, color=[0, 0, 128]), + 157: + dict(link=('sling_kpt2', 'sling_kpt7'), id=157, color=[0, 0, 128]), + 158: + dict(link=('sling_kpt6', 'sling_kpt15'), id=158, color=[0, 0, 128]), + 159: + dict(link=('sling_kpt2', 'sling_kpt3'), id=159, color=[0, 0, 128]), + 160: + dict(link=('sling_kpt3', 'sling_kpt4'), id=160, color=[0, 0, 128]), + 161: + dict(link=('sling_kpt4', 'sling_kpt5'), id=161, color=[0, 0, 128]), + 162: + dict(link=('sling_kpt5', 'sling_kpt6'), id=162, color=[0, 0, 128]), + 163: + dict(link=('sling_kpt1', 'sling_kpt6'), id=163, color=[0, 0, 128]), + # shorts + 164: + dict( + link=('shorts_kpt1', 'shorts_kpt4'), id=164, color=[128, 128, + 128]), + 165: + dict( + link=('shorts_kpt4', 'shorts_kpt5'), id=165, color=[128, 128, + 128]), + 166: + dict( + link=('shorts_kpt5', 'shorts_kpt6'), id=166, color=[128, 128, + 128]), + 167: + dict( + link=('shorts_kpt6', 'shorts_kpt7'), id=167, color=[128, 128, + 128]), + 168: + dict( + link=('shorts_kpt7', 'shorts_kpt8'), id=168, color=[128, 128, + 128]), + 169: + dict( + link=('shorts_kpt8', 'shorts_kpt9'), id=169, color=[128, 128, + 128]), + 170: + dict( + link=('shorts_kpt9', 'shorts_kpt10'), + id=170, + color=[128, 128, 128]), + 171: + dict( + link=('shorts_kpt10', 'shorts_kpt3'), + id=171, + color=[128, 128, 128]), + 172: + dict( + link=('shorts_kpt3', 'shorts_kpt2'), id=172, color=[128, 128, + 128]), + 173: + dict( + link=('shorts_kpt2', 'shorts_kpt1'), id=173, color=[128, 128, + 128]), + # trousers + 174: + dict( + link=('trousers_kpt1', 'trousers_kpt4'), + id=174, + color=[128, 0, 128]), + 175: + dict( + link=('trousers_kpt4', 'trousers_kpt5'), + id=175, + color=[128, 0, 128]), + 176: + dict( + link=('trousers_kpt5', 'trousers_kpt6'), + id=176, + color=[128, 0, 128]), + 177: + dict( + link=('trousers_kpt6', 'trousers_kpt7'), + id=177, + color=[128, 0, 128]), + 178: + dict( + link=('trousers_kpt7', 'trousers_kpt8'), + id=178, + color=[128, 0, 128]), + 179: + dict( + link=('trousers_kpt8', 'trousers_kpt9'), + id=179, + color=[128, 0, 128]), + 180: + dict( + link=('trousers_kpt9', 'trousers_kpt10'), + id=180, + color=[128, 0, 128]), + 181: + dict( + link=('trousers_kpt10', 'trousers_kpt11'), + id=181, + color=[128, 0, 128]), + 182: + dict( + link=('trousers_kpt11', 'trousers_kpt12'), + id=182, + color=[128, 0, 128]), + 183: + dict( + link=('trousers_kpt12', 'trousers_kpt13'), + id=183, + color=[128, 0, 128]), + 184: + dict( + link=('trousers_kpt13', 'trousers_kpt14'), + id=184, + color=[128, 0, 128]), + 185: + dict( + link=('trousers_kpt14', 'trousers_kpt3'), + id=185, + color=[128, 0, 128]), + 186: + dict( + link=('trousers_kpt3', 'trousers_kpt2'), + id=186, + color=[128, 0, 128]), + 187: + dict( + link=('trousers_kpt2', 'trousers_kpt1'), + id=187, + color=[128, 0, 128]), + # skirt + 188: + dict(link=('skirt_kpt1', 'skirt_kpt4'), id=188, color=[64, 128, 128]), + 189: + dict(link=('skirt_kpt4', 'skirt_kpt5'), id=189, color=[64, 128, 128]), + 190: + dict(link=('skirt_kpt5', 'skirt_kpt6'), id=190, color=[64, 128, 128]), + 191: + dict(link=('skirt_kpt6', 'skirt_kpt7'), id=191, color=[64, 128, 128]), + 192: + dict(link=('skirt_kpt7', 'skirt_kpt8'), id=192, color=[64, 128, 128]), + 193: + dict(link=('skirt_kpt8', 'skirt_kpt3'), id=193, color=[64, 128, 128]), + 194: + dict(link=('skirt_kpt3', 'skirt_kpt2'), id=194, color=[64, 128, 128]), + 195: + dict(link=('skirt_kpt2', 'skirt_kpt1'), id=195, color=[64, 128, 128]), + # short_sleeved_dress + 196: + dict(link=('ssd_kpt1', 'ssd_kpt2'), id=196, color=[64, 64, 128]), + 197: + dict(link=('ssd_kpt2', 'ssd_kpt7'), id=197, color=[64, 64, 128]), + 198: + dict(link=('ssd_kpt7', 'ssd_kpt8'), id=198, color=[64, 64, 128]), + 199: + dict(link=('ssd_kpt8', 'ssd_kpt9'), id=199, color=[64, 64, 128]), + 200: + dict(link=('ssd_kpt9', 'ssd_kpt10'), id=200, color=[64, 64, 128]), + 201: + dict(link=('ssd_kpt10', 'ssd_kpt11'), id=201, color=[64, 64, 128]), + 202: + dict(link=('ssd_kpt11', 'ssd_kpt12'), id=202, color=[64, 64, 128]), + 203: + dict(link=('ssd_kpt12', 'ssd_kpt13'), id=203, color=[64, 64, 128]), + 204: + dict(link=('ssd_kpt13', 'ssd_kpt14'), id=204, color=[64, 64, 128]), + 205: + dict(link=('ssd_kpt14', 'ssd_kpt15'), id=205, color=[64, 64, 128]), + 206: + dict(link=('ssd_kpt15', 'ssd_kpt16'), id=206, color=[64, 64, 128]), + 207: + dict(link=('ssd_kpt16', 'ssd_kpt17'), id=207, color=[64, 64, 128]), + 208: + dict(link=('ssd_kpt17', 'ssd_kpt18'), id=208, color=[64, 64, 128]), + 209: + dict(link=('ssd_kpt18', 'ssd_kpt19'), id=209, color=[64, 64, 128]), + 210: + dict(link=('ssd_kpt19', 'ssd_kpt20'), id=210, color=[64, 64, 128]), + 211: + dict(link=('ssd_kpt20', 'ssd_kpt21'), id=211, color=[64, 64, 128]), + 212: + dict(link=('ssd_kpt21', 'ssd_kpt22'), id=212, color=[64, 64, 128]), + 213: + dict(link=('ssd_kpt22', 'ssd_kpt23'), id=213, color=[64, 64, 128]), + 214: + dict(link=('ssd_kpt23', 'ssd_kpt24'), id=214, color=[64, 64, 128]), + 215: + dict(link=('ssd_kpt24', 'ssd_kpt25'), id=215, color=[64, 64, 128]), + 216: + dict(link=('ssd_kpt25', 'ssd_kpt26'), id=216, color=[64, 64, 128]), + 217: + dict(link=('ssd_kpt26', 'ssd_kpt27'), id=217, color=[64, 64, 128]), + 218: + dict(link=('ssd_kpt27', 'ssd_kpt28'), id=218, color=[64, 64, 128]), + 219: + dict(link=('ssd_kpt28', 'ssd_kpt29'), id=219, color=[64, 64, 128]), + 220: + dict(link=('ssd_kpt29', 'ssd_kpt6'), id=220, color=[64, 64, 128]), + 221: + dict(link=('ssd_kpt6', 'ssd_kpt5'), id=221, color=[64, 64, 128]), + 222: + dict(link=('ssd_kpt5', 'ssd_kpt4'), id=222, color=[64, 64, 128]), + 223: + dict(link=('ssd_kpt4', 'ssd_kpt3'), id=223, color=[64, 64, 128]), + 224: + dict(link=('ssd_kpt3', 'ssd_kpt2'), id=224, color=[64, 64, 128]), + 225: + dict(link=('ssd_kpt6', 'ssd_kpt1'), id=225, color=[64, 64, 128]), + # long_sleeved_dress + 226: + dict(link=('lsd_kpt1', 'lsd_kpt2'), id=226, color=[128, 64, 0]), + 227: + dict(link=('lsd_kpt2', 'lsd_kpt7'), id=228, color=[128, 64, 0]), + 228: + dict(link=('lsd_kpt7', 'lsd_kpt8'), id=228, color=[128, 64, 0]), + 229: + dict(link=('lsd_kpt8', 'lsd_kpt9'), id=229, color=[128, 64, 0]), + 230: + dict(link=('lsd_kpt9', 'lsd_kpt10'), id=230, color=[128, 64, 0]), + 231: + dict(link=('lsd_kpt10', 'lsd_kpt11'), id=231, color=[128, 64, 0]), + 232: + dict(link=('lsd_kpt11', 'lsd_kpt12'), id=232, color=[128, 64, 0]), + 233: + dict(link=('lsd_kpt12', 'lsd_kpt13'), id=233, color=[128, 64, 0]), + 234: + dict(link=('lsd_kpt13', 'lsd_kpt14'), id=234, color=[128, 64, 0]), + 235: + dict(link=('lsd_kpt14', 'lsd_kpt15'), id=235, color=[128, 64, 0]), + 236: + dict(link=('lsd_kpt15', 'lsd_kpt16'), id=236, color=[128, 64, 0]), + 237: + dict(link=('lsd_kpt16', 'lsd_kpt17'), id=237, color=[128, 64, 0]), + 238: + dict(link=('lsd_kpt17', 'lsd_kpt18'), id=238, color=[128, 64, 0]), + 239: + dict(link=('lsd_kpt18', 'lsd_kpt19'), id=239, color=[128, 64, 0]), + 240: + dict(link=('lsd_kpt19', 'lsd_kpt20'), id=240, color=[128, 64, 0]), + 241: + dict(link=('lsd_kpt20', 'lsd_kpt21'), id=241, color=[128, 64, 0]), + 242: + dict(link=('lsd_kpt21', 'lsd_kpt22'), id=242, color=[128, 64, 0]), + 243: + dict(link=('lsd_kpt22', 'lsd_kpt23'), id=243, color=[128, 64, 0]), + 244: + dict(link=('lsd_kpt23', 'lsd_kpt24'), id=244, color=[128, 64, 0]), + 245: + dict(link=('lsd_kpt24', 'lsd_kpt25'), id=245, color=[128, 64, 0]), + 246: + dict(link=('lsd_kpt25', 'lsd_kpt26'), id=246, color=[128, 64, 0]), + 247: + dict(link=('lsd_kpt26', 'lsd_kpt27'), id=247, color=[128, 64, 0]), + 248: + dict(link=('lsd_kpt27', 'lsd_kpt28'), id=248, color=[128, 64, 0]), + 249: + dict(link=('lsd_kpt28', 'lsd_kpt29'), id=249, color=[128, 64, 0]), + 250: + dict(link=('lsd_kpt29', 'lsd_kpt30'), id=250, color=[128, 64, 0]), + 251: + dict(link=('lsd_kpt30', 'lsd_kpt31'), id=251, color=[128, 64, 0]), + 252: + dict(link=('lsd_kpt31', 'lsd_kpt32'), id=252, color=[128, 64, 0]), + 253: + dict(link=('lsd_kpt32', 'lsd_kpt33'), id=253, color=[128, 64, 0]), + 254: + dict(link=('lsd_kpt33', 'lsd_kpt34'), id=254, color=[128, 64, 0]), + 255: + dict(link=('lsd_kpt34', 'lsd_kpt35'), id=255, color=[128, 64, 0]), + 256: + dict(link=('lsd_kpt35', 'lsd_kpt36'), id=256, color=[128, 64, 0]), + 257: + dict(link=('lsd_kpt36', 'lsd_kpt37'), id=257, color=[128, 64, 0]), + 258: + dict(link=('lsd_kpt37', 'lsd_kpt6'), id=258, color=[128, 64, 0]), + 259: + dict(link=('lsd_kpt6', 'lsd_kpt5'), id=259, color=[128, 64, 0]), + 260: + dict(link=('lsd_kpt5', 'lsd_kpt4'), id=260, color=[128, 64, 0]), + 261: + dict(link=('lsd_kpt4', 'lsd_kpt3'), id=261, color=[128, 64, 0]), + 262: + dict(link=('lsd_kpt3', 'lsd_kpt2'), id=262, color=[128, 64, 0]), + 263: + dict(link=('lsd_kpt6', 'lsd_kpt1'), id=263, color=[128, 64, 0]), + # vest_dress + 264: + dict(link=('vd_kpt1', 'vd_kpt2'), id=264, color=[128, 64, 255]), + 265: + dict(link=('vd_kpt2', 'vd_kpt7'), id=265, color=[128, 64, 255]), + 266: + dict(link=('vd_kpt7', 'vd_kpt8'), id=266, color=[128, 64, 255]), + 267: + dict(link=('vd_kpt8', 'vd_kpt9'), id=267, color=[128, 64, 255]), + 268: + dict(link=('vd_kpt9', 'vd_kpt10'), id=268, color=[128, 64, 255]), + 269: + dict(link=('vd_kpt10', 'vd_kpt11'), id=269, color=[128, 64, 255]), + 270: + dict(link=('vd_kpt11', 'vd_kpt12'), id=270, color=[128, 64, 255]), + 271: + dict(link=('vd_kpt12', 'vd_kpt13'), id=271, color=[128, 64, 255]), + 272: + dict(link=('vd_kpt13', 'vd_kpt14'), id=272, color=[128, 64, 255]), + 273: + dict(link=('vd_kpt14', 'vd_kpt15'), id=273, color=[128, 64, 255]), + 274: + dict(link=('vd_kpt15', 'vd_kpt16'), id=274, color=[128, 64, 255]), + 275: + dict(link=('vd_kpt16', 'vd_kpt17'), id=275, color=[128, 64, 255]), + 276: + dict(link=('vd_kpt17', 'vd_kpt18'), id=276, color=[128, 64, 255]), + 277: + dict(link=('vd_kpt18', 'vd_kpt19'), id=277, color=[128, 64, 255]), + 278: + dict(link=('vd_kpt19', 'vd_kpt6'), id=278, color=[128, 64, 255]), + 279: + dict(link=('vd_kpt6', 'vd_kpt5'), id=279, color=[128, 64, 255]), + 280: + dict(link=('vd_kpt5', 'vd_kpt4'), id=280, color=[128, 64, 255]), + 281: + dict(link=('vd_kpt4', 'vd_kpt3'), id=281, color=[128, 64, 255]), + 282: + dict(link=('vd_kpt3', 'vd_kpt2'), id=282, color=[128, 64, 255]), + 283: + dict(link=('vd_kpt6', 'vd_kpt1'), id=283, color=[128, 64, 255]), + # sling_dress + 284: + dict(link=('sd_kpt1', 'sd_kpt2'), id=284, color=[128, 64, 0]), + 285: + dict(link=('sd_kpt2', 'sd_kpt8'), id=285, color=[128, 64, 0]), + 286: + dict(link=('sd_kpt8', 'sd_kpt9'), id=286, color=[128, 64, 0]), + 287: + dict(link=('sd_kpt9', 'sd_kpt10'), id=287, color=[128, 64, 0]), + 288: + dict(link=('sd_kpt10', 'sd_kpt11'), id=288, color=[128, 64, 0]), + 289: + dict(link=('sd_kpt11', 'sd_kpt12'), id=289, color=[128, 64, 0]), + 290: + dict(link=('sd_kpt12', 'sd_kpt13'), id=290, color=[128, 64, 0]), + 291: + dict(link=('sd_kpt13', 'sd_kpt14'), id=291, color=[128, 64, 0]), + 292: + dict(link=('sd_kpt14', 'sd_kpt15'), id=292, color=[128, 64, 0]), + 293: + dict(link=('sd_kpt15', 'sd_kpt16'), id=293, color=[128, 64, 0]), + 294: + dict(link=('sd_kpt16', 'sd_kpt17'), id=294, color=[128, 64, 0]), + 295: + dict(link=('sd_kpt17', 'sd_kpt18'), id=295, color=[128, 64, 0]), + 296: + dict(link=('sd_kpt18', 'sd_kpt6'), id=296, color=[128, 64, 0]), + 297: + dict(link=('sd_kpt6', 'sd_kpt5'), id=297, color=[128, 64, 0]), + 298: + dict(link=('sd_kpt5', 'sd_kpt4'), id=298, color=[128, 64, 0]), + 299: + dict(link=('sd_kpt4', 'sd_kpt3'), id=299, color=[128, 64, 0]), + 300: + dict(link=('sd_kpt3', 'sd_kpt2'), id=300, color=[128, 64, 0]), + 301: + dict(link=('sd_kpt2', 'sd_kpt7'), id=301, color=[128, 64, 0]), + 302: + dict(link=('sd_kpt6', 'sd_kpt19'), id=302, color=[128, 64, 0]), + 303: + dict(link=('sd_kpt6', 'sd_kpt1'), id=303, color=[128, 64, 0]), + }, + joint_weights=[1.] * 294, + sigmas=[]) diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfashion2.md b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfashion2.md new file mode 100644 index 0000000000..1dcfd59313 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfashion2.md @@ -0,0 +1,67 @@ + + +

+SimpleBaseline2D (ECCV'2018) + +```bibtex +@inproceedings{xiao2018simple, + title={Simple baselines for human pose estimation and tracking}, + author={Xiao, Bin and Wu, Haiping and Wei, Yichen}, + booktitle={Proceedings of the European conference on computer vision (ECCV)}, + pages={466--481}, + year={2018} +} +``` + +
+ + + +
+ResNet (CVPR'2016) + +```bibtex +@inproceedings{he2016deep, + title={Deep residual learning for image recognition}, + author={He, Kaiming and Zhang, Xiangyu and Ren, Shaoqing and Sun, Jian}, + booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition}, + pages={770--778}, + year={2016} +} +``` + +
+ + + +
+DeepFashion2 (CVPR'2019) + +```bibtex +@article{DeepFashion2, + author = {Yuying Ge and Ruimao Zhang and Lingyun Wu and Xiaogang Wang and Xiaoou Tang and Ping Luo}, + title={A Versatile Benchmark for Detection, Pose Estimation, Segmentation and Re-Identification of Clothing Images}, + journal={CVPR}, + year={2019} +} +``` + +
+ +Results on DeepFashion2 val set + +| Set | Arch | Input Size | PCK@0.2 | AUC | EPE | ckpt | log | +| :-------------------- | :-------------------------------------------------: | :--------: | :-----: | :---: | :--: | :-------------------------------------------------: | :-------------------------------------------------: | +| short_sleeved_shirt | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py) | 256x192 | 0.988 | 0.703 | 10.2 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_shirt_256x192-21e1c5da_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_shirt_256x192_20221208.log.json) | +| long_sleeved_shirt | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192.py) | 256x192 | 0.973 | 0.587 | 16.6 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_shirt_256x192-8679e7e3_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_shirt_256x192_20221208.log.json) | +| short_sleeved_outwear | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192.py) | 256x192 | 0.966 | 0.408 | 24.0 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_outwear_256x192-a04c1298_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_outwear_256x192_20221208.log.json) | +| long_sleeved_outwear | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192.py) | 256x192 | 0.987 | 0.517 | 18.1 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_outwear_256x192-31fbaecf_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_outwear_256x192_20221208.log.json) | +| vest | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-vest-256x192.py) | 256x192 | 0.981 | 0.643 | 12.7 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_vest_256x192-4c48d05c_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_vest_256x192_20221208.log.json) | +| sling | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-256x192.py) | 256x192 | 0.940 | 0.557 | 21.6 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_sling_256x192-ebb2b736_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_sling_256x192_20221208.log.json) | +| shorts | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192.py) | 256x192 | 0.975 | 0.682 | 12.4 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_shorts_256x192-9ab23592_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_shorts_256x192_20221208.log.json) | +| trousers | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192.py) | 256x192 | 0.973 | 0.625 | 14.8 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_trousers_256x192-3e632257_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_trousers_256x192_20221208.log.json) | +| skirt | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192.py) | 256x192 | 0.952 | 0.653 | 16.6 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_skirt_256x192-09573469_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_skirt_256x192_20221208.log.json) | +| short_sleeved_dress | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192.py) | 256x192 | 0.980 | 0.603 | 15.6 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_dress_256x192-1345b07a_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_dress_256x192_20221208.log.json) | +| long_sleeved_dress | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192.py) | 256x192 | 0.976 | 0.518 | 20.1 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_dress_256x192-87bac74e_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_dress_256x192_20221208.log.json) | +| vest_dress | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192.py) | 256x192 | 0.980 | 0.600 | 16.0 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_vest_dress_256x192-fb3fbd6f_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_vest_dress_256x192_20221208.log.json) | +| sling_dress | [pose_resnet_50](/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192.py) | 256x192 | 0.967 | 0.544 | 19.5 | [ckpt](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_sling_dress_256x192-8ebae0eb_20221208.pth) | [log](https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_sling_dress_256x192_20221208.log.json) | diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfasion2.yml b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfasion2.yml new file mode 100644 index 0000000000..28825fa011 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfasion2.yml @@ -0,0 +1,185 @@ +Models: +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: &id001 + - SimpleBaseline2D + - ResNet + Training Data: DeepFashion2 + Name: td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.703 + EPE: 10.2 + PCK@0.2: 0.988 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_shirt_256x192-21e1c5da_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.587 + EPE: 16.5 + PCK@0.2: 0.973 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_shirt_256x192-8679e7e3_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.408 + EPE: 24.0 + PCK@0.2: 0.966 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_outwear_256x192-a04c1298_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.517 + EPE: 18.1 + PCK@0.2: 0.987 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_outwear_256x192-31fbaecf_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-vest-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_4xb64-210e_deepfasion2-vest-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.643 + EPE: 12.7 + PCK@0.2: 0.981 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_vest_256x192-4c48d05c_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_4xb64-210e_deepfasion2-sling-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.557 + EPE: 21.6 + PCK@0.2: 0.94 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_sling_256x192-ebb2b736_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.682 + EPE: 12.4 + PCK@0.2: 0.975 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_shorts_256x192-9ab23592_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.625 + EPE: 14.8 + PCK@0.2: 0.973 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_trousers_256x192-3e632257_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.653 + EPE: 16.6 + PCK@0.2: 0.952 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_skirt_256x192-09573469_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.603 + EPE: 15.6 + PCK@0.2: 0.98 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_short_sleeved_dress_256x192-1345b07a_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.518 + EPE: 20.1 + PCK@0.2: 0.976 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_long_sleeved_dress_256x192-87bac74e_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.6 + EPE: 16.0 + PCK@0.2: 0.98 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_vest_dress_256x192-fb3fbd6f_20221208.pth +- Config: configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192.py + In Collection: SimpleBaseline2D + Metadata: + Architecture: *id001 + Training Data: DeepFashion2 + Name: td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192 + Results: + - Dataset: DeepFashion2 + Metrics: + AUC: 0.544 + EPE: 19.5 + PCK@0.2: 0.967 + Task: Fashion 2D Keypoint + Weights: https://download.openmmlab.com/mmpose/fashion/resnet/res50_deepfashion2_sling_dress_256x192-8ebae0eb_20221208.pth diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192.py new file mode 100644 index 0000000000..09dfaaa390 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-long-sleeved-dress-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=64) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_long_sleeved_dress_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_long_sleeved_dress_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192.py new file mode 100644 index 0000000000..f0e6f0c632 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-skirt-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=64) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_skirt_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_skirt_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192.py new file mode 100644 index 0000000000..9bed742199 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_1xb64-210e_deepfasion2-vest-dress-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=64) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_vest_dress_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_vest_dress_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192.py new file mode 100644 index 0000000000..617e59ae74 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_2xb64-210e_deepfasion2-trousers-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=128) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_trousers_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_trousers_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192.py new file mode 100644 index 0000000000..aa3b2774fc --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_3xb64-210e_deepfasion2-shorts-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=192) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_shorts_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_shorts_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192.py new file mode 100644 index 0000000000..0bfcabaa54 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-short-sleeved-dress-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=256) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_short_sleeved_dress_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_short_sleeved_dress_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-256x192.py new file mode 100644 index 0000000000..f627eb182c --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=256) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_sling_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_sling_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192.py new file mode 100644 index 0000000000..8b59607060 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-sling-dress-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=256) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_sling_dress_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_sling_dress_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-vest-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-vest-256x192.py new file mode 100644 index 0000000000..4249d5a897 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_4xb64-210e_deepfasion2-vest-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=256) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_vest_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_vest_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py new file mode 100644 index 0000000000..4161952dcf --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_6xb64-210e_deepfasion2-short-sleeved-shirt-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=384) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_short_sleeved_shirt_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_short_sleeved_shirt_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192.py new file mode 100644 index 0000000000..36e0318bf7 --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-outwear-256x192.py @@ -0,0 +1,123 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=512) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_long_sleeved_outwear_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/' + 'deepfashion2_long_sleeved_outwear_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192.py new file mode 100644 index 0000000000..f82e3cb5fb --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-long-sleeved-shirt-256x192.py @@ -0,0 +1,122 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=512) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_long_sleeved_shirt_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/deepfashion2_long_sleeved_shirt_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192.py b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192.py new file mode 100644 index 0000000000..30db99de9e --- /dev/null +++ b/configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/td-hm_res50_8xb64-210e_deepfasion2-short-sleeved-outwear-256x192.py @@ -0,0 +1,123 @@ +_base_ = ['../../../_base_/default_runtime.py'] + +# runtime +train_cfg = dict(max_epochs=210, val_interval=10) + +# optimizer +optim_wrapper = dict(optimizer=dict( + type='Adam', + lr=5e-4, +)) + +# learning policy +param_scheduler = [ + dict( + type='LinearLR', begin=0, end=500, start_factor=0.001, + by_epoch=False), # warm-up + dict( + type='MultiStepLR', + begin=0, + end=210, + milestones=[170, 200], + gamma=0.1, + by_epoch=True) +] + +# automatically scaling LR based on the actual training batch size +auto_scale_lr = dict(base_batch_size=512) + +# hooks +default_hooks = dict( + logger=dict(type='LoggerHook', interval=10), + checkpoint=dict(save_best='AUC', rule='greater')) + +# codec settings +codec = dict( + type='MSRAHeatmap', input_size=(192, 256), heatmap_size=(48, 64), sigma=2) + +# model settings +model = dict( + type='TopdownPoseEstimator', + data_preprocessor=dict( + type='PoseDataPreprocessor', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + bgr_to_rgb=True), + backbone=dict( + type='ResNet', + depth=50, + init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50'), + ), + head=dict( + type='HeatmapHead', + in_channels=2048, + out_channels=294, + loss=dict(type='KeypointMSELoss', use_target_weight=True), + decoder=codec), + test_cfg=dict( + flip_test=True, + flip_mode='heatmap', + shift_heatmap=True, + )) + +# base dataset settings +dataset_type = 'DeepFashion2Dataset' +data_mode = 'topdown' +data_root = 'data/deepfasion2/' + +# pipelines +train_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='RandomFlip', direction='horizontal'), + dict(type='RandomBBoxTransform'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='GenerateTarget', encoder=codec), + dict(type='PackPoseInputs') +] +val_pipeline = [ + dict(type='LoadImage'), + dict(type='GetBBoxCenterScale'), + dict(type='TopdownAffine', input_size=codec['input_size']), + dict(type='PackPoseInputs') +] + +# data loaders +train_dataloader = dict( + batch_size=64, + num_workers=2, + persistent_workers=True, + sampler=dict(type='DefaultSampler', shuffle=True), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='train/deepfashion2_short_sleeved_outwear_train.json', + data_prefix=dict(img='train/image/'), + pipeline=train_pipeline, + )) +val_dataloader = dict( + batch_size=32, + num_workers=2, + persistent_workers=True, + drop_last=False, + sampler=dict(type='DefaultSampler', shuffle=False, round_up=False), + dataset=dict( + type=dataset_type, + data_root=data_root, + data_mode=data_mode, + ann_file='validation/' + 'deepfashion2_short_sleeved_outwear_validation.json', + data_prefix=dict(img='validation/image/'), + test_mode=True, + pipeline=val_pipeline, + )) +test_dataloader = val_dataloader + +# evaluators +val_evaluator = [ + dict(type='PCKAccuracy', thr=0.2), + dict(type='AUC'), + dict(type='EPE'), +] +test_evaluator = val_evaluator diff --git a/docs/en/dataset_zoo/2d_fashion_landmark.md b/docs/en/dataset_zoo/2d_fashion_landmark.md index 42f213e40a..b1146b47b6 100644 --- a/docs/en/dataset_zoo/2d_fashion_landmark.md +++ b/docs/en/dataset_zoo/2d_fashion_landmark.md @@ -6,6 +6,7 @@ If your folder structure is different, you may need to change the corresponding MMPose supported datasets: - [DeepFashion](#deepfashion) \[ [Homepage](http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion/LandmarkDetection.html) \] +- [DeepFashion2](#deepfashion2) \[ [Homepage](https://github.com/switchablenorms/DeepFashion2) \] ## DeepFashion (Fashion Landmark Detection, FLD) @@ -78,3 +79,64 @@ mmpose │ │-- img_00000005.jpg │ │-- ... ``` + +## DeepFashion2 + + + +
+DeepFashion2 (CVPR'2019) + +```bibtex +@article{DeepFashion2, + author = {Yuying Ge and Ruimao Zhang and Lingyun Wu and Xiaogang Wang and Xiaoou Tang and Ping Luo}, + title={A Versatile Benchmark for Detection, Pose Estimation, Segmentation and Re-Identification of Clothing Images}, + journal={CVPR}, + year={2019} +} +``` + +
+ + + +For [DeepFashion2](https://github.com/switchablenorms/DeepFashion2) dataset, images can be downloaded from [download](https://drive.google.com/drive/folders/125F48fsMBz2EF0Cpqk6aaHet5VH399Ok?usp=sharing). +Please download the [annotation files](https://drive.google.com/file/d/1RM9l9EaB9ULRXhoCS72PkCXtJ4Cn4i6O/view?usp=share_link). These annotation files are converted by [deepfashion2_to_coco.py](https://github.com/switchablenorms/DeepFashion2/blob/master/evaluation/deepfashion2_to_coco.py). +Extract them under {MMPose}/data, and make them look like this: + +```text +mmpose +├── mmpose +├── docs +├── tests +├── tools +├── configs +`── data + │── deepfashion2 + │── train + │-- deepfashion2_short_sleeved_outwear_train.json + │-- deepfashion2_short_sleeved_dress_train.json + │-- deepfashion2_skirt_train.json + │-- deepfashion2_sling_dress_train.json + │-- ... + │-- image + │ │-- 000001.jpg + │ │-- 000002.jpg + │ │-- 000003.jpg + │ │-- 000004.jpg + │ │-- 000005.jpg + │ │-- ... + │── validation + │-- deepfashion2_short_sleeved_dress_validation.json + │-- deepfashion2_long_sleeved_shirt_validation.json + │-- deepfashion2_trousers_validation.json + │-- deepfashion2_skirt_validation.json + │-- ... + │-- image + │ │-- 000001.jpg + │ │-- 000002.jpg + │ │-- 000003.jpg + │ │-- 000004.jpg + │ │-- 000005.jpg + │ │-- ... +``` diff --git a/docs/zh_cn/dataset_zoo/2d_fashion_landmark.md b/docs/zh_cn/dataset_zoo/2d_fashion_landmark.md index 42f213e40a..25b7fd7c64 100644 --- a/docs/zh_cn/dataset_zoo/2d_fashion_landmark.md +++ b/docs/zh_cn/dataset_zoo/2d_fashion_landmark.md @@ -1,80 +1,3 @@ -# 2D Fashion Landmark Dataset +# 2D服装关键点数据集 -It is recommended to symlink the dataset root to `$MMPOSE/data`. -If your folder structure is different, you may need to change the corresponding paths in config files. - -MMPose supported datasets: - -- [DeepFashion](#deepfashion) \[ [Homepage](http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion/LandmarkDetection.html) \] - -## DeepFashion (Fashion Landmark Detection, FLD) - - - -
-DeepFashion (CVPR'2016) - -```bibtex -@inproceedings{liuLQWTcvpr16DeepFashion, - author = {Liu, Ziwei and Luo, Ping and Qiu, Shi and Wang, Xiaogang and Tang, Xiaoou}, - title = {DeepFashion: Powering Robust Clothes Recognition and Retrieval with Rich Annotations}, - booktitle = {Proceedings of IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, - month = {June}, - year = {2016} -} -``` - -
- - - -
-DeepFashion (ECCV'2016) - -```bibtex -@inproceedings{liuYLWTeccv16FashionLandmark, - author = {Liu, Ziwei and Yan, Sijie and Luo, Ping and Wang, Xiaogang and Tang, Xiaoou}, - title = {Fashion Landmark Detection in the Wild}, - booktitle = {European Conference on Computer Vision (ECCV)}, - month = {October}, - year = {2016} - } -``` - -
- -
- -
- -For [DeepFashion](http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion/LandmarkDetection.html) dataset, images can be downloaded from [download](http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion/LandmarkDetection.html). -Please download the annotation files from [fld_annotations](https://download.openmmlab.com/mmpose/datasets/fld_annotations.tar). -Extract them under {MMPose}/data, and make them look like this: - -```text -mmpose -├── mmpose -├── docs -├── tests -├── tools -├── configs -`── data - │── fld - │-- annotations - │ │-- fld_upper_train.json - │ |-- fld_upper_val.json - │ |-- fld_upper_test.json - │ │-- fld_lower_train.json - │ |-- fld_lower_val.json - │ |-- fld_lower_test.json - │ │-- fld_full_train.json - │ |-- fld_full_val.json - │ |-- fld_full_test.json - │-- img - │ │-- img_00000001.jpg - │ │-- img_00000002.jpg - │ │-- img_00000003.jpg - │ │-- img_00000004.jpg - │ │-- img_00000005.jpg - │ │-- ... -``` +内容建设中…… diff --git a/docs/zh_cn/user_guides/inference.md b/docs/zh_cn/user_guides/inference.md index d77ff2185c..1359be01f4 100644 --- a/docs/zh_cn/user_guides/inference.md +++ b/docs/zh_cn/user_guides/inference.md @@ -1,3 +1,210 @@ -# 模型推理 +# 使用现有模型进行推理 -中文内容建设中,暂时请查阅[英文版文档](../../en/user_guides/inference.md) +MMPose为姿态估计提供了大量可以从[模型库](https://mmpose.readthedocs.io/en/latest/model_zoo.html)中找到的预测训练模型。本指南将演示**如何执行推理**,或使用训练过的模型对提供的图像或视频运行姿态估计。 + +有关在标准数据集上测试现有模型的说明,请参阅本指南。 + +在MMPose,模型由配置文件定义,而其已计算好的参数存储在权重文件(checkpoint file)中。您可以在[模型库](https://mmpose.readthedocs.io/en/latest/model_zoo.html)中找到模型配置文件和相应的权重文件的URL。我们建议从使用HRNet模型的[配置文件](https://github.com/open-mmlab/mmpose/blob/main/configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-210e_coco-256x192.py)和[权重文件](https://download.openmmlab.com/mmpose/v1/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-210e_coco-256x192-81c58e40_20220909.pth)开始。 + +# 推理器:统一的推理接口 + +MMPose提供了一个被称为`MMPoseInferencer`的、全面的推理API。这个API使得用户得以使用所有MMPose支持的模型来对图像和视频进行模型推理。此外,该API可以完成推理结果自动化,并方便用户保存预测结果。 + +## 基本用法 + +`MMPoseInferencer`可以在任何Python程序中被用来执行姿态估计任务。以下是在一个在Python Shell中使用预训练的人体姿态模型对给定图像进行推理的示例。 + +```python +from mmpose.apis import MMPoseInferencer + +img_path = 'tests/data/coco/000000000785.jpg' # 将img_path替换给你自己的路径 + +# 使用模型别名创建推断器 +inferencer = MMPoseInferencer('human') + +# MMPoseInferencer采用了惰性推断方法,在给定输入时创建一个预测生成器 +result_generator = inferencer(img_path, show=True) +result = next(result_generator) +``` + +如果一切正常,你将在一个新窗口中看到下图: + +![inferencer_result_coco](https://user-images.githubusercontent.com/26127467/220008302-4a57fd44-0978-408e-8351-600e5513316a.jpg) + +在上述示例中,变量`result`是一个字典,包含两个键,分别是`visualization`和`predictions`。`visualization`用于存储可视化结果,但由于没有设定参数`return_vis`,因此该列表为空。但是`predictions`保存了每个检测到的实例的、估计得到的关键点列表。 + +还可以使用用于用于推断的**命令行界面工具**(CLI, command-line interface):`demo/inferencer_demo.py`。这个工具允许用户使用以下命令使用相同的模型和输入执行推理: + +```python +python demo/inferencer_demo.py 'tests/data/coco/000000000785.jpg' \ + --pose2d 'human' --show --pred-out-dir 'predictions' +``` + +预测结果将被保存在路径`predictions/000000000785.json`。作为一个API,`inferencer_demo.py`的输入参数与`MMPoseInferencer`的相同。前者能够处理一系列输入类型,包括以下内容: + +- 图像路径 + +- 视频路径 + +- 文件夹路径(这会导致该文件夹中的所有图像都被推断出来) + +- An image array (NA for CLI tool) + +- A list of image arrays (NA for CLI tool) + +- 摄像头(在这种情况下,输入参数应该设置为`webcam`或`webcam:{CAMERA_ID}`) + +## 自定义姿态估计模型 + +`MMPoseInferencer`提供了几种可用于自定义所使用的模型的方法: + +```python +# 使用模型别名构建推断器 +inferencer = MMPoseInferencer('human') + +# 使用模型配置名构建推断器 +inferencer = MMPoseInferencer('td-hm_hrnet-w32_8xb64-210e_coco-256x192') + +# 使用模型配置文件和权重文件的路径或URL构建推断器 +inferencer = MMPoseInferencer( + pose2d='configs/body_2d_keypoint/topdown_heatmap/coco/' \ + 'td-hm_hrnet-w32_8xb64-210e_coco-256x192.py', + pose2d_weights='https://download.openmmlab.com/mmpose/top_down/' \ + 'hrnet/hrnet_w32_coco_256x192-c78dce93_20200708.pth' +) +``` + +模型别名的完整列表可以在模型别名部分(Model Alias section)中找到。 + +此外,自顶向下的姿态估计器还需要一个对象检测模型。`MMPoseInferencer`能够推断用MMPose支持的数据集训练的模型的实例类型,然后构建必要的对象检测模型。用户也可以通过以下方式手动指定检测模型: + +```python +# 通过别名指定检测模型 +# 可用的别名包括“human”、“hand”、“face”、“animal”、 +# 以及mmdet中定义的任何其他别名 +inferencer = MMPoseInferencer( + # 假设姿态估计器是在自定义数据集上训练的 + pose2d='custom_human_pose_estimator.py', + pose2d_weights='custom_human_pose_estimator.pth', + det_model='human' +) + +# 使用模型配置名称指定检测模型 +inferencer = MMPoseInferencer( + pose2d='human', + det_model='yolox_l_8x8_300e_coco', + det_cat_ids=[0], # 指定'human'类的类别id +) + +# 使用模型配置文件和权重文件的路径或URL构建推断器 +inferencer = MMPoseInferencer( + pose2d='human', + det_model=f'{PATH_TO_MMDET}/configs/yolox/yolox_l_8x8_300e_coco.py', + det_weights='https://download.openmmlab.com/mmdetection/v2.0/' \ + 'yolox/yolox_l_8x8_300e_coco/' \ + 'yolox_l_8x8_300e_coco_20211126_140236-d3bd2b23.pth', + det_cat_ids=[0], # 指定'human'类的类别id +) +``` + +## 转储结果 + +在执行姿态估计推理任务之后,您可能希望保存结果以供进一步分析或处理。本节将指导您将预测的关键点和可视化结果保存到本地。 + +要将预测保存在JSON文件中,在运行`MMPoseInferencer`的实例`inferencer`时使用`pred_out_dir`参数: + +```python +result_generator = inferencer(img_path, pred_out_dir='predictions') +result = next(result_generator) +``` + +预测结果将以JSON格式保存在`predictions/`文件夹中,每个文件以相应的输入图像或视频的名称命名。 + +对于更高级的场景,还可以直接从`inferencer`返回的`result`字典中访问预测结果。其中,`predictions`包含输入图像或视频中每个单独实例的预测关键点列表。然后,您可以使用您喜欢的方法操作或存储这些结果。 + +请记住,如果你想将可视化图像和预测文件保存在一个文件夹中,你可以使用`out_dir`参数: + +```python +result_generator = inferencer(img_path, out_dir='output') +result = next(result_generator) +``` + +在这种情况下,可视化图像将保存在`output/visualization/`文件夹中,而预测将存储在`output/forecasts/`文件夹中。 + +## 可视化 + +推理器`inferencer`可以自动对输入的图像或视频进行预测。可视化结果可以显示在一个新的窗口中,并保存在本地。 + +要在新窗口中查看可视化结果,请使用以下代码: + +请注意: + +- 如果输入视频来自网络摄像头,默认情况下将在新窗口中显示可视化结果,以此让用户看到输入 + +- 如果平台上没有GUI,这个步骤可能会卡住 + +要将可视化结果保存在本地,可以像这样指定`vis_out_dir`参数: + +```python +result_generator = inferencer(img_path, vis_out_dir='vis_results') +result = next(result_generator) +``` + +输入图片或视频的可视化预测结果将保存在`vis_results/`文件夹中 + +在开头展示的滑雪图中,姿态的可视化估计结果由关键点(用实心圆描绘)和骨架(用线条表示)组成。这些视觉元素的默认大小可能不会产生令人满意的结果。用户可以使用`radius`和`thickness`参数来调整圆的大小和线的粗细,如下所示: + +```python +result_generator = inferencer(img_path, show=True, radius=4, thickness=2) +result = next(result_generator) +``` + +## 推理器参数 + +`MMPoseInferencer`提供了各种自定义姿态估计、可视化和保存预测结果的参数。下面是初始化推断器时可用的参数列表及对这些参数的描述: + +| Argument | Description | +| ---------------- | ---------------------------------------------------------- | +| `pose2d` | 指定2D姿态估计模型的模型别名、配置文件名称或配置文件路径。 | +| `pose2d_weights` | 指定2D姿态估计模型权重文件的URL或本地路径。 | +| `det_model` | 指定对象检测模型的模型别名、配置文件名或配置文件路径。 | +| `det_weights` | 指定对象检测模型权重文件的URL或本地路径。 | +| `det_cat_ids` | 指定与要检测的对象类对应的类别id列表。 | +| `device` | 执行推理的设备。如果为`None`,推理器将选择最合适的一个。 | +| `scope` | 定义模型模块的名称空间 | + +推理器设计用于处理预测的可视化和保存。下面是使用`MMPoseInferencer`执行推理时可用的参数列表: + +| Argument | Description | +| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `show` | 确定图像或视频的预测结果是否应在弹出窗口中显示。 | +| `radius` | 设置关键点半径。 | +| `thickness` | 设置骨架(线条)粗细。 | +| `return_vis` | 确定返回结果`result`中是否应包括可视化结果列表`visualization`。 | +| `vis_out_dir` | 指定保存可视化图像的文件夹路径。如果未设置,将不会保存可视化图像。 | +| `return_datasample` | 确定是否以`PoseDataSample`的形式返回预测。 | +| `pred_out_dir` | 指定保存预测结果`predictions`的文件夹路径。如果不设置,预测结果将不会被保存。 | +| `out_dir` | 如果指定了输出路径参数`out_dir`,但未设置`vis_out_dir`或`pred_out_dir`,则分别将`vis_out_dir`或`pred_out_dir`设置为`f'{out_dir}/visualization'`或` f'{out_dir}/ forecasts'`。 | + +### 模型别名 + +MMPose为常用模型提供了一组预定义的别名。在初始化`MMPoseInferencer`时,这些别名可以用作简略的表达方式,而不是指定完整的模型配置名称。下面是可用的模型别名及其对应的配置名称的列表: + +| 别名 | 配置文件名称 | 对应任务 | 姿态估计模型 | 检测模型 | +| --------- | -------------------------------------------------- | ------------------------------- | ------------- | ------------------- | +| animal | rtmpose-m_8xb64-210e_ap10k-256x256 | Animal pose estimation | RTMPose-m | RTMDet-m | +| human | rtmpose-m_8xb256-420e_aic-coco-256x192 | Human pose estimation | RTMPose-m | RTMDet-m | +| face | rtmpose-m_8xb64-60e_wflw-256x256 | Face keypoint detection | RTMPose-m | yolox-s | +| hand | rtmpose-m_8xb32-210e_coco-wholebody-hand-256x256 | Hand keypoint detection | RTMPose-m | ssdlite_mobilenetv2 | +| wholebody | rtmpose-m_8xb64-270e_coco-wholebody-256x192 | Human wholebody pose estimation | RTMPose-m | RTMDet-m | +| vitpose | td-hm_ViTPose-base-simple_8xb64-210e_coco-256x192 | Human pose estimation | ViTPose-base | RTMDet-m | +| vitpose-s | td-hm_ViTPose-small-simple_8xb64-210e_coco-256x192 | Human pose estimation | ViTPose-small | RTMDet-m | +| vitpose-b | td-hm_ViTPose-base-simple_8xb64-210e_coco-256x192 | Human pose estimation | ViTPose-base | RTMDet-m | +| vitpose-l | td-hm_ViTPose-large-simple_8xb64-210e_coco-256x192 | Human pose estimation | ViTPose-large | RTMDet-m | +| vitpose-h | td-hm_ViTPose-huge-simple_8xb64-210e_coco-256x192 | Human pose estimation | ViTPose-huge | RTMDet-m | + +此外,用户可以使用CLI工具显示所有可用的别名,使用以下命令: + +```shell +python demo/inferencer_demo.py --show-alias +``` diff --git a/mmpose/apis/inferencers/base_mmpose_inferencer.py b/mmpose/apis/inferencers/base_mmpose_inferencer.py index 167b30276a..15312c6bb7 100644 --- a/mmpose/apis/inferencers/base_mmpose_inferencer.py +++ b/mmpose/apis/inferencers/base_mmpose_inferencer.py @@ -35,7 +35,7 @@ class BaseMMPoseInferencer(BaseInferencer): """The base class for MMPose inferencers.""" - preprocess_kwargs: set = {'bbox_thr', 'nms_thr'} + preprocess_kwargs: set = {'bbox_thr', 'nms_thr', 'bboxes'} forward_kwargs: set = set() visualize_kwargs: set = { 'return_vis', @@ -220,7 +220,11 @@ def _init_pipeline(self, cfg: ConfigType) -> Callable: """ return Compose(cfg.test_dataloader.dataset.pipeline) - def preprocess(self, inputs: InputsType, batch_size: int = 1, **kwargs): + def preprocess(self, + inputs: InputsType, + batch_size: int = 1, + bboxes: Optional[List] = None, + **kwargs): """Process the inputs into a model-feedable format. Args: @@ -233,7 +237,9 @@ def preprocess(self, inputs: InputsType, batch_size: int = 1, **kwargs): """ for i, input in enumerate(inputs): - data_infos = self.preprocess_single(input, index=i, **kwargs) + bbox = bboxes[i] if bboxes is not None else [] + data_infos = self.preprocess_single( + input, index=i, bboxes=bbox, **kwargs) # only supports inference with batch size 1 yield self.collate_fn(data_infos), [input] diff --git a/mmpose/apis/inferencers/mmpose_inferencer.py b/mmpose/apis/inferencers/mmpose_inferencer.py index 845b3d066a..3d5ac222bb 100644 --- a/mmpose/apis/inferencers/mmpose_inferencer.py +++ b/mmpose/apis/inferencers/mmpose_inferencer.py @@ -55,7 +55,7 @@ class MMPoseInferencer(BaseMMPoseInferencer): config will be used. Default is None. """ - preprocess_kwargs: set = {'bbox_thr', 'nms_thr'} + preprocess_kwargs: set = {'bbox_thr', 'nms_thr', 'bboxes'} forward_kwargs: set = set() visualize_kwargs: set = { 'return_vis', diff --git a/mmpose/apis/inferencers/pose2d_inferencer.py b/mmpose/apis/inferencers/pose2d_inferencer.py index adf80543a5..b35abddb19 100644 --- a/mmpose/apis/inferencers/pose2d_inferencer.py +++ b/mmpose/apis/inferencers/pose2d_inferencer.py @@ -66,7 +66,7 @@ class Pose2DInferencer(BaseMMPoseInferencer): config will be used. Default is None. """ - preprocess_kwargs: set = {'bbox_thr', 'nms_thr'} + preprocess_kwargs: set = {'bbox_thr', 'nms_thr', 'bboxes'} forward_kwargs: set = set() visualize_kwargs: set = { 'return_vis', @@ -102,13 +102,18 @@ def __init__(self, # initialize detector for top-down models if self.cfg.data_mode == 'topdown': - if det_model != 'whole_image': + object_type = DATASETS.get(self.cfg.dataset_type).__module__.split( + 'datasets.')[-1].split('.')[0].lower() + + if det_model in ('whole_image', 'whole-image') or \ + (det_model is None and + object_type not in default_det_models): + self.detector = None + + else: det_scope = 'mmdet' if det_model is None: - det_model = DATASETS.get( - self.cfg.dataset_type).__module__.split( - 'datasets.')[-1].split('.')[0].lower() - det_info = default_det_models[det_model] + det_info = default_det_models[object_type] det_model, det_weights, det_cat_ids = det_info[ 'model'], det_info['weights'], det_info['cat_ids'] elif os.path.exists(det_model): @@ -120,15 +125,13 @@ def __init__(self, det_model, det_weights, device=device, scope=det_scope) else: raise RuntimeError( - 'MMDetection (v3.0.0 or above) is required to build ' + 'MMDetection (v3.0.0 or above) is required to build ' 'inferencers for top-down pose estimation models.') if isinstance(det_cat_ids, (tuple, list)): self.det_cat_ids = det_cat_ids else: self.det_cat_ids = (det_cat_ids, ) - else: - self.detector = None self._video_input = False @@ -136,7 +139,9 @@ def preprocess_single(self, input: InputType, index: int, bbox_thr: float = 0.3, - nms_thr: float = 0.3): + nms_thr: float = 0.3, + bboxes: Union[List[List], List[np.ndarray], + np.ndarray] = []): """Process a single input into a model-feedable format. Args: @@ -174,8 +179,6 @@ def preprocess_single(self, bboxes = bboxes[np.logical_and( label_mask, pred_instance.scores > bbox_thr)] bboxes = bboxes[nms(bboxes, nms_thr)] - else: - bboxes = [] data_infos = [] if len(bboxes) > 0: diff --git a/mmpose/datasets/datasets/fashion/__init__.py b/mmpose/datasets/datasets/fashion/__init__.py index 575d6ed4af..8be25dede3 100644 --- a/mmpose/datasets/datasets/fashion/__init__.py +++ b/mmpose/datasets/datasets/fashion/__init__.py @@ -1,4 +1,5 @@ # Copyright (c) OpenMMLab. All rights reserved. +from .deepfashion2_dataset import DeepFashion2Dataset from .deepfashion_dataset import DeepFashionDataset -__all__ = ['DeepFashionDataset'] +__all__ = ['DeepFashionDataset', 'DeepFashion2Dataset'] diff --git a/mmpose/datasets/datasets/fashion/deepfashion2_dataset.py b/mmpose/datasets/datasets/fashion/deepfashion2_dataset.py new file mode 100644 index 0000000000..c3cde9bf97 --- /dev/null +++ b/mmpose/datasets/datasets/fashion/deepfashion2_dataset.py @@ -0,0 +1,10 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from mmpose.registry import DATASETS +from ..base import BaseCocoStyleDataset + + +@DATASETS.register_module(name='DeepFashion2Dataset') +class DeepFashion2Dataset(BaseCocoStyleDataset): + """DeepFashion2 dataset for fashion landmark detection.""" + + METAINFO: dict = dict(from_file='configs/_base_/datasets/deepfashion2.py') diff --git a/model-index.yml b/model-index.yml index d5cb0e28d4..33fb73aa4a 100644 --- a/model-index.yml +++ b/model-index.yml @@ -117,3 +117,4 @@ Import: - configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/vipnas_coco-wholebody.yml - configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/vipnas_dark_coco-wholebody.yml - configs/wholebody_2d_keypoint/topdown_heatmap/coco-wholebody/cspnext_udp_coco-wholebody.yml +- configs/fashion_2d_keypoint/topdown_heatmap/deepfashion2/res50_deepfasion2.yml diff --git a/projects/yolox-pose/configs/_base_/datasets b/projects/yolox-pose/configs/_base_/datasets index 8feca66d56..bc9c713221 120000 --- a/projects/yolox-pose/configs/_base_/datasets +++ b/projects/yolox-pose/configs/_base_/datasets @@ -1 +1 @@ -../../../../configs/_base_/datasets \ No newline at end of file +../../../../configs/_base_/datasets diff --git a/projects/yolox-pose/demo b/projects/yolox-pose/demo index bf71256cd3..14e5d68e95 120000 --- a/projects/yolox-pose/demo +++ b/projects/yolox-pose/demo @@ -1 +1 @@ -../../demo \ No newline at end of file +../../demo diff --git a/projects/yolox-pose/tools b/projects/yolox-pose/tools index 31941e941d..682f2b4528 120000 --- a/projects/yolox-pose/tools +++ b/projects/yolox-pose/tools @@ -1 +1 @@ -../../tools \ No newline at end of file +../../tools diff --git a/tests/data/deepfasion2/000264.jpg b/tests/data/deepfasion2/000264.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2bf7429024c123f1bf904888ec5ec8eb915a3f6e GIT binary patch literal 69862 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 NrA0f>PL#xd|Jmd9htvQ7 literal 0 HcmV?d00001 diff --git a/tests/data/deepfasion2/deepfasion2.json b/tests/data/deepfasion2/deepfasion2.json new file mode 100644 index 0000000000..b3a25a6dca --- /dev/null +++ b/tests/data/deepfasion2/deepfasion2.json @@ -0,0 +1,2404 @@ +{ + "info": "", + "licenses": "", + "images": [ + { + "coco_url": "", + "date_captured": "", + "file_name": "000264.jpg", + "flickr_url": "", + "id": 264, + "license": 0, + "width": 750, + "height": 750 + }, + { + "coco_url": "", + "date_captured": "", + "file_name": "000265.jpg", + "flickr_url": "", + "id": 265, + "license": 0, + "width": 750, + "height": 750 + } + ], + "annotations": [ + { + "area": 402069, + "bbox": [ + 103, + 80, + 601, + 669 + ], + "category_id": 11, + "id": 429, + "pair_id": 22, + "image_id": 264, + "iscrowd": 0, + "style": 1, + "num_keypoints": 28, + "keypoints": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 417.0, + 107.0, + 1.0, + 307.0, + 87.0, + 2.0, + 349.0, + 118.0, + 2.0, + 405.0, + 131.0, + 2.0, + 461.0, + 133.0, + 2.0, + 504.0, + 116.0, + 2.0, + 242.0, + 112.0, + 2.0, + 209.0, + 208.0, + 2.0, + 182.0, + 284.0, + 2.0, + 142.0, + 331.0, + 2.0, + 121.0, + 376.0, + 2.0, + 274.0, + 440.0, + 2.0, + 277.0, + 388.0, + 2.0, + 259.0, + 345.0, + 2.0, + 263.0, + 282.0, + 1.0, + 266.0, + 222.0, + 1.0, + 258.0, + 246.0, + 2.0, + 259.0, + 318.0, + 2.0, + 249.0, + 412.0, + 1.0, + 202.0, + 579.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 566.0, + 593.0, + 2.0, + 532.0, + 435.0, + 2.0, + 527.0, + 355.0, + 2.0, + 540.0, + 289.0, + 2.0, + 542.0, + 271.0, + 2.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 573.0, + 479.0, + 2.0, + 698.0, + 403.0, + 2.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 594.0, + 151.0, + 2.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "segmentation": [ + [ + 345.05, + 120.04, + 321.68, + 101.99, + 308.4, + 87.04, + 295.88, + 91.41, + 267.98, + 97.61, + 250.24, + 109.15, + 234.6, + 130.26, + 224.23, + 161.09, + 212.72, + 198.51, + 193.23, + 252.37, + 183.68, + 279.52, + 164.61, + 297.25, + 133.78, + 341.78, + 118.78, + 373.07, + 120.42, + 381.12, + 142.25, + 390.36, + 147.3, + 396.65, + 166.82, + 412.43, + 186.56, + 425.17, + 206.63, + 432.42, + 206.48, + 422.24, + 272.85, + 442.95, + 230.31, + 484.86, + 202.28, + 579.98, + 198.77, + 649.55, + 195.22, + 697.46, + 196.55, + 740.97, + 208.78, + 750.0, + 310.72, + 749.0, + 439.41, + 749.2, + 562.85, + 749.18, + 578.32, + 739.97, + 574.34, + 685.58, + 562.73, + 564.57, + 545.52, + 474.66, + 536.85, + 436.58, + 546.89, + 450.73, + 559.79, + 470.3, + 564.49, + 478.28, + 571.67, + 479.65, + 579.75, + 484.9, + 611.0, + 467.77, + 640.13, + 458.35, + 635.77, + 445.53, + 671.39, + 430.58, + 697.71, + 414.0, + 697.93, + 397.2, + 691.25, + 349.8, + 680.6, + 307.09, + 664.02, + 293.31, + 645.57, + 286.35, + 619.11, + 282.39, + 620.03, + 237.9, + 611.34, + 191.23, + 602.52, + 164.16, + 590.09, + 149.08, + 553.5, + 136.68, + 523.0, + 129.71, + 512.15, + 122.14, + 502.99, + 116.17, + 473.33, + 129.07, + 412.19, + 129.14, + 403.58, + 124.73, + 386.42, + 126.75 + ] + ] + }, + { + "area": 288806, + "bbox": [ + 178, + 62, + 421, + 686 + ], + "category_id": 11, + "id": 430, + "pair_id": 22, + "image_id": 265, + "iscrowd": 0, + "style": 2, + "num_keypoints": 31, + "keypoints": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 361.0, + 71.0, + 1.0, + 282.0, + 74.0, + 2.0, + 316.0, + 90.0, + 2.0, + 361.0, + 96.0, + 2.0, + 406.0, + 98.0, + 2.0, + 438.0, + 77.0, + 2.0, + 231.0, + 100.0, + 2.0, + 210.0, + 184.0, + 2.0, + 200.0, + 252.0, + 2.0, + 186.0, + 297.0, + 2.0, + 178.0, + 331.0, + 2.0, + 264.0, + 361.0, + 1.0, + 275.0, + 311.0, + 1.0, + 272.0, + 269.0, + 1.0, + 268.0, + 228.0, + 1.0, + 263.0, + 188.0, + 1.0, + 247.0, + 209.0, + 2.0, + 258.0, + 265.0, + 2.0, + 273.0, + 320.0, + 2.0, + 256.0, + 517.0, + 1.0, + 273.0, + 710.0, + 2.0, + 384.0, + 731.0, + 2.0, + 506.0, + 713.0, + 2.0, + 496.0, + 510.0, + 2.0, + 453.0, + 318.0, + 2.0, + 471.0, + 268.0, + 2.0, + 477.0, + 213.0, + 2.0, + 456.0, + 181.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 508.0, + 342.0, + 2.0, + 596.0, + 267.0, + 2.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 489.0, + 75.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + "segmentation": [ + [ + 438, + 77, + 406, + 98, + 361, + 96, + 316, + 90, + 282, + 74, + 231, + 100, + 210, + 184, + 200, + 252, + 186, + 297, + 178, + 331, + 264, + 361, + 275, + 311, + 272, + 269, + 268, + 228, + 263, + 188, + 247, + 209, + 258, + 265, + 273, + 320, + 256, + 517, + 273, + 710, + 384, + 731, + 506, + 713, + 496, + 510, + 453, + 318, + 471, + 268, + 477, + 213, + 456, + 181, + 508, + 342, + 596, + 267, + 489, + 75, + 438, + 77 + ], + [ + 231, + 100, + 210, + 184, + 200, + 252, + 186, + 297, + 178, + 331, + 264, + 361, + 275, + 311, + 272, + 269, + 268, + 228, + 263, + 188, + 231, + 100 + ], + [ + 456, + 181, + 508, + 342, + 596, + 267, + 489, + 75, + 456, + 181 + ], + [ + 200, + 252, + 186, + 297, + 178, + 331, + 264, + 361, + 275, + 311, + 272, + 269, + 200, + 252 + ] + ], + "images": [ + { + "coco_url": "", + "date_captured": "", + "file_name": "000264.jpg", + "flickr_url": "", + "id": 264, + "license": 0, + "width": 750, + "height": 750 + }, + { + "coco_url": "", + "date_captured": "", + "file_name": "000265.jpg", + "flickr_url": "", + "id": 265, + "license": 0, + "width": 750, + "height": 750 + } + ] + } + ], + "categories": [ + { + "id": 11, + "name": "long_sleeved_dress", + "supercategory": "clothes", + "keypoints": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "43", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "52", + "53", + "54", + "55", + "56", + "57", + "58", + "59", + "60", + "61", + "62", + "63", + "64", + "65", + "66", + "67", + "68", + "69", + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "80", + "81", + "82", + "83", + "84", + "85", + "86", + "87", + "88", + "89", + "90", + "91", + "92", + "93", + "94", + "95", + "96", + "97", + "98", + "99", + "100", + "101", + "102", + "103", + "104", + "105", + "106", + "107", + "108", + "109", + "110", + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "122", + "123", + "124", + "125", + "126", + "127", + "128", + "129", + "130", + "131", + "132", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "148", + "149", + "150", + "151", + "152", + "153", + "154", + "155", + "156", + "157", + "158", + "159", + "160", + "161", + "162", + "163", + "164", + "165", + "166", + "167", + "168", + "169", + "170", + "171", + "172", + "173", + "174", + "175", + "176", + "177", + "178", + "179", + "180", + "181", + "182", + "183", + "184", + "185", + "186", + "187", + "188", + "189", + "190", + "191", + "192", + "193", + "194", + "195", + "196", + "197", + "198", + "199", + "200", + "201", + "202", + "203", + "204", + "205", + "206", + "207", + "208", + "209", + "210", + "211", + "212", + "213", + "214", + "215", + "216", + "217", + "218", + "219", + "220", + "221", + "222", + "223", + "224", + "225", + "226", + "227", + "228", + "229", + "230", + "231", + "232", + "233", + "234", + "235", + "236", + "237", + "238", + "239", + "240", + "241", + "242", + "243", + "244", + "245", + "246", + "247", + "248", + "249", + "250", + "251", + "252", + "253", + "254", + "255", + "256", + "257", + "258", + "259", + "260", + "261", + "262", + "263", + "264", + "265", + "266", + "267", + "268", + "269", + "270", + "271", + "272", + "273", + "274", + "275", + "276", + "277", + "278", + "279", + "280", + "281", + "282", + "283", + "284", + "285", + "286", + "287", + "288", + "289", + "290", + "291", + "292", + "293", + "294" + ], + "skeleton": [] + } + ] +} \ No newline at end of file From 4faa00484d3120a565194bd01c030b0c737123dc Mon Sep 17 00:00:00 2001 From: Peng Lu Date: Sun, 23 Apr 2023 15:43:01 +0800 Subject: [PATCH 6/6] [Enhance] Add Opencv backend support for Visualizer (#2283) --- demo/bottomup_demo.py | 47 +- demo/topdown_demo_with_mmdet.py | 63 +-- .../inferencers/base_mmpose_inferencer.py | 18 +- mmpose/visualization/__init__.py | 3 +- mmpose/visualization/fast_visualizer.py | 78 --- mmpose/visualization/local_visualizer.py | 73 +-- .../opencv_backend_visualizer.py | 444 ++++++++++++++++++ .../test_fast_visualizer.py | 71 --- 8 files changed, 515 insertions(+), 282 deletions(-) delete mode 100644 mmpose/visualization/fast_visualizer.py create mode 100644 mmpose/visualization/opencv_backend_visualizer.py delete mode 100644 tests/test_visualization/test_fast_visualizer.py diff --git a/demo/bottomup_demo.py b/demo/bottomup_demo.py index 4616f54b3e..3d6fee7a03 100644 --- a/demo/bottomup_demo.py +++ b/demo/bottomup_demo.py @@ -11,6 +11,7 @@ import numpy as np from mmpose.apis import inference_bottomup, init_model +from mmpose.registry import VISUALIZERS from mmpose.structures import split_instances @@ -128,20 +129,18 @@ def main(): device=args.device, cfg_options=cfg_options) + # build visualizer + model.cfg.visualizer.radius = args.radius + model.cfg.visualizer.line_width = args.thickness + visualizer = VISUALIZERS.build(model.cfg.visualizer) + visualizer.set_dataset_meta(model.dataset_meta) + if args.input == 'webcam': input_type = 'webcam' else: input_type = mimetypes.guess_type(args.input)[0].split('/')[0] if input_type == 'image': - # init visualizer - from mmpose.registry import VISUALIZERS - - model.cfg.visualizer.radius = args.radius - model.cfg.visualizer.line_width = args.thickness - visualizer = VISUALIZERS.build(model.cfg.visualizer) - visualizer.set_dataset_meta(model.dataset_meta) - # inference pred_instances = process_one_image( args, args.input, model, visualizer, show_interval=0) @@ -154,22 +153,6 @@ def main(): mmcv.imwrite(mmcv.rgb2bgr(img_vis), output_file) elif input_type in ['webcam', 'video']: - from mmpose.visualization import FastVisualizer - - visualizer = FastVisualizer( - model.dataset_meta, - radius=args.radius, - line_width=args.thickness, - kpt_thr=args.kpt_thr) - - if args.draw_heatmap: - # init Localvisualizer - from mmpose.registry import VISUALIZERS - - model.cfg.visualizer.radius = args.radius - model.cfg.visualizer.line_width = args.thickness - local_visualizer = VISUALIZERS.build(model.cfg.visualizer) - local_visualizer.set_dataset_meta(model.dataset_meta) if args.input == 'webcam': cap = cv2.VideoCapture(0) @@ -187,15 +170,8 @@ def main(): if not success: break - # bottom-up pose estimation - if args.draw_heatmap: - pred_instances = process_one_image(args, frame, model, - local_visualizer, 0.001) - else: - pred_instances = process_one_image(args, frame, model) - # visualization - visualizer.draw_pose(frame, pred_instances) - cv2.imshow('MMPose Demo [Press ESC to Exit]', frame) + pred_instances = process_one_image(args, frame, model, visualizer, + 0.001) if args.save_predictions: # save prediction results @@ -206,10 +182,7 @@ def main(): # output videos if output_file: - if args.draw_heatmap: - frame_vis = local_visualizer.get_image() - else: - frame_vis = frame.copy()[:, :, ::-1] + frame_vis = visualizer.get_image() if video_writer is None: fourcc = cv2.VideoWriter_fourcc(*'mp4v') diff --git a/demo/topdown_demo_with_mmdet.py b/demo/topdown_demo_with_mmdet.py index cd001e8db6..a143795693 100644 --- a/demo/topdown_demo_with_mmdet.py +++ b/demo/topdown_demo_with_mmdet.py @@ -13,6 +13,7 @@ from mmpose.apis import inference_topdown from mmpose.apis import init_model as init_pose_estimator from mmpose.evaluation.functional import nms +from mmpose.registry import VISUALIZERS from mmpose.structures import merge_data_samples, split_instances from mmpose.utils import adapt_mmdet_pipeline @@ -186,24 +187,22 @@ def main(): cfg_options=dict( model=dict(test_cfg=dict(output_heatmaps=args.draw_heatmap)))) + # build visualizer + pose_estimator.cfg.visualizer.radius = args.radius + pose_estimator.cfg.visualizer.alpha = args.alpha + pose_estimator.cfg.visualizer.line_width = args.thickness + visualizer = VISUALIZERS.build(pose_estimator.cfg.visualizer) + # the dataset_meta is loaded from the checkpoint and + # then pass to the model in init_pose_estimator + visualizer.set_dataset_meta( + pose_estimator.dataset_meta, skeleton_style=args.skeleton_style) + if args.input == 'webcam': input_type = 'webcam' else: input_type = mimetypes.guess_type(args.input)[0].split('/')[0] if input_type == 'image': - # init visualizer - from mmpose.registry import VISUALIZERS - - pose_estimator.cfg.visualizer.radius = args.radius - pose_estimator.cfg.visualizer.alpha = args.alpha - pose_estimator.cfg.visualizer.line_width = args.thickness - visualizer = VISUALIZERS.build(pose_estimator.cfg.visualizer) - - # the dataset_meta is loaded from the checkpoint and - # then pass to the model in init_pose_estimator - visualizer.set_dataset_meta( - pose_estimator.dataset_meta, skeleton_style=args.skeleton_style) # inference pred_instances = process_one_image(args, args.input, detector, @@ -218,28 +217,6 @@ def main(): mmcv.imwrite(mmcv.rgb2bgr(img_vis), output_file) elif input_type in ['webcam', 'video']: - from mmpose.visualization import FastVisualizer - - visualizer = FastVisualizer( - pose_estimator.dataset_meta, - radius=args.radius, - line_width=args.thickness, - kpt_thr=args.kpt_thr) - - if args.draw_heatmap: - # init Localvisualizer - from mmpose.registry import VISUALIZERS - - pose_estimator.cfg.visualizer.radius = args.radius - pose_estimator.cfg.visualizer.alpha = args.alpha - pose_estimator.cfg.visualizer.line_width = args.thickness - local_visualizer = VISUALIZERS.build(pose_estimator.cfg.visualizer) - - # the dataset_meta is loaded from the checkpoint and - # then pass to the model in init_pose_estimator - local_visualizer.set_dataset_meta( - pose_estimator.dataset_meta, - skeleton_style=args.skeleton_style) if args.input == 'webcam': cap = cv2.VideoCapture(0) @@ -258,16 +235,9 @@ def main(): break # topdown pose estimation - if args.draw_heatmap: - pred_instances = process_one_image(args, frame, detector, - pose_estimator, - local_visualizer, 0.001) - else: - pred_instances = process_one_image(args, frame, detector, - pose_estimator) - # visualization - visualizer.draw_pose(frame, pred_instances) - cv2.imshow('MMPose Demo [Press ESC to Exit]', frame) + pred_instances = process_one_image(args, frame, detector, + pose_estimator, visualizer, + 0.001) if args.save_predictions: # save prediction results @@ -278,10 +248,7 @@ def main(): # output videos if output_file: - if args.draw_heatmap: - frame_vis = local_visualizer.get_image() - else: - frame_vis = frame.copy()[:, :, ::-1] + frame_vis = visualizer.get_image() if video_writer is None: fourcc = cv2.VideoWriter_fourcc(*'mp4v') diff --git a/mmpose/apis/inferencers/base_mmpose_inferencer.py b/mmpose/apis/inferencers/base_mmpose_inferencer.py index 15312c6bb7..86e61463b6 100644 --- a/mmpose/apis/inferencers/base_mmpose_inferencer.py +++ b/mmpose/apis/inferencers/base_mmpose_inferencer.py @@ -159,6 +159,9 @@ def _get_webcam_inputs(self, inputs: str) -> Generator: Raises: ValueError: If the inputs string is not in the expected format. """ + assert getattr(self.visualizer, 'backend', None) == 'opencv', \ + 'Visualizer must utilize the OpenCV backend in order to ' \ + 'support webcam inputs.' # Ensure the inputs string is in the expected format. inputs = inputs.lower() @@ -187,12 +190,9 @@ def _get_webcam_inputs(self, inputs: str) -> Generator: self.video_info = dict( fps=10, name='webcam.mp4', writer=None, predictions=[]) - # Set up webcam reader generator function. - self._window_closing = False - def _webcam_reader() -> Generator: while True: - if self._window_closing: + if cv2.waitKey(5) & 0xFF == 27: vcap.release() break @@ -322,16 +322,6 @@ def visualize(self, kpt_thr=kpt_thr) results.append(visualization) - if show and not hasattr(self, '_window_close_cid'): - if window_close_event_handler is None: - window_close_event_handler = \ - self._visualization_window_on_close - self._window_close_cid = \ - self.visualizer.manager.canvas.mpl_connect( - 'close_event', - window_close_event_handler - ) - if vis_out_dir: out_img = mmcv.rgb2bgr(visualization) diff --git a/mmpose/visualization/__init__.py b/mmpose/visualization/__init__.py index 73fbd645a9..357d40a707 100644 --- a/mmpose/visualization/__init__.py +++ b/mmpose/visualization/__init__.py @@ -1,5 +1,4 @@ # Copyright (c) OpenMMLab. All rights reserved. -from .fast_visualizer import FastVisualizer from .local_visualizer import PoseLocalVisualizer -__all__ = ['PoseLocalVisualizer', 'FastVisualizer'] +__all__ = ['PoseLocalVisualizer'] diff --git a/mmpose/visualization/fast_visualizer.py b/mmpose/visualization/fast_visualizer.py deleted file mode 100644 index fa0cb38527..0000000000 --- a/mmpose/visualization/fast_visualizer.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -import cv2 - - -class FastVisualizer: - """MMPose Fast Visualizer. - - A simple yet fast visualizer for video/webcam inference. - - Args: - metainfo (dict): pose meta information - radius (int, optional)): Keypoint radius for visualization. - Defaults to 6. - line_width (int, optional): Link width for visualization. - Defaults to 3. - kpt_thr (float, optional): Threshold for keypoints' confidence score, - keypoints with score below this value will not be drawn. - Defaults to 0.3. - """ - - def __init__(self, metainfo, radius=6, line_width=3, kpt_thr=0.3): - self.radius = radius - self.line_width = line_width - self.kpt_thr = kpt_thr - - self.keypoint_id2name = metainfo['keypoint_id2name'] - self.keypoint_name2id = metainfo['keypoint_name2id'] - self.keypoint_colors = metainfo['keypoint_colors'] - self.skeleton_links = metainfo['skeleton_links'] - self.skeleton_link_colors = metainfo['skeleton_link_colors'] - - def draw_pose(self, img, instances): - """Draw pose estimations on the given image. - - This method draws keypoints and skeleton links on the input image - using the provided instances. - - Args: - img (numpy.ndarray): The input image on which to - draw the pose estimations. - instances (object): An object containing detected instances' - information, including keypoints and keypoint_scores. - - Returns: - None: The input image will be modified in place. - """ - - if instances is None: - print('no instance detected') - return - - keypoints = instances.keypoints - scores = instances.keypoint_scores - - for kpts, score in zip(keypoints, scores): - for sk_id, sk in enumerate(self.skeleton_links): - if score[sk[0]] < self.kpt_thr or score[sk[1]] < self.kpt_thr: - # skip the link that should not be drawn - continue - - pos1 = (int(kpts[sk[0], 0]), int(kpts[sk[0], 1])) - pos2 = (int(kpts[sk[1], 0]), int(kpts[sk[1], 1])) - - color = self.skeleton_link_colors[sk_id].tolist() - cv2.line(img, pos1, pos2, color, thickness=self.line_width) - - for kid, kpt in enumerate(kpts): - if score[kid] < self.kpt_thr: - # skip the point that should not be drawn - continue - - x_coord, y_coord = int(kpt[0]), int(kpt[1]) - - color = self.keypoint_colors[kid].tolist() - cv2.circle(img, (int(x_coord), int(y_coord)), self.radius, - color, -1) - cv2.circle(img, (int(x_coord), int(y_coord)), self.radius, - (255, 255, 255)) diff --git a/mmpose/visualization/local_visualizer.py b/mmpose/visualization/local_visualizer.py index b19e89dea6..205993c006 100644 --- a/mmpose/visualization/local_visualizer.py +++ b/mmpose/visualization/local_visualizer.py @@ -8,11 +8,11 @@ import torch from mmengine.dist import master_only from mmengine.structures import InstanceData, PixelData -from mmengine.visualization import Visualizer from mmpose.datasets.datasets.utils import parse_pose_metainfo from mmpose.registry import VISUALIZERS from mmpose.structures import PoseDataSample +from .opencv_backend_visualizer import OpencvBackendVisualizer from .simcc_vis import SimCCVisualizer @@ -42,7 +42,7 @@ def _get_adaptive_scales(areas: np.ndarray, @VISUALIZERS.register_module() -class PoseLocalVisualizer(Visualizer): +class PoseLocalVisualizer(OpencvBackendVisualizer): """MMPose Local Visualizer. Args: @@ -115,8 +115,15 @@ def __init__(self, line_width: Union[int, float] = 1, radius: Union[int, float] = 3, show_keypoint_weight: bool = False, + backend: str = 'opencv', alpha: float = 0.8): - super().__init__(name, image, vis_backends, save_dir) + super().__init__( + name=name, + image=image, + vis_backends=vis_backends, + save_dir=save_dir, + backend=backend) + self.bbox_color = bbox_color self.kpt_color = kpt_color self.link_color = link_color @@ -297,35 +304,6 @@ def _draw_instances_kpts(self, f'({len(self.kpt_color)}) does not matches ' f'that of keypoints ({len(kpts)})') - # draw each point on image - for kid, kpt in enumerate(kpts): - if score[kid] < kpt_thr or not visible[ - kid] or kpt_color[kid] is None: - # skip the point that should not be drawn - continue - - color = kpt_color[kid] - if not isinstance(color, str): - color = tuple(int(c) for c in color) - transparency = self.alpha - if self.show_keypoint_weight: - transparency *= max(0, min(1, score[kid])) - self.draw_circles( - kpt, - radius=np.array([self.radius]), - face_colors=color, - edge_colors=color, - alpha=transparency, - line_widths=self.radius) - if show_kpt_idx: - self.draw_texts( - str(kid), - kpt, - colors=color, - font_sizes=self.radius * 3, - vertical_alignments='bottom', - horizontal_alignments='center') - # draw links if self.skeleton is not None and self.link_color is not None: if self.link_color is None or isinstance( @@ -385,6 +363,37 @@ def _draw_instances_kpts(self, self.draw_lines( X, Y, color, line_widths=self.line_width) + # draw each point on image + for kid, kpt in enumerate(kpts): + if score[kid] < kpt_thr or not visible[ + kid] or kpt_color[kid] is None: + # skip the point that should not be drawn + continue + + color = kpt_color[kid] + if not isinstance(color, str): + color = tuple(int(c) for c in color) + transparency = self.alpha + if self.show_keypoint_weight: + transparency *= max(0, min(1, score[kid])) + self.draw_circles( + kpt, + radius=np.array([self.radius]), + face_colors=color, + edge_colors=color, + alpha=transparency, + line_widths=self.radius) + if show_kpt_idx: + kpt[0] += self.radius + kpt[1] -= self.radius + self.draw_texts( + str(kid), + kpt, + colors=color, + font_sizes=self.radius * 3, + vertical_alignments='bottom', + horizontal_alignments='center') + return self.get_image() def _draw_instance_heatmap( diff --git a/mmpose/visualization/opencv_backend_visualizer.py b/mmpose/visualization/opencv_backend_visualizer.py new file mode 100644 index 0000000000..66a7731c76 --- /dev/null +++ b/mmpose/visualization/opencv_backend_visualizer.py @@ -0,0 +1,444 @@ +# Copyright (c) OpenMMLab. All rights reserved. +from typing import List, Optional, Union + +import cv2 +import mmcv +import numpy as np +import torch +from mmengine.dist import master_only +from mmengine.visualization import Visualizer + + +class OpencvBackendVisualizer(Visualizer): + """Base visualizer with opencv backend support. + + Args: + name (str): Name of the instance. Defaults to 'visualizer'. + image (np.ndarray, optional): the origin image to draw. The format + should be RGB. Defaults to None. + vis_backends (list, optional): Visual backend config list. + Defaults to None. + save_dir (str, optional): Save file dir for all storage backends. + If it is None, the backend storage will not save any data. + fig_save_cfg (dict): Keyword parameters of figure for saving. + Defaults to empty dict. + fig_show_cfg (dict): Keyword parameters of figure for showing. + Defaults to empty dict. + backend (str): Backend used to draw elements on the image and display + the image. Defaults to 'matplotlib'. + """ + + def __init__(self, + name='visualizer', + backend: str = 'matplotlib', + *args, + **kwargs): + super().__init__(name, *args, **kwargs) + assert backend in ('opencv', 'matplotlib'), f'the argument ' \ + f'\'backend\' must be either \'opencv\' or \'matplotlib\', ' \ + f'but got \'{backend}\'.' + self.backend = backend + + @master_only + def set_image(self, image: np.ndarray) -> None: + """Set the image to draw. + + Args: + image (np.ndarray): The image to draw. + backend (str): The backend to save the image. + """ + assert image is not None + image = image.astype('uint8') + self._image = image + self.width, self.height = image.shape[1], image.shape[0] + self._default_font_size = max( + np.sqrt(self.height * self.width) // 90, 10) + + if self.backend == 'matplotlib': + # add a small 1e-2 to avoid precision lost due to matplotlib's + # truncation (https://github.com/matplotlib/matplotlib/issues/15363) # noqa + self.fig_save.set_size_inches( # type: ignore + (self.width + 1e-2) / self.dpi, + (self.height + 1e-2) / self.dpi) + # self.canvas = mpl.backends.backend_cairo.FigureCanvasCairo(fig) + self.ax_save.cla() + self.ax_save.axis(False) + self.ax_save.imshow( + image, + extent=(0, self.width, self.height, 0), + interpolation='none') + + @master_only + def get_image(self) -> np.ndarray: + """Get the drawn image. The format is RGB. + + Returns: + np.ndarray: the drawn image which channel is RGB. + """ + assert self._image is not None, 'Please set image using `set_image`' + if self.backend == 'matplotlib': + return super().get_image() + else: + return self._image + + @master_only + def draw_circles(self, + center: Union[np.ndarray, torch.Tensor], + radius: Union[np.ndarray, torch.Tensor], + face_colors: Union[str, tuple, List[str], + List[tuple]] = 'none', + **kwargs) -> 'Visualizer': + """Draw single or multiple circles. + + Args: + center (Union[np.ndarray, torch.Tensor]): The x coordinate of + each line' start and end points. + radius (Union[np.ndarray, torch.Tensor]): The y coordinate of + each line' start and end points. + edge_colors (Union[str, tuple, List[str], List[tuple]]): The + colors of circles. ``colors`` can have the same length with + lines or just single value. If ``colors`` is single value, + all the lines will have the same colors. Reference to + https://matplotlib.org/stable/gallery/color/named_colors.html + for more details. Defaults to 'g. + line_styles (Union[str, List[str]]): The linestyle + of lines. ``line_styles`` can have the same length with + texts or just single value. If ``line_styles`` is single + value, all the lines will have the same linestyle. + Reference to + https://matplotlib.org/stable/api/collections_api.html?highlight=collection#matplotlib.collections.AsteriskPolygonCollection.set_linestyle + for more details. Defaults to '-'. + line_widths (Union[Union[int, float], List[Union[int, float]]]): + The linewidth of lines. ``line_widths`` can have + the same length with lines or just single value. + If ``line_widths`` is single value, all the lines will + have the same linewidth. Defaults to 2. + face_colors (Union[str, tuple, List[str], List[tuple]]): + The face colors. Defaults to None. + alpha (Union[int, float]): The transparency of circles. + Defaults to 0.8. + """ + if self.backend == 'matplotlib': + super().draw_circles( + center=center, + radius=radius, + face_colors=face_colors, + **kwargs) + elif self.backend == 'opencv': + if isinstance(face_colors, str): + face_colors = mmcv.color_val(face_colors) + self._image = cv2.circle(self._image, + (int(center[0]), int(center[1])), + int(radius), face_colors, -1) + else: + raise ValueError(f'got unsupported backend {self.backend}') + + @master_only + def draw_texts( + self, + texts: Union[str, List[str]], + positions: Union[np.ndarray, torch.Tensor], + font_sizes: Optional[Union[int, List[int]]] = None, + colors: Union[str, tuple, List[str], List[tuple]] = 'g', + vertical_alignments: Union[str, List[str]] = 'top', + horizontal_alignments: Union[str, List[str]] = 'left', + bboxes: Optional[Union[dict, List[dict]]] = None, + **kwargs, + ) -> 'Visualizer': + """Draw single or multiple text boxes. + + Args: + texts (Union[str, List[str]]): Texts to draw. + positions (Union[np.ndarray, torch.Tensor]): The position to draw + the texts, which should have the same length with texts and + each dim contain x and y. + font_sizes (Union[int, List[int]], optional): The font size of + texts. ``font_sizes`` can have the same length with texts or + just single value. If ``font_sizes`` is single value, all the + texts will have the same font size. Defaults to None. + colors (Union[str, tuple, List[str], List[tuple]]): The colors + of texts. ``colors`` can have the same length with texts or + just single value. If ``colors`` is single value, all the + texts will have the same colors. Reference to + https://matplotlib.org/stable/gallery/color/named_colors.html + for more details. Defaults to 'g. + vertical_alignments (Union[str, List[str]]): The verticalalignment + of texts. verticalalignment controls whether the y positional + argument for the text indicates the bottom, center or top side + of the text bounding box. + ``vertical_alignments`` can have the same length with + texts or just single value. If ``vertical_alignments`` is + single value, all the texts will have the same + verticalalignment. verticalalignment can be 'center' or + 'top', 'bottom' or 'baseline'. Defaults to 'top'. + horizontal_alignments (Union[str, List[str]]): The + horizontalalignment of texts. Horizontalalignment controls + whether the x positional argument for the text indicates the + left, center or right side of the text bounding box. + ``horizontal_alignments`` can have + the same length with texts or just single value. + If ``horizontal_alignments`` is single value, all the texts + will have the same horizontalalignment. Horizontalalignment + can be 'center','right' or 'left'. Defaults to 'left'. + font_families (Union[str, List[str]]): The font family of + texts. ``font_families`` can have the same length with texts or + just single value. If ``font_families`` is single value, all + the texts will have the same font family. + font_familiy can be 'serif', 'sans-serif', 'cursive', 'fantasy' + or 'monospace'. Defaults to 'sans-serif'. + bboxes (Union[dict, List[dict]], optional): The bounding box of the + texts. If bboxes is None, there are no bounding box around + texts. ``bboxes`` can have the same length with texts or + just single value. If ``bboxes`` is single value, all + the texts will have the same bbox. Reference to + https://matplotlib.org/stable/api/_as_gen/matplotlib.patches.FancyBboxPatch.html#matplotlib.patches.FancyBboxPatch + for more details. Defaults to None. + font_properties (Union[FontProperties, List[FontProperties]], optional): + The font properties of texts. FontProperties is + a ``font_manager.FontProperties()`` object. + If you want to draw Chinese texts, you need to prepare + a font file that can show Chinese characters properly. + For example: `simhei.ttf`, `simsun.ttc`, `simkai.ttf` and so on. + Then set ``font_properties=matplotlib.font_manager.FontProperties(fname='path/to/font_file')`` + ``font_properties`` can have the same length with texts or + just single value. If ``font_properties`` is single value, + all the texts will have the same font properties. + Defaults to None. + `New in version 0.6.0.` + """ # noqa: E501 + + if self.backend == 'matplotlib': + super().draw_texts( + texts=texts, + positions=positions, + font_sizes=font_sizes, + colors=colors, + vertical_alignments=vertical_alignments, + horizontal_alignments=horizontal_alignments, + bboxes=bboxes, + **kwargs) + + elif self.backend == 'opencv': + font_scale = max(0.1, font_sizes / 30) + thickness = max(1, font_sizes // 15) + + text_size, text_baseline = cv2.getTextSize(texts, + cv2.FONT_HERSHEY_DUPLEX, + font_scale, thickness) + + x = int(positions[0]) + if horizontal_alignments == 'right': + x = max(0, x - text_size[0]) + y = int(positions[1]) + if vertical_alignments == 'top': + y = min(self.height, y + text_size[1]) + + if bboxes is not None: + bbox_color = bboxes[0]['facecolor'] + if isinstance(bbox_color, str): + bbox_color = mmcv.color_val(bbox_color) + + y = y - text_baseline // 2 + self._image = cv2.rectangle( + self._image, (x, y - text_size[1] - text_baseline // 2), + (x + text_size[0], y + text_baseline // 2), bbox_color, + cv2.FILLED) + + self._image = cv2.putText(self._image, texts, (x, y), + cv2.FONT_HERSHEY_SIMPLEX, font_scale, + colors, thickness - 1) + else: + raise ValueError(f'got unsupported backend {self.backend}') + + @master_only + def draw_bboxes(self, + bboxes: Union[np.ndarray, torch.Tensor], + edge_colors: Union[str, tuple, List[str], + List[tuple]] = 'g', + line_widths: Union[Union[int, float], + List[Union[int, float]]] = 2, + **kwargs) -> 'Visualizer': + """Draw single or multiple bboxes. + + Args: + bboxes (Union[np.ndarray, torch.Tensor]): The bboxes to draw with + the format of(x1,y1,x2,y2). + edge_colors (Union[str, tuple, List[str], List[tuple]]): The + colors of bboxes. ``colors`` can have the same length with + lines or just single value. If ``colors`` is single value, all + the lines will have the same colors. Refer to `matplotlib. + colors` for full list of formats that are accepted. + Defaults to 'g'. + line_styles (Union[str, List[str]]): The linestyle + of lines. ``line_styles`` can have the same length with + texts or just single value. If ``line_styles`` is single + value, all the lines will have the same linestyle. + Reference to + https://matplotlib.org/stable/api/collections_api.html?highlight=collection#matplotlib.collections.AsteriskPolygonCollection.set_linestyle + for more details. Defaults to '-'. + line_widths (Union[Union[int, float], List[Union[int, float]]]): + The linewidth of lines. ``line_widths`` can have + the same length with lines or just single value. + If ``line_widths`` is single value, all the lines will + have the same linewidth. Defaults to 2. + face_colors (Union[str, tuple, List[str], List[tuple]]): + The face colors. Defaults to None. + alpha (Union[int, float]): The transparency of bboxes. + Defaults to 0.8. + """ + if self.backend == 'matplotlib': + super().draw_bboxes( + bboxes=bboxes, + edge_colors=edge_colors, + line_widths=line_widths, + **kwargs) + + elif self.backend == 'opencv': + self._image = mmcv.imshow_bboxes( + self._image, + bboxes, + edge_colors, + top_k=-1, + thickness=line_widths, + show=False) + else: + raise ValueError(f'got unsupported backend {self.backend}') + + @master_only + def draw_lines(self, + x_datas: Union[np.ndarray, torch.Tensor], + y_datas: Union[np.ndarray, torch.Tensor], + colors: Union[str, tuple, List[str], List[tuple]] = 'g', + line_widths: Union[Union[int, float], + List[Union[int, float]]] = 2, + **kwargs) -> 'Visualizer': + """Draw single or multiple line segments. + + Args: + x_datas (Union[np.ndarray, torch.Tensor]): The x coordinate of + each line' start and end points. + y_datas (Union[np.ndarray, torch.Tensor]): The y coordinate of + each line' start and end points. + colors (Union[str, tuple, List[str], List[tuple]]): The colors of + lines. ``colors`` can have the same length with lines or just + single value. If ``colors`` is single value, all the lines + will have the same colors. Reference to + https://matplotlib.org/stable/gallery/color/named_colors.html + for more details. Defaults to 'g'. + line_styles (Union[str, List[str]]): The linestyle + of lines. ``line_styles`` can have the same length with + texts or just single value. If ``line_styles`` is single + value, all the lines will have the same linestyle. + Reference to + https://matplotlib.org/stable/api/collections_api.html?highlight=collection#matplotlib.collections.AsteriskPolygonCollection.set_linestyle + for more details. Defaults to '-'. + line_widths (Union[Union[int, float], List[Union[int, float]]]): + The linewidth of lines. ``line_widths`` can have + the same length with lines or just single value. + If ``line_widths`` is single value, all the lines will + have the same linewidth. Defaults to 2. + """ + if self.backend == 'matplotlib': + super().draw_lines( + x_datas=x_datas, + y_datas=y_datas, + colors=colors, + line_widths=line_widths, + **kwargs) + + elif self.backend == 'opencv': + + self._image = cv2.line( + self._image, (x_datas[0], y_datas[0]), + (x_datas[1], y_datas[1]), + colors, + thickness=line_widths) + else: + raise ValueError(f'got unsupported backend {self.backend}') + + @master_only + def draw_polygons(self, + polygons: Union[Union[np.ndarray, torch.Tensor], + List[Union[np.ndarray, torch.Tensor]]], + edge_colors: Union[str, tuple, List[str], + List[tuple]] = 'g', + **kwargs) -> 'Visualizer': + """Draw single or multiple bboxes. + + Args: + polygons (Union[Union[np.ndarray, torch.Tensor],\ + List[Union[np.ndarray, torch.Tensor]]]): The polygons to draw + with the format of (x1,y1,x2,y2,...,xn,yn). + edge_colors (Union[str, tuple, List[str], List[tuple]]): The + colors of polygons. ``colors`` can have the same length with + lines or just single value. If ``colors`` is single value, + all the lines will have the same colors. Refer to + `matplotlib.colors` for full list of formats that are accepted. + Defaults to 'g. + line_styles (Union[str, List[str]]): The linestyle + of lines. ``line_styles`` can have the same length with + texts or just single value. If ``line_styles`` is single + value, all the lines will have the same linestyle. + Reference to + https://matplotlib.org/stable/api/collections_api.html?highlight=collection#matplotlib.collections.AsteriskPolygonCollection.set_linestyle + for more details. Defaults to '-'. + line_widths (Union[Union[int, float], List[Union[int, float]]]): + The linewidth of lines. ``line_widths`` can have + the same length with lines or just single value. + If ``line_widths`` is single value, all the lines will + have the same linewidth. Defaults to 2. + face_colors (Union[str, tuple, List[str], List[tuple]]): + The face colors. Defaults to None. + alpha (Union[int, float]): The transparency of polygons. + Defaults to 0.8. + """ + if self.backend == 'matplotlib': + super().draw_polygons( + polygons=polygons, edge_colors=edge_colors, **kwargs) + + elif self.backend == 'opencv': + + self._image = cv2.fillConvexPoly(self._image, polygons, + edge_colors) + else: + raise ValueError(f'got unsupported backend {self.backend}') + + @master_only + def show(self, + drawn_img: Optional[np.ndarray] = None, + win_name: str = 'image', + wait_time: float = 0., + continue_key=' ') -> None: + """Show the drawn image. + + Args: + drawn_img (np.ndarray, optional): The image to show. If drawn_img + is None, it will show the image got by Visualizer. Defaults + to None. + win_name (str): The image title. Defaults to 'image'. + wait_time (float): Delay in seconds. 0 is the special + value that means "forever". Defaults to 0. + continue_key (str): The key for users to continue. Defaults to + the space key. + """ + if self.backend == 'matplotlib': + super().show( + drawn_img=drawn_img, + win_name=win_name, + wait_time=wait_time, + continue_key=continue_key) + + elif self.backend == 'opencv': + # Keep images are shown in the same window, and the title of window + # will be updated with `win_name`. + if not hasattr(self, win_name): + self._cv_win_name = win_name + cv2.namedWindow(winname=f'{id(self)}') + cv2.setWindowTitle(f'{id(self)}', win_name) + else: + cv2.setWindowTitle(f'{id(self)}', win_name) + shown_img = self.get_image() if drawn_img is None else drawn_img + cv2.imshow(str(id(self)), mmcv.bgr2rgb(shown_img)) + cv2.waitKey(int(np.ceil(wait_time * 1000))) + else: + raise ValueError(f'got unsupported backend {self.backend}') diff --git a/tests/test_visualization/test_fast_visualizer.py b/tests/test_visualization/test_fast_visualizer.py deleted file mode 100644 index f4a24ca1f9..0000000000 --- a/tests/test_visualization/test_fast_visualizer.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (c) OpenMMLab. All rights reserved. -from unittest import TestCase - -import numpy as np - -from mmpose.visualization import FastVisualizer - - -class TestFastVisualizer(TestCase): - - def setUp(self): - self.metainfo = { - 'keypoint_id2name': { - 0: 'nose', - 1: 'left_eye', - 2: 'right_eye' - }, - 'keypoint_name2id': { - 'nose': 0, - 'left_eye': 1, - 'right_eye': 2 - }, - 'keypoint_colors': np.array([[255, 0, 0], [0, 255, 0], [0, 0, - 255]]), - 'skeleton_links': [(0, 1), (1, 2)], - 'skeleton_link_colors': np.array([[255, 255, 0], [255, 0, 255]]) - } - self.visualizer = FastVisualizer(self.metainfo) - - def test_init(self): - self.assertEqual(self.visualizer.radius, 6) - self.assertEqual(self.visualizer.line_width, 3) - self.assertEqual(self.visualizer.kpt_thr, 0.3) - self.assertEqual(self.visualizer.keypoint_id2name, - self.metainfo['keypoint_id2name']) - self.assertEqual(self.visualizer.keypoint_name2id, - self.metainfo['keypoint_name2id']) - np.testing.assert_array_equal(self.visualizer.keypoint_colors, - self.metainfo['keypoint_colors']) - self.assertEqual(self.visualizer.skeleton_links, - self.metainfo['skeleton_links']) - np.testing.assert_array_equal(self.visualizer.skeleton_link_colors, - self.metainfo['skeleton_link_colors']) - - def test_draw_pose(self): - img = np.zeros((480, 640, 3), dtype=np.uint8) - instances = type('Instances', (object, ), {})() - instances.keypoints = np.array([[[100, 100], [200, 200], [300, 300]]], - dtype=np.float32) - instances.keypoint_scores = np.array([[0.5, 0.5, 0.5]], - dtype=np.float32) - - self.visualizer.draw_pose(img, instances) - - # Check if keypoints are drawn - self.assertNotEqual(img[100, 100].tolist(), [0, 0, 0]) - self.assertNotEqual(img[200, 200].tolist(), [0, 0, 0]) - self.assertNotEqual(img[300, 300].tolist(), [0, 0, 0]) - - # Check if skeleton links are drawn - self.assertNotEqual(img[150, 150].tolist(), [0, 0, 0]) - self.assertNotEqual(img[250, 250].tolist(), [0, 0, 0]) - - def test_draw_pose_with_none_instances(self): - img = np.zeros((480, 640, 3), dtype=np.uint8) - instances = None - - self.visualizer.draw_pose(img, instances) - - # Check if the image is still empty (black) - self.assertEqual(np.count_nonzero(img), 0)