From 5408bc76f5b848cf925a0d1857899011d8c5b497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=98=95=E8=BE=B0?= Date: Fri, 12 Jul 2024 19:27:25 +0800 Subject: [PATCH] bumpv1.3.2 (#3077) * add update info * --update=add unittest data --- README.md | 8 +++-- README_CN.md | 7 ++-- docker/serve/Dockerfile | 2 +- docs/en/faq.md | 1 + docs/en/notes/changelog.md | 37 +++++++++++++++++++++ docs/zh_cn/faq.md | 1 + mmpose/version.py | 2 +- tests/data/h3wb/h3wb_train_bbox_subset.npz | Bin 0 -> 10627 bytes 8 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 tests/data/h3wb/h3wb_train_bbox_subset.npz diff --git a/README.md b/README.md index a45e03ec9f..0f4baa2335 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,8 @@ https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb- ## What's New +- Release [RTMW3D](/projects/rtmpose3d), a real-time model for 3D wholebody pose estimation. + - Release [RTMO](/projects/rtmo), a state-of-the-art real-time method for multi-person pose estimation. ![rtmo](https://github.com/open-mmlab/mmpose/assets/26127467/54d5555a-23e5-4308-89d1-f0c82a6734c2) @@ -106,10 +108,9 @@ https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb- - Support inference of [PoseAnything](/projects/pose_anything). Web demo is available [here](https://openxlab.org.cn/apps/detail/orhir/Pose-Anything). -- Support for two new datasets: +- Support for new datasets: - - (CVPR 2023) [ExLPose](https://mmpose.readthedocs.io/en/latest/dataset_zoo/2d_body_keypoint.html#exlpose-dataset) - - (ICCV 2023) [H3WB](/docs/en/dataset_zoo/3d_wholebody_keypoint.md) + - (ICCV 2015) [300VW](/docs/en/dataset_zoo/2d_face_keypoint.md) - Welcome to use the [*MMPose project*](/projects/README.md). Here, you can discover the latest features and algorithms in MMPose and quickly share your ideas and code implementations with the community. Adding new features to MMPose has become smoother: @@ -119,6 +120,7 @@ https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb- - Newly added projects include: - [RTMPose](/projects/rtmpose/) - [RTMO](/projects/rtmo/) + - [RTMPose3D](/projects/rtmpose3d/) - [PoseAnything](/projects/pose_anything/) - [YOLOX-Pose](/projects/yolox_pose/) - [MMPose4AIGC](/projects/mmpose4aigc/) diff --git a/README_CN.md b/README_CN.md index 3acb01abca..578f8d47f8 100644 --- a/README_CN.md +++ b/README_CN.md @@ -96,6 +96,8 @@ https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb- ## 最新进展 +- 发布了 [RTMW3D](/projects/rtmpose3d/), 一个 3D 全身姿态估计的实时模型。 + - 发布了单阶段实时多人姿态估计模型 [RTMO](/projects/rtmo)。相比 RTMPose 在多人场景下性能更优 ![rtmo](https://github.com/open-mmlab/mmpose/assets/26127467/54d5555a-23e5-4308-89d1-f0c82a6734c2) @@ -104,10 +106,9 @@ https://user-images.githubusercontent.com/15977946/124654387-0fd3c500-ded1-11eb- - 支持了 [PoseAnything](/projects/pose_anything) 的推理。[在线试玩](https://openxlab.org.cn/apps/detail/orhir/Pose-Anything) -- 我们支持了两个新的数据集: +- 我们支持了新的数据集: - - (CVPR 2023) [ExLPose](https://mmpose.readthedocs.io/en/latest/dataset_zoo/2d_body_keypoint.html#exlpose-dataset) - - (ICCV 2023) [H3WB](/docs/en/dataset_zoo/3d_wholebody_keypoint.md) + - (ICCV 2015) [300VW](/docs/en/dataset_zoo/2d_face_keypoint.md) - 欢迎使用 [*MMPose 项目*](/projects/README.md)。在这里,您可以发现 MMPose 中的最新功能和算法,并且可以通过最快的方式与社区分享自己的创意和代码实现。向 MMPose 中添加新功能从此变得简单丝滑: diff --git a/docker/serve/Dockerfile b/docker/serve/Dockerfile index 091599b51a..367b02f0ff 100644 --- a/docker/serve/Dockerfile +++ b/docker/serve/Dockerfile @@ -4,7 +4,7 @@ ARG CUDNN="7" FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel ARG MMCV="2.0.0rc4" -ARG MMPOSE="1.0.0rc1" +ARG MMPOSE="1.3.2" ENV PYTHONUNBUFFERED TRUE diff --git a/docs/en/faq.md b/docs/en/faq.md index 94f6f6d4a5..335beb421b 100644 --- a/docs/en/faq.md +++ b/docs/en/faq.md @@ -19,6 +19,7 @@ Detailed compatible MMPose and MMCV versions are shown as below. Please choose t | MMPose version | MMCV/MMEngine version | | :------------: | :-----------------------------: | +| 1.3.2 | mmcv>=2.0.1, mmengine>=0.9.0 | | 1.3.1 | mmcv>=2.0.1, mmengine>=0.9.0 | | 1.3.0 | mmcv>=2.0.1, mmengine>=0.9.0 | | 1.2.0 | mmcv>=2.0.1, mmengine>=0.8.0 | diff --git a/docs/en/notes/changelog.md b/docs/en/notes/changelog.md index 27f46047e2..1747095b80 100644 --- a/docs/en/notes/changelog.md +++ b/docs/en/notes/changelog.md @@ -1,5 +1,42 @@ # Changelog +## **v1.3.2 (12/07/2024)** + +**New Features** + +- Add center alignments for draw_texts in OpencvBackendVisualizer ([#2958](https://github.com/open-mmlab/mmpose/pull/2958)) +- Add wflw2coco script ([#2961](https://github.com/open-mmlab/mmpose/pull/2961)) +- Support 300VW Dataset ([#3005](https://github.com/open-mmlab/mmpose/pull/3005)) +- Add RTMW3D for 3D wholebody pose estimation task ([#3037](https://github.com/open-mmlab/mmpose/pull/3037)) + +**Improvements** + +- In browse dataset : CombinedDataset element are now browse in turn, and image saved into their dataset name folder ([#2985](https://github.com/open-mmlab/mmpose/pull/2985)) + +**Bug Fixes** + +- Fix loss computation in MSPNHead ([#2993](https://github.com/open-mmlab/mmpose/pull/2993)) +- Fix bug in inferencer ([#2966](https://github.com/open-mmlab/mmpose/pull/2966)) +- Make category_id in CocoWholeBodyDataset as numpy.array ([#2963](https://github.com/open-mmlab/mmpose/pull/2963)) + +**Documentation** + +- Add rtmlib examples ([#2923](https://github.com/open-mmlab/mmpose/pull/2923)) +- Fix readthedocs configuration ([#2979](https://github.com/open-mmlab/mmpose/pull/2979)) +- Add more detailed comments ([#2982](https://github.com/open-mmlab/mmpose/pull/2982)) +- Improve documentation folder structure of ExLPose ([#2977](https://github.com/open-mmlab/mmpose/pull/2977)) + +**New Contributors** + +- @AntDum made their first contribution in https://github.com/open-mmlab/mmpose/pull/2958 +- @Yanyirong made their first contribution in https://github.com/open-mmlab/mmpose/pull/2961 +- @drazicmartin made their first contribution in https://github.com/open-mmlab/mmpose/pull/2977 +- @KeqiangSun made their first contribution in https://github.com/open-mmlab/mmpose/pull/3005 +- @jitrc made their first contribution in https://github.com/open-mmlab/mmpose/pull/3004 +- @zgjja made their first contribution in https://github.com/open-mmlab/mmpose/pull/2963 +- @jibranbinsaleem made their first contribution in https://github.com/open-mmlab/mmpose/pull/3027 +- @cpunion made their first contribution in https://github.com/open-mmlab/mmpose/pull/3026 + ## **v1.3.1 (11/01/2024)** Fix the bug when downloading config and checkpoint using `mim` (see [Issue #2918](https://github.com/open-mmlab/mmpose/issues/2918)). diff --git a/docs/zh_cn/faq.md b/docs/zh_cn/faq.md index 2a62ecf6cb..61b7ffcea3 100644 --- a/docs/zh_cn/faq.md +++ b/docs/zh_cn/faq.md @@ -19,6 +19,7 @@ Detailed compatible MMPose and MMCV versions are shown as below. Please choose t | MMPose version | MMCV/MMEngine version | | :------------: | :-----------------------------: | +| 1.3.2 | mmcv>=2.0.1, mmengine>=0.9.0 | | 1.3.1 | mmcv>=2.0.1, mmengine>=0.9.0 | | 1.3.0 | mmcv>=2.0.1, mmengine>=0.9.0 | | 1.2.0 | mmcv>=2.0.1, mmengine>=0.8.0 | diff --git a/mmpose/version.py b/mmpose/version.py index 39bc36f2bb..924fcf22ea 100644 --- a/mmpose/version.py +++ b/mmpose/version.py @@ -1,6 +1,6 @@ # Copyright (c) Open-MMLab. All rights reserved. -__version__ = '1.3.1' +__version__ = '1.3.2' short_version = __version__ diff --git a/tests/data/h3wb/h3wb_train_bbox_subset.npz b/tests/data/h3wb/h3wb_train_bbox_subset.npz new file mode 100644 index 0000000000000000000000000000000000000000..d25e3005fc967bf1701e4f0f13718f477e879263 GIT binary patch literal 10627 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 literal 0 HcmV?d00001