From dbb08338b650b4ee8163a9501338a51c9ad4fb25 Mon Sep 17 00:00:00 2001 From: Romain Guesdon <r.guesdon@hotmail.fr> Date: Tue, 4 Jan 2022 15:34:23 +0100 Subject: [PATCH] Initial commit --- .gitignore | 115 +++++ LICENCE | 19 + README.md | 112 ++--- assets/logo_liris.png | Bin 0 -> 6061 bytes assets/logo_ra.png | Bin 0 -> 30557 bytes assets/metamodel.png | Bin 0 -> 259304 bytes .../resnet50/256x192_d256x3_adam_lr1e-3.yaml | 76 ++++ .../coco/resnet50/256x192_vis_freeze.yaml | 88 ++++ .../256x192_vis_2_raise_soft_fine.yaml | 80 ++++ lib/Makefile | 4 + lib/core/config.py | 267 +++++++++++ lib/core/evaluate.py | 117 +++++ lib/core/function.py | 393 +++++++++++++++++ lib/core/inference.py | 74 ++++ lib/core/loss.py | 110 +++++ lib/dataset/JointsDataset.py | 231 ++++++++++ lib/dataset/__init__.py | 14 + lib/dataset/coco.py | 412 +++++++++++++++++ lib/dataset/demo_loader.py | 188 ++++++++ lib/dataset/dripe.py | 417 ++++++++++++++++++ lib/dataset/mpii.py | 176 ++++++++ lib/models/__init__.py | 12 + lib/models/modules.py | 196 ++++++++ lib/models/pose_resnet.py | 80 ++++ lib/models/pose_vis.py | 39 ++ lib/models/resnet.py | 145 ++++++ lib/nms/__init__.py | 0 lib/nms/cpu_nms.pyx | 67 +++ lib/nms/gpu_nms.hpp | 2 + lib/nms/gpu_nms.pyx | 30 ++ lib/nms/nms.py | 123 ++++++ lib/nms/nms_kernel.cu | 143 ++++++ lib/nms/setup.py | 140 ++++++ lib/utils/__init__.py | 0 lib/utils/debug.py | 84 ++++ lib/utils/tabs.py | 103 +++++ lib/utils/transforms.py | 123 ++++++ lib/utils/utils.py | 129 ++++++ lib/utils/vis.py | 141 ++++++ lib/utils/zipreader.py | 70 +++ pose_estimation/_init_paths.py | 23 + pose_estimation/train.py | 272 ++++++++++++ pose_estimation/valid.py | 189 ++++++++ requirements.txt | 13 + 44 files changed, 4942 insertions(+), 75 deletions(-) create mode 100644 .gitignore create mode 100644 LICENCE create mode 100644 assets/logo_liris.png create mode 100644 assets/logo_ra.png create mode 100644 assets/metamodel.png create mode 100644 experiments/coco/resnet50/256x192_d256x3_adam_lr1e-3.yaml create mode 100644 experiments/coco/resnet50/256x192_vis_freeze.yaml create mode 100644 experiments/dripe/resnet50/256x192_vis_2_raise_soft_fine.yaml create mode 100644 lib/Makefile create mode 100644 lib/core/config.py create mode 100644 lib/core/evaluate.py create mode 100644 lib/core/function.py create mode 100644 lib/core/inference.py create mode 100644 lib/core/loss.py create mode 100644 lib/dataset/JointsDataset.py create mode 100644 lib/dataset/__init__.py create mode 100644 lib/dataset/coco.py create mode 100644 lib/dataset/demo_loader.py create mode 100644 lib/dataset/dripe.py create mode 100644 lib/dataset/mpii.py create mode 100644 lib/models/__init__.py create mode 100644 lib/models/modules.py create mode 100644 lib/models/pose_resnet.py create mode 100644 lib/models/pose_vis.py create mode 100644 lib/models/resnet.py create mode 100644 lib/nms/__init__.py create mode 100644 lib/nms/cpu_nms.pyx create mode 100644 lib/nms/gpu_nms.hpp create mode 100644 lib/nms/gpu_nms.pyx create mode 100644 lib/nms/nms.py create mode 100644 lib/nms/nms_kernel.cu create mode 100644 lib/nms/setup.py create mode 100644 lib/utils/__init__.py create mode 100644 lib/utils/debug.py create mode 100644 lib/utils/tabs.py create mode 100644 lib/utils/transforms.py create mode 100644 lib/utils/utils.py create mode 100644 lib/utils/vis.py create mode 100644 lib/utils/zipreader.py create mode 100644 pose_estimation/_init_paths.py create mode 100644 pose_estimation/train.py create mode 100644 pose_estimation/valid.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6c04bd5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,115 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +/data +/output +/models +/log +/lib/dataset/cocoapi +/lib/nms/build +*.pyd +*.obj +/.idea + +*.npz + diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..d1a6609 --- /dev/null +++ b/LICENCE @@ -0,0 +1,19 @@ +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE \ No newline at end of file diff --git a/README.md b/README.md index 0df49b0..3678f80 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ <h1 style="text-align:center"> -DriPE: A Dataset for Human Pose Estimation in Real-World Driving Settings +Multitask Metamodel for Keypoint Visibility Prediction in Human Pose Estimation </h1> <div style="text-align:center"> <h3> @@ -8,106 +8,68 @@ DriPE: A Dataset for Human Pose Estimation in Real-World Driving Settings <a href="https://liris.cnrs.fr/page-membre/laure-tougne">Laure Tougne</a> <br> <br> -ICCV: International Conference on Computer Vision 2021 -<br> -Workshop AVVision : Autonomous Vehicle Vision +International Joint Conference on Computer Vision, Imaging and Computer Graphics Theory and Applications (VISAPP) </h3> </div> # Table of content - [Overview](#overview) -- [Dataset](#dataset) -- [Networks](#networks) -- [Evaluation](#evaluation) +- [Installation](#installation) +- [Testing](#valid-visibility-module) +- [Training](#training-visibility-module) - [Citation](#citation) - [Acknowledgements](#acknowledgements) # Overview This repository contains the materials presented in the paper -[DriPE: A Dataset for Human Pose Estimation in Real-World Driving Settings](https://openaccess.thecvf.com/content/ICCV2021W/AVVision/papers/Guesdon_DriPE_A_Dataset_for_Human_Pose_Estimation_in_Real-World_Driving_ICCVW_2021_paper.pdf). - -We provide the link to download the DriPE [dataset](#dataset), -along with trained weights for the three [networks](#networks) presented in this paper: -SBl, MSPN and RSN. -Furthermore, we provide the code to evaluate HPE networks with [mAPK metric](#evaluation), our keypoint-centered metric. - -# Dataset -DriPE dataset can be download [here](http://dionysos.univ-lyon2.fr/~ccrispim/DriPE/DriPE.zip). We provide 10k images, -along with keypoint annotations, split as: -* 6.4k for training -* 1.3k for validation -* 1.3k for testing +[Multitask Metamodel for Keypoint Visibility Prediction in Human Pose Estimation](). -The annotation files follow the COCO annotation style, with 17 keypoints. -More information can be found [here](https://cocodataset.org/#format-data). + -##### **DriPE image samples** - +Our code is based on the [Simple Baseline](https://github.com/microsoft/human-pose-estimation.pytorch) pytorch implementation. +However, several modifications have been made from the original code to allow the implementation of our metamodel. -# Networks -We used in our study three architectures: -* __SBl__: Simple Baselines for Human Pose Estimation and Tracking (Xiao 2018) [GitHub](https://github.com/microsoft/human-pose-estimation.pytorch) -* __MSPN__: Rethinking on Multi-Stage Networks for Human Pose Estimation (Li 2019) [GitHub](https://github.com/megvii-detection/MSPN) -* __RSN__: Learning Delicate Local Representations for Multi-Person Pose Estimation (Cai 2020) [GitHub](https://github.com/caiyuanhao1998/RSN) - -We used for training and for inference the code provided by the authors in the three linked repositories. -Weights of the trained model evaluated in our study can be found [here](http://dionysos.univ-lyon2.fr/~ccrispim/DriPE/models). -More details about the training can be found in our [paper](https://openaccess.thecvf.com/content/ICCV2021W/AVVision/papers/Guesdon_DriPE_A_Dataset_for_Human_Pose_Estimation_in_Real-World_Driving_ICCVW_2021_paper.pdf). - -##### **HPE on the COCO 2017 validation set.** -AP OKS (\%) | AP | AP<sup>50</sup> | AP<sup>75</sup> | AP<sup>L</sup> | AR | AR<sup>50</sup> | AR<sup>75</sup> | AR<sup>L</sup> -:---- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | -SBl | 72 | 92 | 80 | 77 | 76 | 93 | 82 | 80 -MSPN | __77__ | 94 | 85 | 82 | __80__ | 95 | 87 | 85 -RSN | 76 | 94 | 84 | 81 | 79 | 94 | 85 | 84 +# Installation +- Clone this repository +- Follow the instructions on the [Simple Baseline repository](https://github.com/microsoft/human-pose-estimation.pytorch). +- Download the DriPE dataset [here](https://gitlab.liris.cnrs.fr/aura_autobehave/dripe) and place it in the `data/` directory. -##### **HPE on the DriPE test set.** -AP OKS (\%) | AP | AP<sup>50</sup> | AP<sup>75</sup> | AP<sup>L</sup> | AR | AR<sup>50</sup> | AR<sup>75</sup> | AR<sup>L</sup> -:---- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | -SBl | 75 | 99 | 91 | 75 | 81 | 99 | 94 | 81 -MSPN | 81 | 99 | 97 | __81__ | 85 | 99 | 97 | __85__ -RSN | 75 | 99 | 93 | 75 | 79 | 99 | 95 | 79 -# Evaluation -Evaluation is performed using two metrics: -* __AP OKS__, the original metric from COCO dataset, which is already implemented in the [cocoapi](https://github.com/cocodataset/cocoapi) -and in the three network repositories -* __mAPK__, our new keypoint-centered metric. We provide script for evaluate the network predictions in this repository. - -Evaluation with mAPK can be used by running the eval_mpk.py script. -```Script to evaluate prediction in COCO format using the mAPK metric. -Usage: python eval_mapk.py [json_prediction_path] [json_annotation_path] -Paths can be absolute, relative to the script or relative to the respective json/gts or json/preds directory. - -h, --help\tdisplay this help message and exit +# Valid visibility module +You can download pretrained weights [here](http://dionysos.univ-lyon2.fr/~ccrispimVisPred/models). +For example, execute: +``` +python pose_estimation/valid.py \ + --cfg experiments/coco/resnet50/256x192_vis_freeze.yaml \ + --flip-test \ + --model-file models/pytorch/pose_coco/coco_vis2_raise_soft.pth.tar ``` -We provide in this repo one annotation and one prediction file. To evaluate these predictions, run: +# Training visibility module +You can download pretrained weight on the base model [here](http://dionysos.univ-lyon2.fr/~ccrispimVisPred/models/coco_vis2_0_no_linear.pth.tar). +Place this file in `models/pytorch/resnet50_vis`. +Then, execute: ``` -python eval_mapk.py keypoints_out_SBL_autob_test-repo.json autob_coco_test.json +python pose_estimation/train.py \ + --cfg experiments/coco/resnet50/256x192_vis_freeze.yaml ``` -Expected results are : - F1 score: 0.733 -Metric | Head | Should. | Elbow | Wrist | Hip | Knee | Ankle | All | Mean | Std -:--- | :---: | :----: | :----: | :---: | :----: | :----: | :----: | :----: | :----: | :-----: -AP | 0.30 | 0.86 | 0.78 | 0.92 | 0.91 | 0.76 | 0.13 | 0.68 | 0.67 | 0.29 -AR | 0.87 | 0.92 | 0.93 | 0.96 | 0.88 | 0.61 | 0.05 | 0.80 | 0.75 | 0.31 +##### **HPE on the COCO 2017 validation set.** +AP OKS (\%) | AP | AP<sup>50</sup> | AP<sup>75</sup> | AP<sup>M</sup> | AP<sup>L</sup> | AR | AR<sup>50</sup> | AR<sup>75</sup> | AR<sup>M</sup> | AR<sup>L</sup> +:--- | :---: | :---: | :---: | :---: | :---: | :---: |:---: | :---: | :---: | :---: | +SBl | 72 | 92 | 79 | 69 | 76 | 75 | 93 | 82 | 72 | 80 -# Citation -If you use this dataset or code in your research, please send us an email with the following details and we will update our webpage with your results. -* Performance (%) -* Experimental Setup -* Paper details -The DRIPE dataset is only to be used for scientific purposes. It must not be republished other than by the original authors. The scientific use includes processing the data and showing it in publications and presentations. If you use it, please cite: +# Citation +If you use it, please cite: ``` -@InProceedings{Guesdon_2021_ICCV, +@InProceedings{Guesdon_2022_Visapp, author = {Guesdon, Romain and Crispim-Junior, Carlos and Tougne, Laure}, - title = {DriPE: A Dataset for Human Pose Estimation in Real-World Driving Settings}, + title = {Multitask Metamodel for Keypoint Visibility Prediction in Human Pose Estimation}, booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV) Workshops}, - month = {October}, - year = {2021}, + month = {February}, + year = {2022}, pages = {2865-2874} } ``` diff --git a/assets/logo_liris.png b/assets/logo_liris.png new file mode 100644 index 0000000000000000000000000000000000000000..37143f9d88e379ff7c6314eaa23b069f7ce997ef GIT binary patch literal 6061 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 literal 0 HcmV?d00001 diff --git a/assets/logo_ra.png b/assets/logo_ra.png new file mode 100644 index 0000000000000000000000000000000000000000..6ceef305fd77646ce549c8eabbc6b34c0f048c7a GIT binary patch literal 30557 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 literal 0 HcmV?d00001 diff --git a/assets/metamodel.png b/assets/metamodel.png new file mode 100644 index 0000000000000000000000000000000000000000..51ae6c24c47159243eea5928c435ec646295846e GIT binary patch literal 259304 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%0Ae+ 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%0D;KT`hiFZZu$sp;wL`6ZwYaj}UI8?3=E<UWXq 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�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�?1LaGQYkp0!q|NuRg^k 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%0As!n;);&W~1UqVt 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 ClIiaN literal 0 HcmV?d00001 diff --git a/experiments/coco/resnet50/256x192_d256x3_adam_lr1e-3.yaml b/experiments/coco/resnet50/256x192_d256x3_adam_lr1e-3.yaml new file mode 100644 index 0000000..107c140 --- /dev/null +++ b/experiments/coco/resnet50/256x192_d256x3_adam_lr1e-3.yaml @@ -0,0 +1,76 @@ +GPUS: '0' +DATA_DIR: '' +OUTPUT_DIR: 'output' +LOG_DIR: 'log' +WORKERS: 4 +PRINT_FREQ: 100 + +DATASET: + DATASET: 'coco' + ROOT: 'data/coco/' + TEST_SET: 'val2017' + TRAIN_SET: 'train2017' + FLIP: true + ROT_FACTOR: 40 + SCALE_FACTOR: 0.3 +MODEL: + NAME: 'pose_resnet' + PRETRAINED: 'models/pytorch/imagenet/resnet50-19c8e357.pth' + IMAGE_SIZE: + - 192 + - 256 + NUM_JOINTS: 17 + EXTRA: + TARGET_TYPE: 'gaussian' + HEATMAP_SIZE: + - 48 + - 64 + SIGMA: 2 + FINAL_CONV_KERNEL: 1 + DECONV_WITH_BIAS: false + NUM_DECONV_LAYERS: 3 + NUM_DECONV_FILTERS: + - 256 + - 256 + - 256 + NUM_DECONV_KERNELS: + - 4 + - 4 + - 4 + NUM_LAYERS: 50 +LOSS: + USE_TARGET_WEIGHT: true +TRAIN: + BATCH_SIZE: 32 + SHUFFLE: true + BEGIN_EPOCH: 0 + END_EPOCH: 140 + RESUME: false + OPTIMIZER: 'adam' + LR: 0.001 + LR_FACTOR: 0.1 + LR_STEP: + - 90 + - 120 + WD: 0.0001 + GAMMA1: 0.99 + GAMMA2: 0.0 + MOMENTUM: 0.9 + NESTEROV: false +TEST: + BATCH_SIZE: 32 + COCO_BBOX_FILE: 'data/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json' + BBOX_THRE: 1.0 + FLIP_TEST: false + IMAGE_THRE: 0.0 + IN_VIS_THRE: 0.2 + MODEL_FILE: '' + NMS_THRE: 1.0 + OKS_THRE: 0.9 + USE_GT_BBOX: false +DEBUG: + DEBUG: true + SAVE_BATCH_IMAGES_GT: true + SAVE_BATCH_IMAGES_PRED: true + SAVE_HEATMAPS_GT: true + SAVE_HEATMAPS_PRED: true diff --git a/experiments/coco/resnet50/256x192_vis_freeze.yaml b/experiments/coco/resnet50/256x192_vis_freeze.yaml new file mode 100644 index 0000000..73d38dc --- /dev/null +++ b/experiments/coco/resnet50/256x192_vis_freeze.yaml @@ -0,0 +1,88 @@ +GPUS: '0' +DATA_DIR: '' +OUTPUT_DIR: 'output' +LOG_DIR: 'log' +WORKERS: 0 +PRINT_FREQ: 100 + +DATASET: + DATASET: 'coco' + ROOT: 'data/coco/' + TEST_SET: 'val2017' + TRAIN_SET: 'train2017' + FLIP: true + ROT_FACTOR: 40 + SCALE_FACTOR: 0.3 +MODEL: + NAME: 'pose_vis' + PRETRAINED: 'models/pytorch/resnet50_vis/coco_vis2_0_no_linear.pth.tar' + IMAGE_SIZE: + - 192 + - 256 + NUM_JOINTS: 17 + PREDICT_VIS: true + EXTRA: + TARGET_TYPE: 'gaussian' + HEATMAP_SIZE: + - 48 + - 64 + SIGMA: 2 + FINAL_CONV_KERNEL: 1 + DECONV_WITH_BIAS: false + NUM_DECONV_LAYERS: 3 + NUM_DECONV_FILTERS: + - 256 + - 256 + - 256 + NUM_DECONV_KERNELS: + - 4 + - 4 + - 4 + NUM_LINEAR_LAYERS: + - 2048 + NUM_LAYERS: 50 +LOSS: + USE_TARGET_WEIGHT: false + + USE_CLASS_WEIGHT: true + VIS_RATIO: 0.1 + VIS_FACTOR: 0.1 + VIS_STEP: + - 20 + - 40 + - 60 +TRAIN: + BATCH_SIZE: 32 + SHUFFLE: true + BEGIN_EPOCH: 0 + END_EPOCH: 80 + RESUME: false + OPTIMIZER: 'adam' + LR: 0.001 + LR_FACTOR: 0.1 + LR_STEP: + - 50 + WD: 0.0001 + GAMMA1: 0.99 + GAMMA2: 0.0 + MOMENTUM: 0.9 + NESTEROV: false + SAVE_CHECKPOINT: 20 + FREEZE: true +TEST: + BATCH_SIZE: 32 + COCO_BBOX_FILE: 'data/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json' + BBOX_THRE: 1.0 + FLIP_TEST: false + IMAGE_THRE: 0.0 + IN_VIS_THRE: 0.2 + MODEL_FILE: '' + NMS_THRE: 1.0 + OKS_THRE: 0.9 + USE_GT_BBOX: true +DEBUG: + DEBUG: true + SAVE_BATCH_IMAGES_GT: false + SAVE_BATCH_IMAGES_PRED: false + SAVE_HEATMAPS_GT: false + SAVE_HEATMAPS_PRED: false diff --git a/experiments/dripe/resnet50/256x192_vis_2_raise_soft_fine.yaml b/experiments/dripe/resnet50/256x192_vis_2_raise_soft_fine.yaml new file mode 100644 index 0000000..b6a110d --- /dev/null +++ b/experiments/dripe/resnet50/256x192_vis_2_raise_soft_fine.yaml @@ -0,0 +1,80 @@ +GPUS: '0' +DATA_DIR: '' +OUTPUT_DIR: 'output' +LOG_DIR: 'log' +WORKERS: 0 +PRINT_FREQ: 100 + +DATASET: + DATASET: 'dripe' + ROOT: 'data/dripe/' + TEST_SET: 'dripe_coco_train' + TRAIN_SET: 'dripe_coco_train' + FLIP: true + ROT_FACTOR: 40 + SCALE_FACTOR: 0.3 +MODEL: + NAME: 'pose_resnet_vis_2' + PRETRAINED: 'output/coco/pose_resnet_vis_2_50/256x192_vis_2_raise_soft/final_state.pth.tar' + IMAGE_SIZE: + - 192 + - 256 + NUM_JOINTS: 17 + PREDICT_VIS: true + EXTRA: + TARGET_TYPE: 'gaussian' + HEATMAP_SIZE: + - 48 + - 64 + SIGMA: 2 + FINAL_CONV_KERNEL: 1 + DECONV_WITH_BIAS: false + NUM_DECONV_LAYERS: 3 + NUM_DECONV_FILTERS: + - 256 + - 256 + - 256 + NUM_DECONV_KERNELS: + - 4 + - 4 + - 4 + NUM_LAYERS: 50 +LOSS: + USE_TARGET_WEIGHT: false + + USE_CLASS_WEIGHT: true + VIS_RATIO: 0.2 +TRAIN: + BATCH_SIZE: 32 + SHUFFLE: true + BEGIN_EPOCH: 0 + END_EPOCH: 10 + RESUME: false + OPTIMIZER: 'adam' + LR: 0.0001 + LR_FACTOR: 0.1 + LR_STEP: + - 50 + WD: 0.0001 + GAMMA1: 0.99 + GAMMA2: 0.0 + MOMENTUM: 0.9 + NESTEROV: false + SAVE_CHECKPOINT: 20 +TEST: + BATCH_SIZE: 12 + COCO_BBOX_FILE: 'data/coco/person_detection_results/COCO_val2017_detections_AP_H_56_person.json' + BBOX_THRE: 1.0 + FLIP_TEST: false + IMAGE_THRE: 0.0 + IN_VIS_THRE: 0.2 + MODEL_FILE: '' + NMS_THRE: 1.0 + OKS_THRE: 0.9 + USE_GT_BBOX: true +DEBUG: + DEBUG: true + SAVE_BATCH_IMAGES_GT: false + SAVE_BATCH_IMAGES_PRED: false + SAVE_HEATMAPS_GT: true + SAVE_HEATMAPS_PRED: true diff --git a/lib/Makefile b/lib/Makefile new file mode 100644 index 0000000..57d5804 --- /dev/null +++ b/lib/Makefile @@ -0,0 +1,4 @@ +all: + cd nms; python setup.py build_ext --inplace; rm -rf build; cd ../../ +clean: + cd nms; rm *.so; cd ../../ diff --git a/lib/core/config.py b/lib/core/config.py new file mode 100644 index 0000000..9a6d2e6 --- /dev/null +++ b/lib/core/config.py @@ -0,0 +1,267 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import yaml + +import numpy as np +from easydict import EasyDict as edict + +config = edict() + +config.OUTPUT_DIR = '' +config.LOG_DIR = '' +config.DATA_DIR = '' +config.GPUS = '0' +config.WORKERS = 4 +config.PRINT_FREQ = 20 + +# Cudnn related params +config.CUDNN = edict() +config.CUDNN.BENCHMARK = True +config.CUDNN.DETERMINISTIC = False +config.CUDNN.ENABLED = True + +# pose_resnet related params +POSE_RESNET = edict() +POSE_RESNET.NUM_LAYERS = 50 +POSE_RESNET.DECONV_WITH_BIAS = False +POSE_RESNET.NUM_DECONV_LAYERS = 3 +POSE_RESNET.NUM_DECONV_FILTERS = [256, 256, 256] +POSE_RESNET.NUM_DECONV_KERNELS = [4, 4, 4] +POSE_RESNET.FINAL_CONV_KERNEL = 1 +POSE_RESNET.TARGET_TYPE = 'gaussian' +POSE_RESNET.HEATMAP_SIZE = [64, 64] # width * height, ex: 24 * 32 +POSE_RESNET.SIGMA = 2 + +POSE_RESNET_VIS = edict() +POSE_RESNET_VIS.update(POSE_RESNET) +POSE_RESNET_VIS.NUM_LINEAR_LAYERS = [4096, 2048, 1024] + +POS_EFFICIENT_VIS = edict() +POS_EFFICIENT_VIS.EFFICIENT_NAME = '' +POS_EFFICIENT_VIS.NUM_LINEAR_LAYERS = [4096, 2048, 1024] + +POS_MSPN_VIS = edict() +POS_MSPN_VIS.STAGE_NUM = 2 +POS_MSPN_VIS.UPSAMPLE_CHANNEL_NUM = 256 + +MODEL_EXTRAS = { + 'pose_resnet': POSE_RESNET, + 'pose_resnet_vis': POSE_RESNET_VIS, + 'pose_resnet_vis_2': POSE_RESNET_VIS, + 'pose_resnet_vis_3': POSE_RESNET_VIS, + 'pose_resnet_merge': POSE_RESNET_VIS, + 'efficient_pose': POS_EFFICIENT_VIS, + 'mspn_pose': POS_MSPN_VIS, +} + +# common params for NETWORK +config.MODEL = edict() +config.MODEL.NAME = 'pose_resnet' +config.MODEL.INIT_WEIGHTS = True +config.MODEL.PRETRAINED = '' +config.MODEL.NUM_JOINTS = 16 +config.MODEL.IMAGE_SIZE = [256, 256] # width * height, ex: 192 * 256 +config.MODEL.EXTRA = MODEL_EXTRAS[config.MODEL.NAME] + +config.MODEL.PREDICT_VIS = False +config.MODEL.NB_VIS = 3 +config.MODEL.STYLE = 'pytorch' + +config.LOSS = edict() +config.LOSS.USE_TARGET_WEIGHT = True + +config.LOSS.VIS_RATIO = 0.5 +config.LOSS.VIS_FACTOR = 0.25 +config.LOSS.VIS_STEP = [] +config.LOSS.USE_CLASS_WEIGHT = False + +# DATASET related params +config.DATASET = edict() +config.DATASET.ROOT = '' +config.DATASET.DATASET = 'mpii' +config.DATASET.TRAIN_SET = 'train' +config.DATASET.TEST_SET = 'valid' +config.DATASET.DATA_FORMAT = 'jpg' +config.DATASET.HYBRID_JOINTS_TYPE = '' +config.DATASET.SELECT_DATA = False + +# training data augmentation +config.DATASET.FLIP = True +config.DATASET.SCALE_FACTOR = 0.25 +config.DATASET.ROT_FACTOR = 30 + +# train +config.TRAIN = edict() + +config.TRAIN.LR_FACTOR = 0.1 +config.TRAIN.LR_STEP = [90, 110] +config.TRAIN.LR = 0.001 + +config.TRAIN.OPTIMIZER = 'adam' +config.TRAIN.MOMENTUM = 0.9 +config.TRAIN.WD = 0.0001 +config.TRAIN.NESTEROV = False +config.TRAIN.GAMMA1 = 0.99 +config.TRAIN.GAMMA2 = 0.0 + +config.TRAIN.BEGIN_EPOCH = 0 +config.TRAIN.END_EPOCH = 140 + +config.TRAIN.RESUME = False +config.TRAIN.CHECKPOINT = '' + +config.TRAIN.SAVE_CHECKPOINT = 0 + +config.TRAIN.BATCH_SIZE = 32 +config.TRAIN.SHUFFLE = True + +config.TRAIN.FREEZE = False + +# testing +config.TEST = edict() + +# size of images for each device +config.TEST.BATCH_SIZE = 32 +# Test Model Epoch +config.TEST.FLIP_TEST = False +config.TEST.POST_PROCESS = True +config.TEST.SHIFT_HEATMAP = True + +config.TEST.USE_GT_BBOX = False +# nms +config.TEST.OKS_THRE = 0.5 +config.TEST.IN_VIS_THRE = 0.0 +config.TEST.COCO_BBOX_FILE = '' +config.TEST.BBOX_THRE = 1.0 +config.TEST.MODEL_FILE = '' +config.TEST.IMAGE_THRE = 0.0 +config.TEST.NMS_THRE = 1.0 + +# debug +config.DEBUG = edict() +config.DEBUG.DEBUG_MEMORY = False +config.DEBUG.DEBUG = False +config.DEBUG.SAVE_BATCH_IMAGES_GT = False +config.DEBUG.SAVE_BATCH_IMAGES_PRED = False +config.DEBUG.SAVE_HEATMAPS_GT = False +config.DEBUG.SAVE_HEATMAPS_PRED = False + + +def _update_dict(k, v): + if k == 'DATASET': + if 'MEAN' in v and v['MEAN']: + v['MEAN'] = np.array([eval(x) if isinstance(x, str) else x + for x in v['MEAN']]) + if 'STD' in v and v['STD']: + v['STD'] = np.array([eval(x) if isinstance(x, str) else x + for x in v['STD']]) + if k == 'MODEL': + if 'NAME' in v: + config['MODEL']['EXTRA'] = MODEL_EXTRAS[v['NAME']] + if '_vis' in config['MODEL']['EXTRA'] and 'PREDICT_VIS' not in v: + v['PREDICT_VIS'] = True + if 'EXTRA' in v and 'HEATMAP_SIZE' in v['EXTRA']: + if isinstance(v['EXTRA']['HEATMAP_SIZE'], int): + v['EXTRA']['HEATMAP_SIZE'] = np.array( + [v['EXTRA']['HEATMAP_SIZE'], v['EXTRA']['HEATMAP_SIZE']]) + else: + v['EXTRA']['HEATMAP_SIZE'] = np.array( + v['EXTRA']['HEATMAP_SIZE']) + if 'IMAGE_SIZE' in v: + if isinstance(v['IMAGE_SIZE'], int): + v['IMAGE_SIZE'] = np.array([v['IMAGE_SIZE'], v['IMAGE_SIZE']]) + else: + v['IMAGE_SIZE'] = np.array(v['IMAGE_SIZE']) + + for vk, vv in v.items(): + if vk in config[k]: + if isinstance(vv, dict): + config[k][vk].update(vv) + else: + config[k][vk] = vv + else: + raise ValueError("{}.{} not exist in config.py".format(k, vk)) + + +def update_config(config_file): + exp_config = None + with open(config_file) as f: + exp_config = edict(yaml.load(f)) + for k, v in exp_config.items(): + if k in config: + if isinstance(v, dict): + _update_dict(k, v) + else: + if k == 'SCALES': + config[k][0] = (tuple(v)) + else: + config[k] = v + else: + raise ValueError("{} not exist in config.py".format(k)) + + +def gen_config(config_file): + cfg = dict(config) + for k, v in cfg.items(): + if isinstance(v, edict): + cfg[k] = dict(v) + + with open(config_file, 'w') as f: + yaml.dump(dict(cfg), f, default_flow_style=False) + + +def update_dir(model_dir, log_dir, data_dir): + if model_dir: + config.OUTPUT_DIR = model_dir + + if log_dir: + config.LOG_DIR = log_dir + + if data_dir: + config.DATA_DIR = data_dir + + config.DATASET.ROOT = os.path.join( + config.DATA_DIR, config.DATASET.ROOT) + + config.TEST.COCO_BBOX_FILE = os.path.join( + config.DATA_DIR, config.TEST.COCO_BBOX_FILE) + + config.MODEL.PRETRAINED = os.path.join( + config.DATA_DIR, config.MODEL.PRETRAINED) + + +def get_model_name(cfg): + name = cfg.MODEL.NAME + full_name = cfg.MODEL.NAME + extra = cfg.MODEL.EXTRA + if name in MODEL_EXTRAS : + name = '{model}_{num_layers}'.format( + model=name, + num_layers=extra.NUM_LAYERS) + deconv_suffix = ''.join( + 'd{}'.format(num_filters) + for num_filters in extra.NUM_DECONV_FILTERS) + full_name = '{height}x{width}_{name}_{deconv_suffix}'.format( + height=cfg.MODEL.IMAGE_SIZE[1], + width=cfg.MODEL.IMAGE_SIZE[0], + name=name, + deconv_suffix=deconv_suffix) + else: + raise ValueError('Unkown model: {}'.format(cfg.MODEL)) + + return name, full_name + + +if __name__ == '__main__': + import sys + + gen_config(sys.argv[1]) diff --git a/lib/core/evaluate.py b/lib/core/evaluate.py new file mode 100644 index 0000000..5fd0578 --- /dev/null +++ b/lib/core/evaluate.py @@ -0,0 +1,117 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import json +import logging + +import numpy as np +from sklearn.metrics import f1_score, precision_score, recall_score + +from core.inference import get_max_preds +from utils.tabs import Tabs + +logger = logging.getLogger(__name__) + + +def calc_dists(preds, target, normalize): + preds = preds.astype(np.float32) + target = target.astype(np.float32) + dists = np.zeros((preds.shape[1], preds.shape[0])) + for n in range(preds.shape[0]): + for c in range(preds.shape[1]): + if target[n, c, 0] > 1 and target[n, c, 1] > 1: + normed_preds = preds[n, c, :] / normalize[n] + normed_targets = target[n, c, :] / normalize[n] + dists[c, n] = np.linalg.norm(normed_preds - normed_targets) + else: + dists[c, n] = -1 + return dists + + +def dist_acc(dists, thr=0.5): + ''' Return percentage below threshold while ignoring values with a -1 ''' + dist_cal = np.not_equal(dists, -1) + num_dist_cal = dist_cal.sum() + if num_dist_cal > 0: + return np.less(dists[dist_cal], thr).sum() * 1.0 / num_dist_cal + else: + return -1 + + +def accuracy(output, target, hm_type='gaussian', thr=0.5): + ''' + Calculate accuracy according to PCK, + but uses ground truth heatmap rather than x,y locations + First value to be returned is average accuracy across 'idxs', + followed by individual accuracies + ''' + idx = list(range(output.shape[1])) + norm = 1.0 + if hm_type == 'gaussian': + pred, _ = get_max_preds(output) + target, _ = get_max_preds(target) + h = output.shape[2] + w = output.shape[3] + norm = np.ones((pred.shape[0], 2)) * np.array([h, w]) / 10 + dists = calc_dists(pred, target, norm) + + acc = np.zeros((len(idx) + 1)) + avg_acc = 0 + cnt = 0 + + for i in range(len(idx)): + acc[i + 1] = dist_acc(dists[idx[i]]) + if acc[i + 1] >= 0: + avg_acc = avg_acc + acc[i + 1] + cnt += 1 + + avg_acc = avg_acc / cnt if cnt != 0 else 0 + if cnt != 0: + acc[0] = avg_acc + return acc, avg_acc, cnt, pred + + +def accuracy_vis(output, target, f1=False, save=None): + ''' + Calculate accuracy according to PCK for visibilty + :param output: Prediction numpy array: either class (nb_preds, nb_joints) or model output (nb_preds, nb_joints, nb_classes) + :param target: Ground-truth numpy array (nb_preds, nb_joints) + :param f1: Boolean : compute and display or not f1 score + :param target: Path to save predictions and results to json + :return: accuracy + ''' + + lbls = [[i] for i in range(output.shape[2])] + [None] + + output_preds = output + if len(output.shape) > 2: + output_preds = output.argmax(axis=2) + corrects = output_preds == target + + if f1: + avg_mode = 'weighted' + flat_targ = target.flatten() + flat_out = output_preds.flatten() + prec_scs = [] + reca_scs = [] + f1_scs = [] + for lb in lbls: + prec_scs.append(precision_score(flat_targ, flat_out, labels=lb, average=avg_mode, zero_division=0)) + reca_scs.append(recall_score(flat_targ, flat_out, labels=lb, average=avg_mode, zero_division=0)) + f1_scs.append(f1_score(flat_targ, flat_out, labels=lb, average=avg_mode, zero_division=0)) + + Tabs([prec_scs, reca_scs, f1_scs], lbls_r=['Prec', 'Reca', 'F1'], lbls_c=[str(lb) for lb in lbls], + logger=logger) + + if save is not None: + with open(save, 'w') as f_out: + json.dump(dict([(l[0], l[1].tolist()) for l in [('target', target), ('output', output)]]), f_out) + + return corrects.mean(), flat_out if f1 else None diff --git a/lib/core/function.py b/lib/core/function.py new file mode 100644 index 0000000..8bf372a --- /dev/null +++ b/lib/core/function.py @@ -0,0 +1,393 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import json +import logging +import sys +import time +import os + +import numpy as np +import torch +import cv2 + +from core.config import get_model_name +from core.evaluate import accuracy, accuracy_vis +from core.inference import get_final_preds, get_max_preds +from utils.transforms import flip_back +from utils.vis import save_debug_images +from utils.debug import GradPlots, print_tensors + +logger = logging.getLogger(__name__) + + +def train(config, train_loader, model, criterion, optimizer, epoch, + output_dir, tb_log_dir, writer_dict): + batch_time = AverageMeter() + data_time = AverageMeter() + losses = AverageMeter() + acc = AverageMeter() + acc_vis = AverageMeter() + losses_det = AverageMeters() + + # switch to train mode + model.train() + + end = time.time() + predict_vis = config.MODEL.PREDICT_VIS + + grad_plot = GradPlots(key='fc') + for i, (input, target, target_weight, target_vis, meta) in enumerate(train_loader): + # measure data loading time + data_time.update(time.time() - end) + + # compute output + output = model(input) + if predict_vis or type(output) == tuple: + output, out_vis = output + else: + out_vis = None + + if config.MODEL.NB_VIS == 2: + target_vis = target_vis > 0 + target_vis = target_vis.long() + + target = target.cuda(non_blocking=True) + target_weight = target_weight.cuda(non_blocking=True) + target_vis = target_vis.cuda(non_blocking=True) + + loss, loss_detail = criterion([output, out_vis], [target, target_vis], target_weight) + + if config.DEBUG.DEBUG_MEMORY: + print_tensors() + sys.exit(0) + + # compute gradient and do update step + optimizer.zero_grad() + loss.backward() + + # plot_grad_flow(model.named_parameters()) + # sys.exit(0) + # grad_plot.save_grads(model.named_parameters()) + + optimizer.step() + + # measure accuracy and record loss + losses.update(loss.item(), input.size(0)) + losses_det.update(loss_detail, input.size(0)) + + _, avg_acc, cnt, pred = accuracy(output.detach().cpu().numpy(), + target.detach().cpu().numpy()) + acc.update(avg_acc, cnt) + + if predict_vis: + accu_vis, _ = accuracy_vis(out_vis.detach().cpu().numpy(), target_vis.detach().cpu().numpy()) + acc_vis.update(accu_vis, input.size(0)) + + # measure elapsed time + batch_time.update(time.time() - end) + end = time.time() + + if i % config.PRINT_FREQ == 0: + msg = 'Epoch: [{0}][{1}/{2}]\t' \ + 'Time {batch_time.val:.3f}s ({batch_time.avg:.3f}s)\t' \ + 'Speed {speed:.1f} samples/s\t' \ + 'Data {data_time.val:.3f}s ({data_time.avg:.3f}s)\t' \ + 'Loss {loss.val:.5f} ({loss.avg:.5f})\t' \ + f'Loss_Det {" ".join([f"{l.val:.5f}" for l in losses_det])} ({" ".join([f"{l.avg:.5f}" for l in losses_det])})\t' \ + 'Accuracy {acc.val:.3f} ({acc.avg:.3f})'.format( + epoch, i, len(train_loader), batch_time=batch_time, + speed=input.size(0) / batch_time.val, + data_time=data_time, loss=losses, acc=acc) + if predict_vis: + msg += f'\tAccu_vis {acc_vis.val:.3f} ({acc_vis.avg:.3f})' + logger.info(msg) + + writer = writer_dict['writer'] + global_steps = writer_dict['train_global_steps'] + writer.add_scalar('train_loss', losses.val, global_steps) + writer.add_scalar('train_acc', acc.val, global_steps) + writer_dict['train_global_steps'] = global_steps + 1 + + prefix = '{}_{}'.format(os.path.join(output_dir, 'train'), i) + save_debug_images(config, input, meta, target, pred * 4, output, + prefix) + + +def validate(config, val_loader, val_dataset, model, criterion, output_dir, + tb_log_dir, writer_dict=None): + batch_time = AverageMeter() + losses = AverageMeter() + acc = AverageMeter() + acc_vis = AverageMeter() + + losses_det = AverageMeters() + + # switch to evaluate mode + model.eval() + + num_samples = len(val_dataset) + all_preds = np.zeros((num_samples, config.MODEL.NUM_JOINTS, 3), + dtype=np.float32) + all_boxes = np.zeros((num_samples, 6)) + all_maps = np.zeros( + (num_samples, config.MODEL.NUM_JOINTS, config.MODEL.EXTRA.HEATMAP_SIZE[1], config.MODEL.EXTRA.HEATMAP_SIZE[0]), + dtype=np.float32) + all_gts = np.zeros((num_samples, config.MODEL.NUM_JOINTS, 3), dtype=np.float32) + all_gts_maps = np.zeros( + (num_samples, config.MODEL.NUM_JOINTS, config.MODEL.EXTRA.HEATMAP_SIZE[1], config.MODEL.EXTRA.HEATMAP_SIZE[0]), + dtype=np.float32) + all_preds_vis = np.zeros((num_samples, config.MODEL.NUM_JOINTS, config.MODEL.NB_VIS), dtype=np.float32) + all_gts_vis = np.zeros((num_samples, config.MODEL.NUM_JOINTS), dtype=np.int32) + + all_names = [] + image_path = [] + filenames = [] + imgnums = [] + idx = 0 + + predict_vis = config.MODEL.PREDICT_VIS + + with torch.no_grad(): + end = time.time() + for i, (input, target, target_weight, target_vis, meta) in enumerate(val_loader): + # compute output + output = model(input) + if predict_vis or type(output) == tuple: + output, out_vis = output + else: + out_vis = None + + if config.TEST.FLIP_TEST: + # this part is ugly, because pytorch has not supported negative index + # input_flipped = model(input[:, :, :, ::-1]) + input_flipped = np.flip(input.cpu().numpy(), 3).copy() + input_flipped = torch.from_numpy(input_flipped).cuda() + # compute output + output_flipped = model(input_flipped) + if predict_vis or type(output_flipped) == tuple: + output_flipped, out_vis_flipped = output_flipped + out_vis = (out_vis + out_vis_flipped) * 0.5 + else: + out_vis_flipped = None + + output_flipped = flip_back(output_flipped.cpu().numpy(), + val_dataset.flip_pairs) + output_flipped = torch.from_numpy(output_flipped.copy()).cuda() + + # feature is not aligned, shift flipped heatmap for higher accuracy + if config.TEST.SHIFT_HEATMAP: + output_flipped[:, :, :, 1:] = \ + output_flipped.clone()[:, :, :, 0:-1] + # output_flipped[:, :, :, 0] = 0 + + output = (output + output_flipped) * 0.5 + + if config.MODEL.NB_VIS == 2: + target_vis = target_vis > 0 + target_vis = target_vis.long() + + if False: + t = target_vis < 1 + for r in range(t.shape[0]): + for c in range(t.shape[1]): + if t[r][c]: + m = output[r][c].max() + if m > 0.6: + ti = int(time.time()) + hm = output[r][c].mul(255).clamp(0, 255).byte().cpu().numpy() + img = input[r].mul(255).clamp(0, 255).byte().permute(1, 2, 0).cpu().numpy() + hmi = cv2.applyColorMap(cv2.resize(hm, (img.shape[1], img.shape[0])), cv2.COLORMAP_JET) + cv2.imwrite(f'temp/{c}_{r}_{m}.png', hmi * 0.7 + 0.3 * img) + + target = target.cuda(non_blocking=True) + target_weight = target_weight.cuda(non_blocking=True) + target_vis = target_vis.cuda(non_blocking=True) + + loss, loss_detail = criterion([output, out_vis], [target, target_vis], target_weight) + + num_images = input.size(0) + # measure accuracy and record loss + losses.update(loss.item(), num_images) + losses_det.update(loss_detail, num_images) + + _, avg_acc, cnt, pred = accuracy(output.cpu().numpy(), + target.cpu().numpy()) + + acc.update(avg_acc, cnt) + + if predict_vis: + accu_vis, _ = accuracy_vis(out_vis.cpu().numpy(), target_vis.cpu().numpy()) + acc_vis.update(accu_vis, num_images) + + # measure elapsed time + batch_time.update(time.time() - end) + end = time.time() + + c = meta['center'].numpy() + s = meta['scale'].numpy() + score = meta['score'].numpy() + + output_np = output.clone().cpu().numpy() + + preds, maxvals = get_final_preds( + config, output_np, c, s) + + target_cpu = target.clone().cpu().numpy() + target_vis_cpu = target_vis.cpu().numpy() + all_maps[idx:idx + num_images, :, :, :] = output_np + all_gts_maps[idx:idx + num_images, :, :, :] = target_cpu + all_gts[idx:idx + num_images, :, :2] = get_max_preds(target_cpu)[0] + all_gts[idx:idx + num_images, :, 2] = target_vis_cpu + all_names += [os.path.split(n)[1] for n in meta['image']] + + all_preds[idx:idx + num_images, :, 0:2] = preds[:, :, 0:2] + all_preds[idx:idx + num_images, :, 2:3] = maxvals + # double check this all_boxes parts + all_boxes[idx:idx + num_images, 0:2] = c[:, 0:2] + all_boxes[idx:idx + num_images, 2:4] = s[:, 0:2] + all_boxes[idx:idx + num_images, 4] = np.prod(s * 200, 1) + all_boxes[idx:idx + num_images, 5] = score + image_path.extend(meta['image']) + + if predict_vis: + all_preds_vis[idx:idx + num_images, :, :] = out_vis.cpu().numpy() + all_gts_vis[idx:idx + num_images, :] = target_vis_cpu + + if config.DATASET.DATASET == 'posetrack': + filenames.extend(meta['filename']) + imgnums.extend(meta['imgnum'].numpy()) + + idx += num_images + + if i % config.PRINT_FREQ == 0: + msg = 'Test: [{0}/{1}]\t' \ + 'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t' \ + 'Loss {loss.val:.5f} ({loss.avg:.5f})\t' \ + f'Loss_Det {" ".join([f"{l.val:.5f}" for l in losses_det])} ({" ".join([f"{l.avg:.5f}" for l in losses_det])})\t' \ + 'Accuracy {acc.val:.3f} ({acc.avg:.3f})'.format( + i, len(val_loader), batch_time=batch_time, + loss=losses, acc=acc) + if predict_vis: + msg += f'\tAccu_vis {acc_vis.val:.3f} ({acc_vis.avg:.3f})' + logger.info(msg) + + prefix = '{}_{}'.format(os.path.join(output_dir, 'val'), i) + save_debug_images(config, input, meta, target, pred * 4, output, + prefix) + + name_values, perf_indicator = val_dataset.evaluate( + config, all_preds, output_dir, all_boxes, image_path, + filenames, imgnums) + + with open(os.path.join(output_dir, 'results', 'keypoints_%s_preds.json' % val_dataset.image_set), 'w') as f: + json.dump({'annotations': all_preds.tolist(), 'names': all_names}, f) + + with open(os.path.join(output_dir, 'results', 'keypoints_%s_gts.json' % val_dataset.image_set), 'w') as f: + json.dump({'annotations': all_gts.tolist(), 'names': all_names}, f) + + if predict_vis: + accu_vis, flat_out_vis = accuracy_vis(all_preds_vis, all_gts_vis, f1=True, + save=os.path.join(output_dir, 'results', 'result_vis_val.json')) + logger.info(f"Total vis accuracy: {accu_vis:.3f}") + + all_vis_filter = flat_out_vis.reshape((-1, 17)) > 0 + all_preds_nnz = all_preds.copy() + for i in range(all_preds_nnz.shape[-1]): + all_preds_nnz[:, :, i] *= all_vis_filter + + res_file = os.path.join( + output_dir, 'results', 'keypoints_%s_results_nnz.json' % val_dataset.image_set) + + val_dataset.evaluate( + config, all_preds_nnz, output_dir, all_boxes, image_path, + filenames, imgnums, res_file=res_file) + + # np.save('val_out.npy', all_maps) + # np.savez_compressed('eval_out', names=all_names, maps=all_maps) + # np.savez_compressed('eval_gts', names=all_names, maps=all_gts_maps) + + _, full_arch_name = get_model_name(config) + if isinstance(name_values, list): + for name_value in name_values: + _print_name_value(name_value, full_arch_name) + else: + _print_name_value(name_values, full_arch_name) + + if writer_dict: + writer = writer_dict['writer'] + global_steps = writer_dict['valid_global_steps'] + writer.add_scalar('valid_loss', losses.avg, global_steps) + writer.add_scalar('valid_acc', acc.avg, global_steps) + if isinstance(name_values, list): + for name_value in name_values: + writer.add_scalars('valid', dict(name_value), global_steps) + else: + writer.add_scalars('valid', dict(name_values), global_steps) + writer_dict['valid_global_steps'] = global_steps + 1 + + return perf_indicator + + +# markdown format output +def _print_name_value(name_value, full_arch_name): + names = name_value.keys() + values = name_value.values() + num_values = len(name_value) + logger.info( + '| Arch ' + + ' '.join(['| {}'.format(name) for name in names]) + + ' |' + ) + logger.info('|---' * (num_values + 1) + '|') + logger.info( + '| ' + full_arch_name + ' ' + + ' '.join(['| {:.3f}'.format(value) for value in values]) + + ' |' + ) + + +class AverageMeter(object): + """Computes and stores the average and current value""" + + def __init__(self): + self.reset() + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count if self.count != 0 else 0 + + +class AverageMeters(object): + def __init__(self): + self.meters = [] + + def update(self, vals, n=1): + if len(self.meters) < len(vals): + self.meters = [AverageMeter() for _ in vals] + + for i, val in enumerate(vals): + self.meters[i].update(val.item(), n) + + def reset(self): + for met in self.meters: + met.reset() + + def __iter__(self): + for met in self.meters: + yield met diff --git a/lib/core/inference.py b/lib/core/inference.py new file mode 100644 index 0000000..dfbfb71 --- /dev/null +++ b/lib/core/inference.py @@ -0,0 +1,74 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math + +import numpy as np + +from utils.transforms import transform_preds + + +def get_max_preds(batch_heatmaps): + ''' + get predictions from score maps + heatmaps: numpy.ndarray([batch_size, num_joints, height, width]) + ''' + assert isinstance(batch_heatmaps, np.ndarray), \ + 'batch_heatmaps should be numpy.ndarray' + assert batch_heatmaps.ndim == 4, 'batch_images should be 4-ndim' + + batch_size = batch_heatmaps.shape[0] + num_joints = batch_heatmaps.shape[1] + width = batch_heatmaps.shape[3] + heatmaps_reshaped = batch_heatmaps.reshape((batch_size, num_joints, -1)) + idx = np.argmax(heatmaps_reshaped, 2) + maxvals = np.amax(heatmaps_reshaped, 2) + + maxvals = maxvals.reshape((batch_size, num_joints, 1)) + idx = idx.reshape((batch_size, num_joints, 1)) + + preds = np.tile(idx, (1, 1, 2)).astype(np.float32) + + preds[:, :, 0] = (preds[:, :, 0]) % width + preds[:, :, 1] = np.floor((preds[:, :, 1]) / width) + + pred_mask = np.tile(np.greater(maxvals, 0.0), (1, 1, 2)) + pred_mask = pred_mask.astype(np.float32) + + preds *= pred_mask + return preds, maxvals + + +def get_final_preds(config, batch_heatmaps, center, scale): + coords, maxvals = get_max_preds(batch_heatmaps) + + heatmap_height = batch_heatmaps.shape[2] + heatmap_width = batch_heatmaps.shape[3] + + # post-processing + if config.TEST.POST_PROCESS: + for n in range(coords.shape[0]): + for p in range(coords.shape[1]): + hm = batch_heatmaps[n][p] + px = int(math.floor(coords[n][p][0] + 0.5)) + py = int(math.floor(coords[n][p][1] + 0.5)) + if 1 < px < heatmap_width-1 and 1 < py < heatmap_height-1: + diff = np.array([hm[py][px+1] - hm[py][px-1], + hm[py+1][px]-hm[py-1][px]]) + coords[n][p] += np.sign(diff) * .25 + + preds = coords.copy() + + # Transform back + for i in range(coords.shape[0]): + preds[i] = transform_preds(coords[i], center[i], scale[i], + [heatmap_width, heatmap_height]) + + return preds, maxvals diff --git a/lib/core/loss.py b/lib/core/loss.py new file mode 100644 index 0000000..0f50b82 --- /dev/null +++ b/lib/core/loss.py @@ -0,0 +1,110 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import torch.nn as nn +from abc import ABC, abstractmethod + + +class JointsLoss(nn.Module, ABC): + def __init__(self, use_target_weight, use_vis=False): + super(JointsLoss, self).__init__() + self.criterion = None + self.use_target_weight = use_target_weight + self.use_vis = use_vis + + def forward(self, outputs, targets, target_weights): + if self.use_vis: + return self._forward(*outputs, *targets, target_weight=target_weights) + else: + return self._forward(outputs[0], targets[0], target_weight=target_weights) + + @abstractmethod + def _forward(self, outputs, targets, target_weights): + pass + + +class JointsMSELoss(JointsLoss): + def __init__(self, use_target_weight): + super(JointsMSELoss, self).__init__(use_target_weight, use_vis=False) + self.criterion = nn.MSELoss(size_average=True) + + def _forward(self, output, target, target_weight): + batch_size = output.size(0) + num_joints = output.size(1) + heatmaps_pred = output.reshape((batch_size, num_joints, -1)).split(1, 1) + heatmaps_gt = target.reshape((batch_size, num_joints, -1)).split(1, 1) + loss = 0 + + for idx in range(num_joints): + heatmap_pred = heatmaps_pred[idx].squeeze() + heatmap_gt = heatmaps_gt[idx].squeeze() + if self.use_target_weight: + loss += 0.5 * self.criterion( + heatmap_pred.mul(target_weight[:, idx]), + heatmap_gt.mul(target_weight[:, idx]) + ) + else: + loss += 0.5 * self.criterion(heatmap_pred, heatmap_gt) + + loss /= num_joints + return loss, [loss] + + +class JointsMSELossVis(JointsLoss): + def __init__(self, use_target_weight, vis_ratio=.5, vis_weight=None): + super(JointsMSELossVis, self).__init__(use_target_weight, use_vis=True) + self.criterion = nn.MSELoss(size_average=True) + self.vis_criterion = nn.CrossEntropyLoss(weight=vis_weight, size_average=True) + + # Ratio loss_vis / loss_hm + self.vis_ratio = vis_ratio + + def update_vis_ratio(self, factor): + self.vis_ratio += factor + if self.vis_ratio > 1: + self.vis_ratio = 1. + if self.vis_ratio < 0: + self.vis_ratio = 0. + + def _forward(self, output, vis_preds, target, vis_gts, target_weight): + batch_size = output.size(0) + num_joints = output.size(1) + heatmaps_pred = output.reshape((batch_size, num_joints, -1)).split(1, 1) + heatmaps_gt = target.reshape((batch_size, num_joints, -1)).split(1, 1) + + vis_preds = vis_preds.split(1, 1) + vis_gts = vis_gts.split(1, 1) + + loss = 0 + loss_vis = 0 + + for idx in range(num_joints): + heatmap_pred = heatmaps_pred[idx].squeeze(1) + heatmap_gt = heatmaps_gt[idx].squeeze(1) + vis_pred = vis_preds[idx].squeeze(1) + vis_gt = vis_gts[idx].squeeze(1) + + if self.use_target_weight: + loss += 0.5 * self.criterion( + heatmap_pred.mul(target_weight[:, idx]), + heatmap_gt.mul(target_weight[:, idx]) + ) + else: + loss += 0.5 * self.criterion(heatmap_pred, heatmap_gt) + + # 2.5E-3 provides aroud 50/50 ratio + l_vis = 0.5 * 2.5E-3 * self.vis_criterion(vis_pred, vis_gt) + + # print(l_vis) + loss_vis += l_vis + + loss /= num_joints + loss_vis /= num_joints + return (loss * (1 - self.vis_ratio) + loss_vis * self.vis_ratio), [loss, loss_vis] diff --git a/lib/dataset/JointsDataset.py b/lib/dataset/JointsDataset.py new file mode 100644 index 0000000..5a39781 --- /dev/null +++ b/lib/dataset/JointsDataset.py @@ -0,0 +1,231 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import copy +import logging +import random + +import cv2 +import numpy as np +import torch +from torch.utils.data import Dataset + +from utils.transforms import get_affine_transform +from utils.transforms import affine_transform +from utils.transforms import fliplr_joints + + +logger = logging.getLogger(__name__) + + +class JointsDataset(Dataset): + def __init__(self, cfg, root, image_set, is_train, transform=None): + self.num_joints = 0 + self.pixel_std = 200 + self.flip_pairs = [] + self.parent_ids = [] + + self.is_train = is_train + self.root = root + self.image_set = image_set + + self.output_path = cfg.OUTPUT_DIR + self.data_format = cfg.DATASET.DATA_FORMAT + + self.scale_factor = cfg.DATASET.SCALE_FACTOR + self.rotation_factor = cfg.DATASET.ROT_FACTOR + self.flip = cfg.DATASET.FLIP + + self.image_size = cfg.MODEL.IMAGE_SIZE + self.target_type = cfg.MODEL.EXTRA.TARGET_TYPE + self.heatmap_size = cfg.MODEL.EXTRA.HEATMAP_SIZE + self.sigma = cfg.MODEL.EXTRA.SIGMA + + self.transform = transform + self.db = [] + + def _get_db(self): + raise NotImplementedError + + def evaluate(self, cfg, preds, output_dir, *args, **kwargs): + raise NotImplementedError + + def __len__(self,): + return len(self.db) + + def __getitem__(self, idx): + db_rec = copy.deepcopy(self.db[idx]) + + image_file = db_rec['image'] + image_file = image_file.replace('\\', '/') + + filename = db_rec['filename'] if 'filename' in db_rec else '' + imgnum = db_rec['imgnum'] if 'imgnum' in db_rec else '' + + if self.data_format == 'zip': + from utils import zipreader + data_numpy = zipreader.imread( + image_file, cv2.IMREAD_COLOR | cv2.IMREAD_IGNORE_ORIENTATION) + else: + data_numpy = cv2.imread( + image_file, cv2.IMREAD_COLOR | cv2.IMREAD_IGNORE_ORIENTATION) + + if data_numpy is None: + logger.error('=> fail to read {}'.format(image_file)) + raise ValueError('Fail to read {}'.format(image_file)) + + joints = db_rec['joints_3d'] + joints_vis = db_rec['joints_3d_vis'] + + c = db_rec['center'] + s = db_rec['scale'] + score = db_rec['score'] if 'score' in db_rec else 1 + r = 0 + + if self.is_train: + sf = self.scale_factor + rf = self.rotation_factor + s = s * np.clip(np.random.randn()*sf + 1, 1 - sf, 1 + sf) + r = np.clip(np.random.randn()*rf, -rf*2, rf*2) \ + if random.random() <= 0.6 else 0 + + if self.flip and random.random() <= 0.5: + data_numpy = data_numpy[:, ::-1, :] + joints, joints_vis = fliplr_joints( + joints, joints_vis, data_numpy.shape[1], self.flip_pairs) + c[0] = data_numpy.shape[1] - c[0] - 1 + + trans = get_affine_transform(c, s, r, self.image_size) + input = cv2.warpAffine( + data_numpy, + trans, + (int(self.image_size[0]), int(self.image_size[1])), + flags=cv2.INTER_LINEAR) + + if self.transform: + input = self.transform(input) + + # target_vis = np.zeros((self.num_joints, 3), dtype=np.float) + target_vis = np.zeros((self.num_joints), dtype=np.long) + for i in range(self.num_joints): + if joints_vis[i, 0] > 0.0: + joints[i, 0:2] = affine_transform(joints[i, 0:2], trans) + # target_vis[i, int(joints_vis[i, 0])] = 1.0 + target_vis[i] = int(joints_vis[i, 0]) + + # target_vis = torch.from_numpy(target_vis).float() + target_vis = torch.from_numpy(target_vis).long() + + target, target_weight = self.generate_target(joints, joints_vis) + + target = torch.from_numpy(target) + target_weight = torch.from_numpy(target_weight) + + meta = { + 'image': image_file, + 'filename': filename, + 'imgnum': imgnum, + 'joints': joints, + 'joints_vis': joints_vis, + 'center': c, + 'scale': s, + 'rotation': r, + 'score': score + } + + return input, target, target_weight, target_vis, meta + + def select_data(self, db): + db_selected = [] + for rec in db: + num_vis = 0 + joints_x = 0.0 + joints_y = 0.0 + for joint, joint_vis in zip( + rec['joints_3d'], rec['joints_3d_vis']): + if joint_vis[0] <= 0: + continue + num_vis += 1 + + joints_x += joint[0] + joints_y += joint[1] + if num_vis == 0: + continue + + joints_x, joints_y = joints_x / num_vis, joints_y / num_vis + + area = rec['scale'][0] * rec['scale'][1] * (self.pixel_std**2) + joints_center = np.array([joints_x, joints_y]) + bbox_center = np.array(rec['center']) + diff_norm2 = np.linalg.norm((joints_center-bbox_center), 2) + ks = np.exp(-1.0*(diff_norm2**2) / ((0.2)**2*2.0*area)) + + metric = (0.2 / 16) * num_vis + 0.45 - 0.2 / 16 + if ks > metric: + db_selected.append(rec) + + logger.info('=> num db: {}'.format(len(db))) + logger.info('=> num selected db: {}'.format(len(db_selected))) + return db_selected + + def generate_target(self, joints, joints_vis): + ''' + :param joints: [num_joints, 3] + :param joints_vis: [num_joints, 3] + :return: target, target_weight(1: visible, 0: invisible) + ''' + target_weight = np.ones((self.num_joints, 1), dtype=np.float32) + target_weight[:, 0] *= (joints_vis[:, 0] > 0) + + assert self.target_type == 'gaussian', \ + 'Only support gaussian map now!' + + if self.target_type == 'gaussian': + target = np.zeros((self.num_joints, + self.heatmap_size[1], + self.heatmap_size[0]), + dtype=np.float32) + + tmp_size = self.sigma * 3 + + for joint_id in range(self.num_joints): + feat_stride = self.image_size / self.heatmap_size + mu_x = int(joints[joint_id][0] / feat_stride[0] + 0.5) + mu_y = int(joints[joint_id][1] / feat_stride[1] + 0.5) + # Check that any part of the gaussian is in-bounds + ul = [int(mu_x - tmp_size), int(mu_y - tmp_size)] + br = [int(mu_x + tmp_size + 1), int(mu_y + tmp_size + 1)] + if ul[0] >= self.heatmap_size[0] or ul[1] >= self.heatmap_size[1] \ + or br[0] < 0 or br[1] < 0: + # If not, just return the image as is + target_weight[joint_id] = 0 + continue + + # # Generate gaussian + size = 2 * tmp_size + 1 + x = np.arange(0, size, 1, np.float32) + y = x[:, np.newaxis] + x0 = y0 = size // 2 + # The gaussian is not normalized, we want the center value to equal 1 + g = np.exp(- ((x - x0) ** 2 + (y - y0) ** 2) / (2 * self.sigma ** 2)) + + # Usable gaussian range + g_x = max(0, -ul[0]), min(br[0], self.heatmap_size[0]) - ul[0] + g_y = max(0, -ul[1]), min(br[1], self.heatmap_size[1]) - ul[1] + # Image range + img_x = max(0, ul[0]), min(br[0], self.heatmap_size[0]) + img_y = max(0, ul[1]), min(br[1], self.heatmap_size[1]) + + v = target_weight[joint_id] + if v > 0.5: + target[joint_id][img_y[0]:img_y[1], img_x[0]:img_x[1]] = \ + g[g_y[0]:g_y[1], g_x[0]:g_x[1]] + + return target, target_weight diff --git a/lib/dataset/__init__.py b/lib/dataset/__init__.py new file mode 100644 index 0000000..144268e --- /dev/null +++ b/lib/dataset/__init__.py @@ -0,0 +1,14 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from .mpii import MPIIDataset as mpii +from .coco import COCODataset as coco +from .dripe import DriPEDataset as dripe +from .demo_loader import DemoLoader as demo_loader \ No newline at end of file diff --git a/lib/dataset/coco.py b/lib/dataset/coco.py new file mode 100644 index 0000000..37a2d52 --- /dev/null +++ b/lib/dataset/coco.py @@ -0,0 +1,412 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import logging +import os +import pickle +from collections import defaultdict +from collections import OrderedDict + +import json_tricks as json +import numpy as np +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval + +from dataset.JointsDataset import JointsDataset +from nms.nms import oks_nms + +logger = logging.getLogger(__name__) + + +class COCODataset(JointsDataset): + ''' + "keypoints": { + 0: "nose", + 1: "left_eye", + 2: "right_eye", + 3: "left_ear", + 4: "right_ear", + 5: "left_shoulder", + 6: "right_shoulder", + 7: "left_elbow", + 8: "right_elbow", + 9: "left_wrist", + 10: "right_wrist", + 11: "left_hip", + 12: "right_hip", + 13: "left_knee", + 14: "right_knee", + 15: "left_ankle", + 16: "right_ankle" + }, + "skeleton": [ + [16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13], [6,7],[6,8], + [7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]] + ''' + + def __init__(self, cfg, root, image_set, is_train, transform=None): + super().__init__(cfg, root, image_set, is_train, transform) + self.nms_thre = cfg.TEST.NMS_THRE + self.image_thre = cfg.TEST.IMAGE_THRE + self.oks_thre = cfg.TEST.OKS_THRE + self.in_vis_thre = cfg.TEST.IN_VIS_THRE + self.bbox_file = cfg.TEST.COCO_BBOX_FILE + self.use_gt_bbox = cfg.TEST.USE_GT_BBOX + self.image_width = cfg.MODEL.IMAGE_SIZE[0] + self.image_height = cfg.MODEL.IMAGE_SIZE[1] + self.aspect_ratio = self.image_width * 1.0 / self.image_height + self.pixel_std = 200 + self.coco = COCO(self._get_ann_file_keypoint()) + + # deal with class names + cats = [cat['name'] + for cat in self.coco.loadCats(self.coco.getCatIds())] + self.classes = ['__background__'] + cats + logger.info('=> classes: {}'.format(self.classes)) + self.num_classes = len(self.classes) + self._class_to_ind = dict(zip(self.classes, range(self.num_classes))) + self._class_to_coco_ind = dict(zip(cats, self.coco.getCatIds())) + self._coco_ind_to_class_ind = dict([(self._class_to_coco_ind[cls], + self._class_to_ind[cls]) + for cls in self.classes[1:]]) + + # load image file names + self.image_set_index = self._load_image_set_index() + self.num_images = len(self.image_set_index) + logger.info('=> num_images: {}'.format(self.num_images)) + + self.num_joints = 17 + self.flip_pairs = [[1, 2], [3, 4], [5, 6], [7, 8], + [9, 10], [11, 12], [13, 14], [15, 16]] + self.parent_ids = None + + self.db = self._get_db() + + if is_train and cfg.DATASET.SELECT_DATA: + self.db = self.select_data(self.db) + + logger.info('=> load {} samples'.format(len(self.db))) + + def _get_ann_file_keypoint(self): + """ self.root / annotations / person_keypoints_train2017.json """ + prefix = 'person_keypoints' \ + if 'test' not in self.image_set else 'image_info' + return os.path.join(self.root, 'annotations', + prefix + '_' + self.image_set + '.json') + + def _load_image_set_index(self): + """ image id: int """ + image_ids = self.coco.getImgIds() + return image_ids + + def _get_db(self): + if self.is_train or self.use_gt_bbox: + # use ground truth bbox + gt_db = self._load_coco_keypoint_annotations() + else: + # use bbox from detection + gt_db = self._load_coco_person_detection_results() + return gt_db + + def _load_coco_keypoint_annotations(self): + """ ground truth bbox and keypoints """ + gt_db = [] + for index in self.image_set_index: + gt_db.extend(self._load_coco_keypoint_annotation_kernal(index)) + return gt_db + + def _load_coco_keypoint_annotation_kernal(self, index): + """ + coco ann: [u'segmentation', u'area', u'iscrowd', u'image_id', u'bbox', u'category_id', u'id'] + iscrowd: + crowd instances are handled by marking their overlaps with all categories to -1 + and later excluded in training + bbox: + [x1, y1, w, h] + :param index: coco image id + :return: db entry + """ + im_ann = self.coco.loadImgs(index)[0] + width = im_ann['width'] + height = im_ann['height'] + + annIds = self.coco.getAnnIds(imgIds=index, iscrowd=False) + objs = self.coco.loadAnns(annIds) + + # sanitize bboxes + valid_objs = [] + for obj in objs: + x, y, w, h = obj['bbox'] + x1 = np.max((0, x)) + y1 = np.max((0, y)) + x2 = np.min((width - 1, x1 + np.max((0, w - 1)))) + y2 = np.min((height - 1, y1 + np.max((0, h - 1)))) + if obj['area'] > 0 and x2 >= x1 and y2 >= y1: + # obj['clean_bbox'] = [x1, y1, x2, y2] + obj['clean_bbox'] = [x1, y1, x2 - x1, y2 - y1] + valid_objs.append(obj) + objs = valid_objs + + rec = [] + for obj in objs: + cls = self._coco_ind_to_class_ind[obj['category_id']] + if cls != 1: + continue + + # ignore objs without keypoints annotation + if max(obj['keypoints']) == 0: + continue + + joints_3d = np.zeros((self.num_joints, 3), dtype=np.float) + joints_3d_vis = np.zeros((self.num_joints, 3), dtype=np.float) + for ipt in range(self.num_joints): + joints_3d[ipt, 0] = obj['keypoints'][ipt * 3 + 0] + joints_3d[ipt, 1] = obj['keypoints'][ipt * 3 + 1] + joints_3d[ipt, 2] = 0 + t_vis = obj['keypoints'][ipt * 3 + 2] + # if t_vis > 1: + # t_vis = 1 + joints_3d_vis[ipt, 0] = t_vis + joints_3d_vis[ipt, 1] = t_vis + joints_3d_vis[ipt, 2] = 0 + + center, scale = self._box2cs(obj['clean_bbox'][:4]) + rec.append({ + 'image': self.image_path_from_index(index), + 'center': center, + 'scale': scale, + 'joints_3d': joints_3d, + 'joints_3d_vis': joints_3d_vis, + 'filename': '', + 'imgnum': 0, + }) + + return rec + + def _box2cs(self, box): + x, y, w, h = box[:4] + return self._xywh2cs(x, y, w, h) + + def _xywh2cs(self, x, y, w, h): + center = np.zeros((2), dtype=np.float32) + center[0] = x + w * 0.5 + center[1] = y + h * 0.5 + + if w > self.aspect_ratio * h: + h = w * 1.0 / self.aspect_ratio + elif w < self.aspect_ratio * h: + w = h * self.aspect_ratio + scale = np.array( + [w * 1.0 / self.pixel_std, h * 1.0 / self.pixel_std], + dtype=np.float32) + if center[0] != -1: + scale = scale * 1.25 + + return center, scale + + def image_path_from_index(self, index): + """ example: images / train2017 / 000000119993.jpg """ + file_name = '%012d.jpg' % index + if '2014' in self.image_set: + file_name = 'COCO_%s_' % self.image_set + file_name + + prefix = 'test2017' if 'test' in self.image_set else self.image_set + + data_name = prefix + '.zip@' if self.data_format == 'zip' else prefix + + image_path = os.path.join( + self.root, 'images', data_name, file_name) + + return image_path + + def _load_coco_person_detection_results(self): + all_boxes = None + with open(self.bbox_file, 'r') as f: + all_boxes = json.load(f) + + if not all_boxes: + logger.error('=> Load %s fail!' % self.bbox_file) + return None + + logger.info('=> Total boxes: {}'.format(len(all_boxes))) + + kpt_db = [] + num_boxes = 0 + for n_img in range(0, len(all_boxes)): + det_res = all_boxes[n_img] + if det_res['category_id'] != 1: + continue + img_name = self.image_path_from_index(det_res['image_id']) + box = det_res['bbox'] + score = det_res['score'] + + if score < self.image_thre: + continue + + num_boxes = num_boxes + 1 + + center, scale = self._box2cs(box) + joints_3d = np.zeros((self.num_joints, 3), dtype=np.float) + joints_3d_vis = np.ones( + (self.num_joints, 3), dtype=np.float) + kpt_db.append({ + 'image': img_name, + 'center': center, + 'scale': scale, + 'score': score, + 'joints_3d': joints_3d, + 'joints_3d_vis': joints_3d_vis, + }) + + logger.info('=> Total boxes after filter low score@{}: {}'.format( + self.image_thre, num_boxes)) + return kpt_db + + # need double check this API and classes field + def evaluate(self, cfg, preds, output_dir, all_boxes, img_path, + *args, **kwargs): + res_folder = os.path.join(output_dir, 'results') + if not os.path.exists(res_folder): + os.makedirs(res_folder) + res_file = os.path.join( + res_folder, 'keypoints_%s_results.json' % self.image_set) + if 'res_file' in kwargs: + res_file = kwargs['res_file'] + + # person x (keypoints) + _kpts = [] + for idx, kpt in enumerate(preds): + _kpts.append({ + 'keypoints': kpt, + 'center': all_boxes[idx][0:2], + 'scale': all_boxes[idx][2:4], + 'area': all_boxes[idx][4], + 'score': all_boxes[idx][5], + 'image': int(img_path[idx][-16:-4]) + }) + # image x person x (keypoints) + kpts = defaultdict(list) + for kpt in _kpts: + kpts[kpt['image']].append(kpt) + + # rescoring and oks nms + num_joints = self.num_joints + in_vis_thre = self.in_vis_thre + oks_thre = self.oks_thre + oks_nmsed_kpts = [] + + for img in kpts.keys(): + img_kpts = kpts[img] + for n_p in img_kpts: + box_score = n_p['score'] + kpt_score = 0 + valid_num = 0 + for n_jt in range(0, num_joints): + t_s = n_p['keypoints'][n_jt][2] + if t_s > in_vis_thre: + kpt_score = kpt_score + t_s + valid_num = valid_num + 1 + if valid_num != 0: + kpt_score = kpt_score / valid_num + # rescoring + n_p['score'] = kpt_score * box_score + keep = oks_nms([img_kpts[i] for i in range(len(img_kpts))], + oks_thre) + if len(keep) == 0: + oks_nmsed_kpts.append(img_kpts) + else: + oks_nmsed_kpts.append([img_kpts[_keep] for _keep in keep]) + + self._write_coco_keypoint_results( + oks_nmsed_kpts, res_file) + if 'test' not in self.image_set: + info_str = self._do_python_keypoint_eval( + res_file, res_folder) + name_value = OrderedDict(info_str) + return name_value, name_value['AP'] + else: + return {'Null': 0}, 0 + + def _write_coco_keypoint_results(self, keypoints, res_file): + data_pack = [{'cat_id': self._class_to_coco_ind[cls], + 'cls_ind': cls_ind, + 'cls': cls, + 'ann_type': 'keypoints', + 'keypoints': keypoints + } + for cls_ind, cls in enumerate(self.classes) if not cls == '__background__'] + + results = self._coco_keypoint_results_one_category_kernel(data_pack[0]) + logger.info('=> Writing results json to %s' % res_file) + with open(res_file, 'w') as f: + json.dump(results, f, sort_keys=True, indent=4) + try: + json.load(open(res_file)) + except Exception: + content = [] + with open(res_file, 'r') as f: + for line in f: + content.append(line) + content[-1] = ']' + with open(res_file, 'w') as f: + for c in content: + f.write(c) + + def _coco_keypoint_results_one_category_kernel(self, data_pack): + cat_id = data_pack['cat_id'] + keypoints = data_pack['keypoints'] + cat_results = [] + + for img_kpts in keypoints: + if len(img_kpts) == 0: + continue + + _key_points = np.array([img_kpts[k]['keypoints'] + for k in range(len(img_kpts))]) + key_points = np.zeros( + (_key_points.shape[0], self.num_joints * 3), dtype=np.float) + + for ipt in range(self.num_joints): + key_points[:, ipt * 3 + 0] = _key_points[:, ipt, 0] + key_points[:, ipt * 3 + 1] = _key_points[:, ipt, 1] + key_points[:, ipt * 3 + 2] = _key_points[:, ipt, 2] # keypoints score. + + result = [{'image_id': img_kpts[k]['image'], + 'category_id': cat_id, + 'keypoints': list(key_points[k]), + 'score': img_kpts[k]['score'], + 'center': list(img_kpts[k]['center']), + 'scale': list(img_kpts[k]['scale']) + } for k in range(len(img_kpts))] + cat_results.extend(result) + + return cat_results + + def _do_python_keypoint_eval(self, res_file, res_folder): + coco_dt = self.coco.loadRes(res_file) + coco_eval = COCOeval(self.coco, coco_dt, 'keypoints') + coco_eval.params.useSegm = None + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + stats_names = ['AP', 'Ap .5', 'AP .75', 'AP (M)', 'AP (L)', 'AR', 'AR .5', 'AR .75', 'AR (M)', 'AR (L)'] + + info_str = [] + for ind, name in enumerate(stats_names): + info_str.append((name, coco_eval.stats[ind])) + + eval_file = os.path.join( + res_folder, 'keypoints_%s_results.pkl' % self.image_set) + + with open(eval_file, 'wb') as f: + pickle.dump(coco_eval, f, pickle.HIGHEST_PROTOCOL) + logger.info('=> coco eval results saved to %s' % eval_file) + + return info_str diff --git a/lib/dataset/demo_loader.py b/lib/dataset/demo_loader.py new file mode 100644 index 0000000..f317fdf --- /dev/null +++ b/lib/dataset/demo_loader.py @@ -0,0 +1,188 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import logging +import copy +import os +import pickle +from collections import defaultdict +from collections import OrderedDict +import glob +import json_tricks as json +import random + +import numpy as np +import cv2 +import torch +from torch.utils.data import Dataset + +from dataset.JointsDataset import get_affine_transform +from utils.transforms import get_affine_transform +from utils.transforms import affine_transform + +logger = logging.getLogger(__name__) + + +class DemoLoader(Dataset): + ''' + "keypoints": { + 0: "nose", + 1: "left_eye", + 2: "right_eye", + 3: "left_ear", + 4: "right_ear", + 5: "left_shoulder", + 6: "right_shoulder", + 7: "left_elbow", + 8: "right_elbow", + 9: "left_wrist", + 10: "right_wrist", + 11: "left_hip", + 12: "right_hip", + 13: "left_knee", + 14: "right_knee", + 15: "left_ankle", + 16: "right_ankle" + }, + "skeleton": [ + [16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13], [6,7],[6,8], + [7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]] + ''' + + def __init__(self, cfg, root, image_set, is_train, transform=None): + self.nms_thre = cfg.TEST.NMS_THRE + self.image_thre = cfg.TEST.IMAGE_THRE + self.oks_thre = cfg.TEST.OKS_THRE + self.in_vis_thre = cfg.TEST.IN_VIS_THRE + self.bbox_file = cfg.TEST.COCO_BBOX_FILE + self.use_gt_bbox = cfg.TEST.USE_GT_BBOX + self.image_width = cfg.MODEL.IMAGE_SIZE[0] + self.image_height = cfg.MODEL.IMAGE_SIZE[1] + self.aspect_ratio = self.image_width * 1.0 / self.image_height + self.pixel_std = 200 + + # load image file names + self.image_size = cfg.MODEL.IMAGE_SIZE + self.image_list = glob.glob('demo/*.png') + glob.glob('demo/*.jpg') + glob.glob('demo/*.jpeg') + self.num_images = len(self.image_list) + logger.info('=> num_images: {}'.format(self.num_images)) + + self.is_train = False + self.root = root + self.image_set = image_set + self.transform = transform + self.num_joints = 17 + + def __len__(self, ): + return len(self.image_list) + + def __getitem__(self, idx): + image_file = self.image_list[idx] + image_file = image_file.replace('\\', '/') + + data_numpy = cv2.imread( + image_file, cv2.IMREAD_COLOR | cv2.IMREAD_IGNORE_ORIENTATION) + + if data_numpy is None: + logger.error('=> fail to read {}'.format(image_file)) + raise ValueError('Fail to read {}'.format(image_file)) + + c, s = self._get_cs(data_numpy.shape) + r = 0 + + trans = get_affine_transform(c, s, r, self.image_size) + input = cv2.warpAffine( + data_numpy, + trans, + (int(self.image_size[0]), int(self.image_size[1])), + flags=cv2.INTER_LINEAR) + + if self.transform: + input = self.transform(input) + + meta = { + 'image': image_file, + 'center': c, + 'scale': s, + 'rotation': r, + } + + return input, meta + + def _get_cs(self, img_shape): + h, w = img_shape[:2] + + center = np.zeros((2), dtype=np.float32) + center[0] = w * 0.5 + center[1] = h * 0.5 + + if w > self.aspect_ratio * h: + h = w * 1.0 / self.aspect_ratio + elif w < self.aspect_ratio * h: + w = h * self.aspect_ratio + scale = np.array( + [w * 1.0 / self.pixel_std, h * 1.0 / self.pixel_std], + dtype=np.float32) + if center[0] != -1: + scale = scale * 1.25 + + return center, scale + + def _write_coco_keypoint_results(self, keypoints, res_file): + data_pack = [ + { + 'ann_type': 'keypoints', + 'keypoints': keypoints + } + ] + + results = self._coco_keypoint_results_one_category_kernel(data_pack[0]) + logger.info('=> Writing results json to %s' % res_file) + with open(res_file, 'w') as f: + json.dump(results, f, sort_keys=True, indent=4) + try: + json.load(open(res_file)) + except Exception: + content = [] + with open(res_file, 'r') as f: + for line in f: + content.append(line) + content[-1] = ']' + with open(res_file, 'w') as f: + for c in content: + f.write(c) + + def _coco_keypoint_results_one_category_kernel(self, data_pack): + keypoints = data_pack['keypoints'] + cat_results = [] + + for img_kpts in keypoints: + if len(img_kpts) == 0: + continue + + _key_points = np.array([img_kpts[k]['keypoints'] + for k in range(len(img_kpts))]) + key_points = np.zeros( + (_key_points.shape[0], self.num_joints * 3), dtype=np.float) + + for ipt in range(self.num_joints): + key_points[:, ipt * 3 + 0] = _key_points[:, ipt, 0] + key_points[:, ipt * 3 + 1] = _key_points[:, ipt, 1] + key_points[:, ipt * 3 + 2] = _key_points[:, ipt, 2] # keypoints score. + + result = [{'image_id': img_kpts[k]['image'], + 'keypoints': list(key_points[k]), + 'score': img_kpts[k]['score'], + 'center': list(img_kpts[k]['center']), + 'scale': list(img_kpts[k]['scale']) + } for k in range(len(img_kpts))] + cat_results.extend(result) + + return cat_results diff --git a/lib/dataset/dripe.py b/lib/dataset/dripe.py new file mode 100644 index 0000000..7705945 --- /dev/null +++ b/lib/dataset/dripe.py @@ -0,0 +1,417 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import logging +import os +import pickle +from collections import defaultdict +from collections import OrderedDict + +import json_tricks as json +import numpy as np +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval + +from dataset.JointsDataset import JointsDataset +from nms.nms import oks_nms + + +logger = logging.getLogger(__name__) + + +class DriPEDataset(JointsDataset): + ''' + "keypoints": { + 0: "nose", + 1: "left_eye", + 2: "right_eye", + 3: "left_ear", + 4: "right_ear", + 5: "left_shoulder", + 6: "right_shoulder", + 7: "left_elbow", + 8: "right_elbow", + 9: "left_wrist", + 10: "right_wrist", + 11: "left_hip", + 12: "right_hip", + 13: "left_knee", + 14: "right_knee", + 15: "left_ankle", + 16: "right_ankle" + }, + "skeleton": [ + [16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13], [6,7],[6,8], + [7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]] + ''' + def __init__(self, cfg, root, image_set, is_train, transform=None): + super().__init__(cfg, root, image_set, is_train, transform) + self.nms_thre = cfg.TEST.NMS_THRE + self.image_thre = cfg.TEST.IMAGE_THRE + self.oks_thre = cfg.TEST.OKS_THRE + self.in_vis_thre = cfg.TEST.IN_VIS_THRE + self.bbox_file = cfg.TEST.COCO_BBOX_FILE + self.use_gt_bbox = cfg.TEST.USE_GT_BBOX + self.image_width = cfg.MODEL.IMAGE_SIZE[0] + self.image_height = cfg.MODEL.IMAGE_SIZE[1] + self.aspect_ratio = self.image_width * 1.0 / self.image_height + self.pixel_std = 200 + self.coco = COCO(self._get_ann_file_keypoint()) + self.ids_to_name = dict([(im['id'], im['file_name']) for im in self.coco.imgs.values()]) + self.name_to_ids = dict([(im['file_name'], im['id']) for im in self.coco.imgs.values()]) + + + # deal with class names + cats = [cat['name'] + for cat in self.coco.loadCats(self.coco.getCatIds())] + self.classes = ['__background__'] + cats + logger.info('=> classes: {}'.format(self.classes)) + self.num_classes = len(self.classes) + self._class_to_ind = dict(zip(self.classes, range(self.num_classes))) + self._class_to_coco_ind = dict(zip(cats, self.coco.getCatIds())) + self._coco_ind_to_class_ind = dict([(self._class_to_coco_ind[cls], + self._class_to_ind[cls]) + for cls in self.classes[1:]]) + + # load image file names + self.image_set_index = self._load_image_set_index() + self.num_images = len(self.image_set_index) + logger.info('=> num_images: {}'.format(self.num_images)) + + self.num_joints = 17 + self.flip_pairs = [[1, 2], [3, 4], [5, 6], [7, 8], + [9, 10], [11, 12], [13, 14], [15, 16]] + self.parent_ids = None + + self.db = self._get_db() + + if is_train and cfg.DATASET.SELECT_DATA: + self.db = self.select_data(self.db) + + logger.info('=> load {} samples'.format(len(self.db))) + + def _get_ann_file_keypoint(self): + """ self.root / annotations / person_keypoints_train2017.json """ + prefix = 'dripe_coco' + + return os.path.join(self.root, 'annotations', self.image_set + '.json') + + def _load_image_set_index(self): + """ image id: int """ + image_ids = self.coco.getImgIds() + return image_ids + + def _get_db(self): + if self.is_train or self.use_gt_bbox: + # use ground truth bbox + gt_db = self._load_coco_keypoint_annotations() + else: + # use bbox from detection + gt_db = self._load_coco_person_detection_results() + return gt_db + + def _load_coco_keypoint_annotations(self): + """ ground truth bbox and keypoints """ + gt_db = [] + for index in self.image_set_index: + gt_db.extend(self._load_coco_keypoint_annotation_kernal(index)) + return gt_db + + def _load_coco_keypoint_annotation_kernal(self, index): + """ + coco ann: [u'segmentation', u'area', u'iscrowd', u'image_id', u'bbox', u'category_id', u'id'] + iscrowd: + crowd instances are handled by marking their overlaps with all categories to -1 + and later excluded in training + bbox: + [x1, y1, w, h] + :param index: coco image id + :return: db entry + """ + im_ann = self.coco.loadImgs(index)[0] + width = im_ann['width'] + height = im_ann['height'] + + annIds = self.coco.getAnnIds(imgIds=index, iscrowd=False) + objs = self.coco.loadAnns(annIds) + + # sanitize bboxes + valid_objs = [] + for obj in objs: + x, y, w, h = obj['bbox'] + x1 = np.max((0, x)) + y1 = np.max((0, y)) + x2 = np.min((width - 1, x1 + np.max((0, w - 1)))) + y2 = np.min((height - 1, y1 + np.max((0, h - 1)))) + if obj['area'] > 0 and x2 >= x1 and y2 >= y1: + # obj['clean_bbox'] = [x1, y1, x2, y2] + obj['clean_bbox'] = [x1, y1, x2-x1, y2-y1] + valid_objs.append(obj) + objs = valid_objs + + rec = [] + for obj in objs: + cls = self._coco_ind_to_class_ind[obj['category_id']] + if cls != 1: + continue + + # ignore objs without keypoints annotation + if max(obj['keypoints']) == 0: + continue + + joints_3d = np.zeros((self.num_joints, 3), dtype=np.float) + joints_3d_vis = np.zeros((self.num_joints, 3), dtype=np.float) + for ipt in range(self.num_joints): + joints_3d[ipt, 0] = obj['keypoints'][ipt * 3 + 0] + joints_3d[ipt, 1] = obj['keypoints'][ipt * 3 + 1] + joints_3d[ipt, 2] = 0 + t_vis = obj['keypoints'][ipt * 3 + 2] + # if t_vis > 1: + # t_vis = 1 + joints_3d_vis[ipt, 0] = t_vis + joints_3d_vis[ipt, 1] = t_vis + joints_3d_vis[ipt, 2] = 0 + + center, scale = self._box2cs(obj['clean_bbox'][:4]) + rec.append({ + 'image': self.image_path_from_index(index), + 'center': center, + 'scale': scale, + 'joints_3d': joints_3d, + 'joints_3d_vis': joints_3d_vis, + 'filename': '', + 'imgnum': 0, + }) + + return rec + + def _box2cs(self, box): + x, y, w, h = box[:4] + return self._xywh2cs(x, y, w, h) + + def _xywh2cs(self, x, y, w, h): + center = np.zeros((2), dtype=np.float32) + center[0] = x + w * 0.5 + center[1] = y + h * 0.5 + + if w > self.aspect_ratio * h: + h = w * 1.0 / self.aspect_ratio + elif w < self.aspect_ratio * h: + w = h * self.aspect_ratio + scale = np.array( + [w * 1.0 / self.pixel_std, h * 1.0 / self.pixel_std], + dtype=np.float32) + if center[0] != -1: + scale = scale * 1.25 + + return center, scale + + def image_path_from_index(self, index): + """ example: images / train2017 / 000000119993.jpg """ + file_name = self.ids_to_name[index] + data_name = self.image_set + + image_path = os.path.join( + # self.root, 'images', file_name) + self.root, 'images', file_name) + + return image_path + + def _load_coco_person_detection_results(self): + all_boxes = None + with open(self.bbox_file, 'r') as f: + all_boxes = json.load(f) + + if not all_boxes: + logger.error('=> Load %s fail!' % self.bbox_file) + return None + + logger.info('=> Total boxes: {}'.format(len(all_boxes))) + + kpt_db = [] + num_boxes = 0 + for n_img in range(0, len(all_boxes)): + det_res = all_boxes[n_img] + if det_res['category_id'] != 1: + continue + img_name = self.image_path_from_index(det_res['image_id']) + box = det_res['bbox'] + score = det_res['score'] + + if score < self.image_thre: + continue + + num_boxes = num_boxes + 1 + + center, scale = self._box2cs(box) + joints_3d = np.zeros((self.num_joints, 3), dtype=np.float) + joints_3d_vis = np.ones( + (self.num_joints, 3), dtype=np.float) + kpt_db.append({ + 'image': img_name, + 'center': center, + 'scale': scale, + 'score': score, + 'joints_3d': joints_3d, + 'joints_3d_vis': joints_3d_vis, + }) + + logger.info('=> Total boxes after fiter low score@{}: {}'.format( + self.image_thre, num_boxes)) + return kpt_db + + # need double check this API and classes field + def evaluate(self, cfg, preds, output_dir, all_boxes, img_path, + *args, **kwargs): + res_folder = os.path.join(output_dir, 'results') + if not os.path.exists(res_folder): + os.makedirs(res_folder) + res_file = os.path.join( + res_folder, 'keypoints_%s_results.json' % self.image_set) + if 'res_file' in kwargs: + res_file = kwargs['res_file'] + + # person x (keypoints) + _kpts = [] + for idx, kpt in enumerate(preds): + _kpts.append({ + 'keypoints': kpt, + 'center': all_boxes[idx][0:2], + 'scale': all_boxes[idx][2:4], + 'area': all_boxes[idx][4], + 'score': all_boxes[idx][5], + 'image': int(self.name_to_ids[img_path[idx].split('/')[-1]]) + }) + # image x person x (keypoints) + kpts = defaultdict(list) + + for kpt in _kpts: + kpts[kpt['image']].append(kpt) + + print('Welcome to evaluate\nLen pred: {}\tLen _kpts: {}\tLen kpts: {}'.format(len(preds), len(_kpts), len(kpts))) + + # rescoring and oks nms + num_joints = self.num_joints + in_vis_thre = self.in_vis_thre + oks_thre = self.oks_thre + oks_nmsed_kpts = [] + for img in kpts.keys(): + img_kpts = kpts[img] + for n_p in img_kpts: + box_score = n_p['score'] + kpt_score = 0 + valid_num = 0 + for n_jt in range(0, num_joints): + t_s = n_p['keypoints'][n_jt][2] + if t_s > in_vis_thre: + kpt_score = kpt_score + t_s + valid_num = valid_num + 1 + if valid_num != 0: + kpt_score = kpt_score / valid_num + + # rescoring + n_p['score'] = kpt_score * box_score + keep = oks_nms([img_kpts[i] for i in range(len(img_kpts))], + oks_thre) + if len(keep) == 0: + oks_nmsed_kpts.append(img_kpts) + else: + oks_nmsed_kpts.append([img_kpts[_keep] for _keep in keep]) + + self._write_coco_keypoint_results( + oks_nmsed_kpts, res_file) + + ''' + if 'test' not in self.image_set: + + else: + return {'Null': 0}, 0 + ''' + info_str = self._do_python_keypoint_eval( + res_file, res_folder) + name_value = OrderedDict(info_str) + return name_value, name_value['AP'] + + def _write_coco_keypoint_results(self, keypoints, res_file): + data_pack = [{'cat_id': self._class_to_coco_ind[cls], + 'cls_ind': cls_ind, + 'cls': cls, + 'ann_type': 'keypoints', + 'keypoints': keypoints + } + for cls_ind, cls in enumerate(self.classes) if not cls == '__background__'] + + results = self._coco_keypoint_results_one_category_kernel(data_pack[0]) + logger.info('=> Writing results json to %s' % res_file) + with open(res_file, 'w') as f: + json.dump(results, f, sort_keys=True, indent=4) + try: + json.load(open(res_file)) + except Exception: + content = [] + with open(res_file, 'r') as f: + for line in f: + content.append(line) + content[-1] = ']' + with open(res_file, 'w') as f: + for c in content: + f.write(c) + + def _coco_keypoint_results_one_category_kernel(self, data_pack): + cat_id = data_pack['cat_id'] + keypoints = data_pack['keypoints'] + cat_results = [] + + for img_kpts in keypoints: + if len(img_kpts) == 0: + continue + + _key_points = np.array([img_kpts[k]['keypoints'] + for k in range(len(img_kpts))]) + key_points = np.zeros( + (_key_points.shape[0], self.num_joints * 3), dtype=np.float) + + for ipt in range(self.num_joints): + key_points[:, ipt * 3 + 0] = _key_points[:, ipt, 0] + key_points[:, ipt * 3 + 1] = _key_points[:, ipt, 1] + key_points[:, ipt * 3 + 2] = _key_points[:, ipt, 2] # keypoints score. + + result = [{'image_id': img_kpts[k]['image'], + 'category_id': cat_id, + 'keypoints': list(key_points[k]), + 'score': img_kpts[k]['score'], + 'center': list(img_kpts[k]['center']), + 'scale': list(img_kpts[k]['scale']) + } for k in range(len(img_kpts))] + cat_results.extend(result) + + return cat_results + + def _do_python_keypoint_eval(self, res_file, res_folder): + coco_dt = self.coco.loadRes(res_file) + coco_eval = COCOeval(self.coco, coco_dt, 'keypoints') + coco_eval.params.useSegm = None + coco_eval.evaluate() + coco_eval.accumulate() + coco_eval.summarize() + stats_names = ['AP', 'Ap .5', 'AP .75', 'AP (M)', 'AP (L)', 'AR', 'AR .5', 'AR .75', 'AR (M)', 'AR (L)'] + + info_str = [] + for ind, name in enumerate(stats_names): + info_str.append((name, coco_eval.stats[ind])) + + eval_file = os.path.join( + res_folder, 'keypoints_%s_results.pkl' % self.image_set) + + with open(eval_file, 'wb') as f: + pickle.dump(coco_eval, f, pickle.HIGHEST_PROTOCOL) + logger.info('=> dripe eval results saved to %s' % eval_file) + + return info_str diff --git a/lib/dataset/mpii.py b/lib/dataset/mpii.py new file mode 100644 index 0000000..2cadb1a --- /dev/null +++ b/lib/dataset/mpii.py @@ -0,0 +1,176 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from collections import OrderedDict +import logging +import os +import json_tricks as json + +import numpy as np +from scipy.io import loadmat, savemat + +from dataset.JointsDataset import JointsDataset + + +logger = logging.getLogger(__name__) + + +class MPIIDataset(JointsDataset): + def __init__(self, cfg, root, image_set, is_train, transform=None): + super().__init__(cfg, root, image_set, is_train, transform) + + self.num_joints = 16 + self.flip_pairs = [[0, 5], [1, 4], [2, 3], [10, 15], [11, 14], [12, 13]] + self.parent_ids = [1, 2, 6, 6, 3, 4, 6, 6, 7, 8, 11, 12, 7, 7, 13, 14] + + self.db = self._get_db() + + if is_train and cfg.DATASET.SELECT_DATA: + self.db = self.select_data(self.db) + + logger.info('=> load {} samples'.format(len(self.db))) + + def _get_db(self): + # create train/val split + file_name = os.path.join(self.root, + 'annot', + self.image_set+'.json') + with open(file_name) as anno_file: + anno = json.load(anno_file) + + gt_db = [] + for a in anno: + image_name = a['image'] + + c = np.array(a['center'], dtype=np.float) + s = np.array([a['scale'], a['scale']], dtype=np.float) + + # Adjust center/scale slightly to avoid cropping limbs + if c[0] != -1: + c[1] = c[1] + 15 * s[1] + s = s * 1.25 + + # MPII uses matlab format, index is based 1, + # we should first convert to 0-based index + c = c - 1 + + joints_3d = np.zeros((self.num_joints, 3), dtype=np.float) + joints_3d_vis = np.zeros((self.num_joints, 3), dtype=np.float) + if self.image_set != 'test': + joints = np.array(a['joints']) + joints[:, 0:2] = joints[:, 0:2] - 1 + joints_vis = np.array(a['joints_vis']) + assert len(joints) == self.num_joints, \ + 'joint num diff: {} vs {}'.format(len(joints), + self.num_joints) + + joints_3d[:, 0:2] = joints[:, 0:2] + joints_3d_vis[:, 0] = joints_vis[:] + joints_3d_vis[:, 1] = joints_vis[:] + + image_dir = 'images.zip@' if self.data_format == 'zip' else 'images' + gt_db.append({ + 'image': os.path.join(self.root, image_dir, image_name), + 'center': c, + 'scale': s, + 'joints_3d': joints_3d, + 'joints_3d_vis': joints_3d_vis, + 'filename': '', + 'imgnum': 0, + }) + + return gt_db + + def evaluate(self, cfg, preds, output_dir, *args, **kwargs): + # convert 0-based index to 1-based index + preds = preds[:, :, 0:2] + 1.0 + + if output_dir: + pred_file = os.path.join(output_dir, 'pred.mat') + savemat(pred_file, mdict={'preds': preds}) + + if 'test' in cfg.DATASET.TEST_SET: + return {'Null': 0.0}, 0.0 + + SC_BIAS = 0.6 + threshold = 0.5 + + gt_file = os.path.join(cfg.DATASET.ROOT, + 'annot', + 'gt_{}.mat'.format(cfg.DATASET.TEST_SET)) + gt_dict = loadmat(gt_file) + dataset_joints = gt_dict['dataset_joints'] + jnt_missing = gt_dict['jnt_missing'] + pos_gt_src = gt_dict['pos_gt_src'] + headboxes_src = gt_dict['headboxes_src'] + + pos_pred_src = np.transpose(preds, [1, 2, 0]) + + head = np.where(dataset_joints == 'head')[1][0] + lsho = np.where(dataset_joints == 'lsho')[1][0] + lelb = np.where(dataset_joints == 'lelb')[1][0] + lwri = np.where(dataset_joints == 'lwri')[1][0] + lhip = np.where(dataset_joints == 'lhip')[1][0] + lkne = np.where(dataset_joints == 'lkne')[1][0] + lank = np.where(dataset_joints == 'lank')[1][0] + + rsho = np.where(dataset_joints == 'rsho')[1][0] + relb = np.where(dataset_joints == 'relb')[1][0] + rwri = np.where(dataset_joints == 'rwri')[1][0] + rkne = np.where(dataset_joints == 'rkne')[1][0] + rank = np.where(dataset_joints == 'rank')[1][0] + rhip = np.where(dataset_joints == 'rhip')[1][0] + + jnt_visible = 1 - jnt_missing + uv_error = pos_pred_src - pos_gt_src + uv_err = np.linalg.norm(uv_error, axis=1) + headsizes = headboxes_src[1, :, :] - headboxes_src[0, :, :] + headsizes = np.linalg.norm(headsizes, axis=0) + headsizes *= SC_BIAS + scale = np.multiply(headsizes, np.ones((len(uv_err), 1))) + scaled_uv_err = np.divide(uv_err, scale) + scaled_uv_err = np.multiply(scaled_uv_err, jnt_visible) + jnt_count = np.sum(jnt_visible, axis=1) + less_than_threshold = np.multiply((scaled_uv_err <= threshold), + jnt_visible) + PCKh = np.divide(100.*np.sum(less_than_threshold, axis=1), jnt_count) + + # save + rng = np.arange(0, 0.5+0.01, 0.01) + pckAll = np.zeros((len(rng), 16)) + + for r in range(len(rng)): + threshold = rng[r] + less_than_threshold = np.multiply(scaled_uv_err <= threshold, + jnt_visible) + pckAll[r, :] = np.divide(100.*np.sum(less_than_threshold, axis=1), + jnt_count) + + PCKh = np.ma.array(PCKh, mask=False) + PCKh.mask[6:8] = True + + jnt_count = np.ma.array(jnt_count, mask=False) + jnt_count.mask[6:8] = True + jnt_ratio = jnt_count / np.sum(jnt_count).astype(np.float64) + + name_value = [ + ('Head', PCKh[head]), + ('Shoulder', 0.5 * (PCKh[lsho] + PCKh[rsho])), + ('Elbow', 0.5 * (PCKh[lelb] + PCKh[relb])), + ('Wrist', 0.5 * (PCKh[lwri] + PCKh[rwri])), + ('Hip', 0.5 * (PCKh[lhip] + PCKh[rhip])), + ('Knee', 0.5 * (PCKh[lkne] + PCKh[rkne])), + ('Ankle', 0.5 * (PCKh[lank] + PCKh[rank])), + ('Mean', np.sum(PCKh * jnt_ratio)), + ('Mean@0.1', np.sum(pckAll[11, :] * jnt_ratio)) + ] + name_value = OrderedDict(name_value) + + return name_value, name_value['Mean'] diff --git a/lib/models/__init__.py b/lib/models/__init__.py new file mode 100644 index 0000000..b695778 --- /dev/null +++ b/lib/models/__init__.py @@ -0,0 +1,12 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import models.pose_resnet +import models.pose_vis \ No newline at end of file diff --git a/lib/models/modules.py b/lib/models/modules.py new file mode 100644 index 0000000..c77da9d --- /dev/null +++ b/lib/models/modules.py @@ -0,0 +1,196 @@ +import os +import logging + +import torch +import torch.nn as nn +from collections import OrderedDict +from .resnet import Bottleneck, BN_MOMENTUM + +logger = logging.getLogger(__name__) + + +class DeconvStage(nn.Module): + def __init__(self, inplanes, cfg): + super(DeconvStage, self).__init__() + + self.inplanes = inplanes + extra = cfg.MODEL.EXTRA + self.deconv_with_bias = extra.DECONV_WITH_BIAS + self.nb_joints = cfg.MODEL.NUM_JOINTS + + self.deconv_layers = self._make_deconv_layer( + extra.NUM_DECONV_LAYERS, + extra.NUM_DECONV_FILTERS, + extra.NUM_DECONV_KERNELS, + ) + + self.final_layer = nn.Conv2d( + in_channels=extra.NUM_DECONV_FILTERS[-1], + out_channels=self.nb_joints, + kernel_size=extra.FINAL_CONV_KERNEL, + stride=1, + padding=1 if extra.FINAL_CONV_KERNEL == 3 else 0 + ) + + def _get_deconv_cfg(self, deconv_kernel, index): + if deconv_kernel == 4: + padding = 1 + output_padding = 0 + elif deconv_kernel == 3: + padding = 1 + output_padding = 1 + elif deconv_kernel == 2: + padding = 0 + output_padding = 0 + + return deconv_kernel, padding, output_padding + + def _make_deconv_layer(self, num_layers, num_filters, num_kernels): + assert num_layers == len(num_filters), \ + 'ERROR: num_deconv_layers is different len(num_deconv_filters)' + assert num_layers == len(num_kernels), \ + 'ERROR: num_deconv_layers is different len(num_deconv_filters)' + + layers = [] + for i in range(num_layers): + kernel, padding, output_padding = \ + self._get_deconv_cfg(num_kernels[i], i) + + planes = num_filters[i] + layers.append( + nn.ConvTranspose2d( + in_channels=self.inplanes, + out_channels=planes, + kernel_size=kernel, + stride=2, + padding=padding, + output_padding=output_padding, + bias=self.deconv_with_bias)) + layers.append(nn.BatchNorm2d(planes, momentum=BN_MOMENTUM)) + layers.append(nn.ReLU(inplace=True)) + self.inplanes = planes + + return nn.Sequential(*layers) + + def forward(self, feats): + x = self.deconv_layers(feats) + x = self.final_layer(x) + + return x + + def freeze(self, freeze=True): + for layer in [ + self.deconv_layers, + self.final_layer, + ]: + for p in layer.parameters(): + p.requires_grad = not freeze + + +class DeconvStageVis(DeconvStage): + def __init__(self, inplanes, block, cfg): + super(DeconvStageVis, self).__init__(inplanes, cfg) + + self.nb_vis = cfg.MODEL.NB_VIS + extra = cfg.MODEL.EXTRA + + # New visibility deductor + self.fc = self._make_fc(512 * block.expansion, + extra.HEATMAP_SIZE, + extra.NUM_DECONV_LAYERS, + fc_sizes=cfg.MODEL.EXTRA.NUM_LINEAR_LAYERS + ) + + def _make_fc(self, input_channel=512 * 4, hm_size=[64, 48], deconv_ratio=3, fc_sizes=[4096, 2048, 1024]): + out_conv = 512 + max_pool = 2 + layers = [ + Bottleneck(input_channel, int(out_conv / Bottleneck.expansion), + downsample=nn.Conv2d(input_channel, out_conv, kernel_size=1, stride=1, padding=0, bias=False)), + nn.BatchNorm2d(out_conv, momentum=BN_MOMENTUM), nn.ReLU(inplace=True), + nn.MaxPool2d(kernel_size=max_pool, stride=max_pool, padding=0), nn.Flatten(), ] + + # input layer + layers += [ + nn.Linear(int(out_conv * hm_size[0] * hm_size[1] / (max_pool * 2 ** deconv_ratio) ** 2), fc_sizes[0]), + nn.ReLU()] + + # hidden layers + for i in range(len(fc_sizes) - 1): + layers.append(nn.Linear(fc_sizes[i], fc_sizes[i + 1])) + layers.append(nn.ReLU()) + + # output layers + layers.append(nn.Linear(fc_sizes[-1], self.nb_vis * self.nb_joints)) + layers.append(nn.ReLU()) + + return nn.Sequential(*layers) + + def forward(self, feats): + x = self.deconv_layers(feats) + x = self.final_layer(x) + + vis_feats = self.fc(feats) + vis_preds = vis_feats.reshape((vis_feats.shape[0], self.nb_joints, self.nb_vis)) + + return x, vis_preds + + +class PoseNet(nn.Module): + def __init__(self): + super(PoseNet, self).__init__() + + self.final_stage = None + + def forward(self, x): + raise NotImplementedError() + + def init_weights(self, pretrained_pth=''): + if os.path.isfile(pretrained_pth): + logger.info('=> init deconv weights from normal distribution') + for name, m in self.final_stage.deconv_layers.named_modules(): + if isinstance(m, nn.ConvTranspose2d): + logger.info('=> init {}.weight as normal(0, 0.001)'.format(name)) + logger.info('=> init {}.bias as 0'.format(name)) + nn.init.normal_(m.weight, std=0.001) + if self.final_stage.deconv_with_bias: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.BatchNorm2d): + logger.info('=> init {}.weight as 1'.format(name)) + logger.info('=> init {}.bias as 0'.format(name)) + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + logger.info('=> init final conv weights from normal distribution') + for m in self.final_stage.final_layer.modules(): + if isinstance(m, nn.Conv2d): + # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + logger.info('=> init {}.weight as normal(0, 0.001)'.format(name)) + logger.info('=> init {}.bias as 0'.format(name)) + nn.init.normal_(m.weight, std=0.001) + nn.init.constant_(m.bias, 0) + + # pretrained_state_dict = torch.load(pretrained) + logger.info('=> loading pretrained model {}'.format(pretrained_pth)) + # self.load_state_dict(pretrained_state_dict, strict=False) + checkpoint = torch.load(pretrained_pth) + if isinstance(checkpoint, OrderedDict): + state_dict = checkpoint + elif isinstance(checkpoint, dict) and 'state_dict' in checkpoint: + state_dict_old = checkpoint['state_dict'] + state_dict = OrderedDict() + # delete 'module.' because it is saved from DataParallel module + for key in state_dict_old.keys(): + if key.startswith('module.'): + # state_dict[key[7:]] = state_dict[key] + # state_dict.pop(key) + state_dict[key[7:]] = state_dict_old[key] + else: + state_dict[key] = state_dict_old[key] + else: + raise RuntimeError( + 'No state_dict found in checkpoint file {}'.format(pretrained_pth)) + self.load_state_dict(state_dict, strict=False) + else: + logger.error(f'=> imagenet pretrained model dose not exist : {pretrained_pth}') + logger.error('=> please download it first') + raise ValueError('imagenet pretrained model does not exist') diff --git a/lib/models/pose_resnet.py b/lib/models/pose_resnet.py new file mode 100644 index 0000000..206aed9 --- /dev/null +++ b/lib/models/pose_resnet.py @@ -0,0 +1,80 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import logging + +import torch +import torch.nn as nn +from collections import OrderedDict + +from .modules import DeconvStage, PoseNet +from .resnet import ResNet, BasicBlock, Bottleneck +from utils.utils import convert_state_dict + +logger = logging.getLogger(__name__) + + +class PoseResNet(PoseNet): + def __init__(self, block, layers, cfg, **kwargs): + super(PoseResNet, self).__init__() + + self.resnet = ResNet(block, layers, cfg, **kwargs) + self.final_stage = DeconvStage(self.resnet.inplanes, cfg) + + def forward(self, x): + x = self.resnet(x) + x = self.final_stage(x) + return x + + def freeze_encoder(self, freeze=True): + self.resnet.freeze(freeze=freeze) + logger.info("Encoder frozen") + + def freeze_deconv(self, freeze=True): + self.final_stage.freeze(freeze=freeze) + logger.info("Deconv frozen") + + def load_state_dict(self, state_dict, strict=True): + state_dict = OrderedDict({k.replace('module.', ''): v + for k, v in state_dict.items()}) + try: + nn.Module.load_state_dict(self, state_dict=state_dict, strict=True) + except RuntimeError as err: + str_err = str(err) + if 'Missing key(s)' not in str_err and 'Unexpected key(s)' not in str_err: + raise err + if strict: + new_dict = convert_state_dict(state_dict, ['resnet', 'final_stage'], err) + else: + print('\n'.join(str(err).split('\n')[1:])) + new_dict = state_dict + nn.Module.load_state_dict(self, state_dict=new_dict, strict=strict) + + +resnet_spec = {18: (BasicBlock, [2, 2, 2, 2]), + 34: (BasicBlock, [3, 4, 6, 3]), + 50: (Bottleneck, [3, 4, 6, 3]), + 101: (Bottleneck, [3, 4, 23, 3]), + 152: (Bottleneck, [3, 8, 36, 3])} + + +def get_pose_net(cfg, is_train, **kwargs): + num_layers = cfg.MODEL.EXTRA.NUM_LAYERS + style = cfg.MODEL.STYLE + + block_class, layers = resnet_spec[num_layers] + + model = PoseResNet(block_class, layers, cfg, **kwargs) + + if is_train and cfg.MODEL.INIT_WEIGHTS: + model.init_weights(cfg.MODEL.PRETRAINED) + + return model diff --git a/lib/models/pose_vis.py b/lib/models/pose_vis.py new file mode 100644 index 0000000..a0aaa5a --- /dev/null +++ b/lib/models/pose_vis.py @@ -0,0 +1,39 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +from .modules import DeconvStageVis +from .resnet import ResNet +from .pose_resnet import PoseResNet, resnet_spec + + +class PoseResNetVis(PoseResNet): + def __init__(self, block, layers, cfg, **kwargs): + super(PoseResNetVis, self).__init__(block, layers, cfg, **kwargs) + self.nb_vis = 3 + + self.resnet = ResNet(block, layers, cfg, **kwargs) + self.final_stage = DeconvStageVis(self.resnet.inplanes, block, cfg) + + def forward(self, x): + x = self.resnet(x) + x, vis_preds = self.final_stage(x) + + return x, vis_preds + + +def get_pose_net(cfg, is_train, **kwargs): + num_layers = cfg.MODEL.EXTRA.NUM_LAYERS + style = cfg.MODEL.STYLE + + block_class, layers = resnet_spec[num_layers] + + if style == 'caffe': + raise NotImplementedError('Caffe not handled') + + model = PoseResNetVis(block_class, layers, cfg, **kwargs) + + if is_train and cfg.MODEL.INIT_WEIGHTS: + model.init_weights(cfg.MODEL.PRETRAINED) + + return model diff --git a/lib/models/resnet.py b/lib/models/resnet.py new file mode 100644 index 0000000..51ded25 --- /dev/null +++ b/lib/models/resnet.py @@ -0,0 +1,145 @@ +import torch.nn as nn +BN_MOMENTUM = 0.1 + + +def conv3x3(in_planes, out_planes, stride=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=1, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(BasicBlock, self).__init__() + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, + padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes, momentum=BN_MOMENTUM) + self.conv3 = nn.Conv2d(planes, planes * self.expansion, kernel_size=1, + bias=False) + self.bn3 = nn.BatchNorm2d(planes * self.expansion, + momentum=BN_MOMENTUM) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + + +class ResNet(nn.Module): + def __init__(self, block, layers, cfg, **kwargs): + super(ResNet, self).__init__() + + self.inplanes = 64 + extra = cfg.MODEL.EXTRA + + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = nn.BatchNorm2d(64, momentum=BN_MOMENTUM) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(planes * block.expansion, momentum=BN_MOMENTUM), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + return x + + def freeze(self, freeze=True): + for layer in [ + self.conv1, + self.bn1, + self.relu, + self.maxpool, + self.layer1, + self.layer2, + self.layer3, + self.layer4, + ]: + for p in layer.parameters(): + p.requires_grad = not freeze + diff --git a/lib/nms/__init__.py b/lib/nms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lib/nms/cpu_nms.pyx b/lib/nms/cpu_nms.pyx new file mode 100644 index 0000000..59388fe --- /dev/null +++ b/lib/nms/cpu_nms.pyx @@ -0,0 +1,67 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Modified from py-faster-rcnn (https://github.com/rbgirshick/py-faster-rcnn) +# ------------------------------------------------------------------------------ + +import numpy as np +cimport numpy as np + +cdef inline np.float32_t max(np.float32_t a, np.float32_t b): + return a if a >= b else b + +cdef inline np.float32_t min(np.float32_t a, np.float32_t b): + return a if a <= b else b + +def cpu_nms(np.ndarray[np.float32_t, ndim=2] dets, np.float thresh): + cdef np.ndarray[np.float32_t, ndim=1] x1 = dets[:, 0] + cdef np.ndarray[np.float32_t, ndim=1] y1 = dets[:, 1] + cdef np.ndarray[np.float32_t, ndim=1] x2 = dets[:, 2] + cdef np.ndarray[np.float32_t, ndim=1] y2 = dets[:, 3] + cdef np.ndarray[np.float32_t, ndim=1] scores = dets[:, 4] + + cdef np.ndarray[np.float32_t, ndim=1] areas = (x2 - x1 + 1) * (y2 - y1 + 1) + cdef np.ndarray[np.int_t, ndim=1] order = scores.argsort()[::-1].astype('i') + + cdef int ndets = dets.shape[0] + cdef np.ndarray[np.int_t, ndim=1] suppressed = \ + np.zeros((ndets), dtype=np.int) + + # nominal indices + cdef int _i, _j + # sorted indices + cdef int i, j + # temp variables for box i's (the box currently under consideration) + cdef np.float32_t ix1, iy1, ix2, iy2, iarea + # variables for computing overlap with box j (lower scoring box) + cdef np.float32_t xx1, yy1, xx2, yy2 + cdef np.float32_t w, h + cdef np.float32_t inter, ovr + + keep = [] + for _i in range(ndets): + i = order[_i] + if suppressed[i] == 1: + continue + keep.append(i) + ix1 = x1[i] + iy1 = y1[i] + ix2 = x2[i] + iy2 = y2[i] + iarea = areas[i] + for _j in range(_i + 1, ndets): + j = order[_j] + if suppressed[j] == 1: + continue + xx1 = max(ix1, x1[j]) + yy1 = max(iy1, y1[j]) + xx2 = min(ix2, x2[j]) + yy2 = min(iy2, y2[j]) + w = max(0.0, xx2 - xx1 + 1) + h = max(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (iarea + areas[j] - inter) + if ovr >= thresh: + suppressed[j] = 1 + + return keep diff --git a/lib/nms/gpu_nms.hpp b/lib/nms/gpu_nms.hpp new file mode 100644 index 0000000..68b6d42 --- /dev/null +++ b/lib/nms/gpu_nms.hpp @@ -0,0 +1,2 @@ +void _nms(int* keep_out, int* num_out, const float* boxes_host, int boxes_num, + int boxes_dim, float nms_overlap_thresh, int device_id); diff --git a/lib/nms/gpu_nms.pyx b/lib/nms/gpu_nms.pyx new file mode 100644 index 0000000..b6ff660 --- /dev/null +++ b/lib/nms/gpu_nms.pyx @@ -0,0 +1,30 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Modified from py-faster-rcnn (https://github.com/rbgirshick/py-faster-rcnn) +# ------------------------------------------------------------------------------ + +import numpy as np +cimport numpy as np + +assert sizeof(int) == sizeof(np.int32_t) + +cdef extern from "gpu_nms.hpp": + void _nms(np.int32_t*, int*, np.float32_t*, int, int, float, int) + +def gpu_nms(np.ndarray[np.float32_t, ndim=2] dets, np.float thresh, + np.int32_t device_id=0): + cdef int boxes_num = dets.shape[0] + cdef int boxes_dim = dets.shape[1] + cdef int num_out + cdef np.ndarray[np.int32_t, ndim=1] \ + keep = np.zeros(boxes_num, dtype=np.int32) + cdef np.ndarray[np.float32_t, ndim=1] \ + scores = dets[:, 4] + cdef np.ndarray[np.int32_t, ndim=1] \ + order = scores.argsort()[::-1].astype(np.int32) + cdef np.ndarray[np.float32_t, ndim=2] \ + sorted_dets = dets[order, :] + _nms(&keep[0], &num_out, &sorted_dets[0, 0], boxes_num, boxes_dim, thresh, device_id) + keep = keep[:num_out] + return list(order[keep]) diff --git a/lib/nms/nms.py b/lib/nms/nms.py new file mode 100644 index 0000000..e02850d --- /dev/null +++ b/lib/nms/nms.py @@ -0,0 +1,123 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Modified from py-faster-rcnn (https://github.com/rbgirshick/py-faster-rcnn) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import numpy as np + +from .cpu_nms import cpu_nms +from .gpu_nms import gpu_nms + + +def py_nms_wrapper(thresh): + def _nms(dets): + return nms(dets, thresh) + return _nms + + +def cpu_nms_wrapper(thresh): + def _nms(dets): + return cpu_nms(dets, thresh) + return _nms + + +def gpu_nms_wrapper(thresh, device_id): + def _nms(dets): + return gpu_nms(dets, thresh, device_id) + return _nms + + +def nms(dets, thresh): + """ + greedily select boxes with high confidence and overlap with current maximum <= thresh + rule out overlap >= thresh + :param dets: [[x1, y1, x2, y2 score]] + :param thresh: retain overlap < thresh + :return: indexes to keep + """ + if dets.shape[0] == 0: + return [] + + x1 = dets[:, 0] + y1 = dets[:, 1] + x2 = dets[:, 2] + y2 = dets[:, 3] + scores = dets[:, 4] + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + xx1 = np.maximum(x1[i], x1[order[1:]]) + yy1 = np.maximum(y1[i], y1[order[1:]]) + xx2 = np.minimum(x2[i], x2[order[1:]]) + yy2 = np.minimum(y2[i], y2[order[1:]]) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (areas[i] + areas[order[1:]] - inter) + + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + + return keep + +def oks_iou(g, d, a_g, a_d, sigmas=None, in_vis_thre=None): + if not isinstance(sigmas, np.ndarray): + sigmas = np.array([.26, .25, .25, .35, .35, .79, .79, .72, .72, .62, .62, 1.07, 1.07, .87, .87, .89, .89]) / 10.0 + vars = (sigmas * 2) ** 2 + xg = g[0::3] + yg = g[1::3] + vg = g[2::3] + ious = np.zeros((d.shape[0])) + for n_d in range(0, d.shape[0]): + xd = d[n_d, 0::3] + yd = d[n_d, 1::3] + vd = d[n_d, 2::3] + dx = xd - xg + dy = yd - yg + e = (dx ** 2 + dy ** 2) / vars / ((a_g + a_d[n_d]) / 2 + np.spacing(1)) / 2 + if in_vis_thre is not None: + ind = list(vg > in_vis_thre) and list(vd > in_vis_thre) + e = e[ind] + ious[n_d] = np.sum(np.exp(-e)) / e.shape[0] if e.shape[0] != 0 else 0.0 + return ious + +def oks_nms(kpts_db, thresh, sigmas=None, in_vis_thre=None): + """ + greedily select boxes with high confidence and overlap with current maximum <= thresh + rule out overlap >= thresh, overlap = oks + :param kpts_db + :param thresh: retain overlap < thresh + :return: indexes to keep + """ + if len(kpts_db) == 0: + return [] + + scores = np.array([kpts_db[i]['score'] for i in range(len(kpts_db))]) + kpts = np.array([kpts_db[i]['keypoints'].flatten() for i in range(len(kpts_db))]) + areas = np.array([kpts_db[i]['area'] for i in range(len(kpts_db))]) + + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + + oks_ovr = oks_iou(kpts[i], kpts[order[1:]], areas[i], areas[order[1:]], sigmas, in_vis_thre) + + inds = np.where(oks_ovr <= thresh)[0] + order = order[inds + 1] + + return keep + diff --git a/lib/nms/nms_kernel.cu b/lib/nms/nms_kernel.cu new file mode 100644 index 0000000..f6176c6 --- /dev/null +++ b/lib/nms/nms_kernel.cu @@ -0,0 +1,143 @@ +// ------------------------------------------------------------------ +// Copyright (c) Microsoft +// Licensed under The MIT License +// Modified from MATLAB Faster R-CNN (https://github.com/shaoqingren/faster_rcnn) +// ------------------------------------------------------------------ + +#include "gpu_nms.hpp" +#include <vector> +#include <iostream> + +#define CUDA_CHECK(condition) \ + /* Code block avoids redefinition of cudaError_t error */ \ + do { \ + cudaError_t error = condition; \ + if (error != cudaSuccess) { \ + std::cout << cudaGetErrorString(error) << std::endl; \ + } \ + } while (0) + +#define DIVUP(m,n) ((m) / (n) + ((m) % (n) > 0)) +int const threadsPerBlock = sizeof(unsigned long long) * 8; + +__device__ inline float devIoU(float const * const a, float const * const b) { + float left = max(a[0], b[0]), right = min(a[2], b[2]); + float top = max(a[1], b[1]), bottom = min(a[3], b[3]); + float width = max(right - left + 1, 0.f), height = max(bottom - top + 1, 0.f); + float interS = width * height; + float Sa = (a[2] - a[0] + 1) * (a[3] - a[1] + 1); + float Sb = (b[2] - b[0] + 1) * (b[3] - b[1] + 1); + return interS / (Sa + Sb - interS); +} + +__global__ void nms_kernel(const int n_boxes, const float nms_overlap_thresh, + const float *dev_boxes, unsigned long long *dev_mask) { + const int row_start = blockIdx.y; + const int col_start = blockIdx.x; + + // if (row_start > col_start) return; + + const int row_size = + min(n_boxes - row_start * threadsPerBlock, threadsPerBlock); + const int col_size = + min(n_boxes - col_start * threadsPerBlock, threadsPerBlock); + + __shared__ float block_boxes[threadsPerBlock * 5]; + if (threadIdx.x < col_size) { + block_boxes[threadIdx.x * 5 + 0] = + dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 0]; + block_boxes[threadIdx.x * 5 + 1] = + dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 1]; + block_boxes[threadIdx.x * 5 + 2] = + dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 2]; + block_boxes[threadIdx.x * 5 + 3] = + dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 3]; + block_boxes[threadIdx.x * 5 + 4] = + dev_boxes[(threadsPerBlock * col_start + threadIdx.x) * 5 + 4]; + } + __syncthreads(); + + if (threadIdx.x < row_size) { + const int cur_box_idx = threadsPerBlock * row_start + threadIdx.x; + const float *cur_box = dev_boxes + cur_box_idx * 5; + int i = 0; + unsigned long long t = 0; + int start = 0; + if (row_start == col_start) { + start = threadIdx.x + 1; + } + for (i = start; i < col_size; i++) { + if (devIoU(cur_box, block_boxes + i * 5) > nms_overlap_thresh) { + t |= 1ULL << i; + } + } + const int col_blocks = DIVUP(n_boxes, threadsPerBlock); + dev_mask[cur_box_idx * col_blocks + col_start] = t; + } +} + +void _set_device(int device_id) { + int current_device; + CUDA_CHECK(cudaGetDevice(¤t_device)); + if (current_device == device_id) { + return; + } + // The call to cudaSetDevice must come before any calls to Get, which + // may perform initialization using the GPU. + CUDA_CHECK(cudaSetDevice(device_id)); +} + +void _nms(int* keep_out, int* num_out, const float* boxes_host, int boxes_num, + int boxes_dim, float nms_overlap_thresh, int device_id) { + _set_device(device_id); + + float* boxes_dev = NULL; + unsigned long long* mask_dev = NULL; + + const int col_blocks = DIVUP(boxes_num, threadsPerBlock); + + CUDA_CHECK(cudaMalloc(&boxes_dev, + boxes_num * boxes_dim * sizeof(float))); + CUDA_CHECK(cudaMemcpy(boxes_dev, + boxes_host, + boxes_num * boxes_dim * sizeof(float), + cudaMemcpyHostToDevice)); + + CUDA_CHECK(cudaMalloc(&mask_dev, + boxes_num * col_blocks * sizeof(unsigned long long))); + + dim3 blocks(DIVUP(boxes_num, threadsPerBlock), + DIVUP(boxes_num, threadsPerBlock)); + dim3 threads(threadsPerBlock); + nms_kernel<<<blocks, threads>>>(boxes_num, + nms_overlap_thresh, + boxes_dev, + mask_dev); + + std::vector<unsigned long long> mask_host(boxes_num * col_blocks); + CUDA_CHECK(cudaMemcpy(&mask_host[0], + mask_dev, + sizeof(unsigned long long) * boxes_num * col_blocks, + cudaMemcpyDeviceToHost)); + + std::vector<unsigned long long> remv(col_blocks); + memset(&remv[0], 0, sizeof(unsigned long long) * col_blocks); + + int num_to_keep = 0; + for (int i = 0; i < boxes_num; i++) { + int nblock = i / threadsPerBlock; + int inblock = i % threadsPerBlock; + + if (!(remv[nblock] & (1ULL << inblock))) { + keep_out[num_to_keep++] = i; + unsigned long long *p = &mask_host[0] + i * col_blocks; + for (int j = nblock; j < col_blocks; j++) { + remv[j] |= p[j]; + } + } + } + *num_out = num_to_keep; + + CUDA_CHECK(cudaFree(boxes_dev)); + CUDA_CHECK(cudaFree(mask_dev)); +} diff --git a/lib/nms/setup.py b/lib/nms/setup.py new file mode 100644 index 0000000..faada13 --- /dev/null +++ b/lib/nms/setup.py @@ -0,0 +1,140 @@ +# -------------------------------------------------------- +# Copyright (c) Microsoft +# Licensed under The MIT License [see LICENSE for details] +# Modified from py-faster-rcnn (https://github.com/rbgirshick/py-faster-rcnn) +# -------------------------------------------------------- + +import os +from os.path import join as pjoin +from setuptools import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext +import numpy as np + + +def find_in_path(name, path): + "Find a file in a search path" + # Adapted fom + # http://code.activestate.com/recipes/52224-find-a-file-given-a-search-path/ + for dir in path.split(os.pathsep): + binpath = pjoin(dir, name) + if os.path.exists(binpath): + return os.path.abspath(binpath) + return None + + +def locate_cuda(): + """Locate the CUDA environment on the system + Returns a dict with keys 'home', 'nvcc', 'include', and 'lib64' + and values giving the absolute path to each directory. + Starts by looking for the CUDAHOME env variable. If not found, everything + is based on finding 'nvcc' in the PATH. + """ + + # first check if the CUDAHOME env variable is in use + if 'CUDAHOME' in os.environ: + home = os.environ['CUDAHOME'] + nvcc = pjoin(home, 'bin', 'nvcc') + else: + # otherwise, search the PATH for NVCC + default_path = pjoin(os.sep, 'usr', 'local', 'cuda', 'bin') + nvcc = find_in_path('nvcc', os.environ['PATH'] + os.pathsep + default_path) + if nvcc is None: + raise EnvironmentError('The nvcc binary could not be ' + 'located in your $PATH. Either add it to your path, or set $CUDAHOME') + home = os.path.dirname(os.path.dirname(nvcc)) + + cudaconfig = {'home':home, 'nvcc':nvcc, + 'include': pjoin(home, 'include'), + 'lib64': pjoin(home, 'lib64')} + for k, v in cudaconfig.items(): + if not os.path.exists(v): + raise EnvironmentError('The CUDA %s path could not be located in %s' % (k, v)) + + return cudaconfig +CUDA = locate_cuda() + + +# Obtain the numpy include directory. This logic works across numpy versions. +try: + numpy_include = np.get_include() +except AttributeError: + numpy_include = np.get_numpy_include() + + +def customize_compiler_for_nvcc(self): + """inject deep into distutils to customize how the dispatch + to gcc/nvcc works. + If you subclass UnixCCompiler, it's not trivial to get your subclass + injected in, and still have the right customizations (i.e. + distutils.sysconfig.customize_compiler) run on it. So instead of going + the OO route, I have this. Note, it's kindof like a wierd functional + subclassing going on.""" + + # tell the compiler it can processes .cu + self.src_extensions.append('.cu') + + # save references to the default compiler_so and _comple methods + default_compiler_so = self.compiler_so + super = self._compile + + # now redefine the _compile method. This gets executed for each + # object but distutils doesn't have the ability to change compilers + # based on source extension: we add it. + def _compile(obj, src, ext, cc_args, extra_postargs, pp_opts): + if os.path.splitext(src)[1] == '.cu': + # use the cuda for .cu files + self.set_executable('compiler_so', CUDA['nvcc']) + # use only a subset of the extra_postargs, which are 1-1 translated + # from the extra_compile_args in the Extension class + postargs = extra_postargs['nvcc'] + else: + postargs = extra_postargs['gcc'] + + super(obj, src, ext, cc_args, postargs, pp_opts) + # reset the default compiler_so, which we might have changed for cuda + self.compiler_so = default_compiler_so + + # inject our redefined _compile method into the class + self._compile = _compile + + +# run the customize_compiler +class custom_build_ext(build_ext): + def build_extensions(self): + customize_compiler_for_nvcc(self.compiler) + build_ext.build_extensions(self) + + +ext_modules = [ + Extension( + "cpu_nms", + ["cpu_nms.pyx"], + extra_compile_args={'gcc': ["-Wno-cpp", "-Wno-unused-function"]}, + include_dirs = [numpy_include] + ), + Extension('gpu_nms', + ['nms_kernel.cu', 'gpu_nms.pyx'], + library_dirs=[CUDA['lib64']], + libraries=['cudart'], + language='c++', + runtime_library_dirs=[CUDA['lib64']], + # this syntax is specific to this build system + # we're only going to use certain compiler args with nvcc and not with + # gcc the implementation of this trick is in customize_compiler() below + extra_compile_args={'gcc': ["-Wno-unused-function"], + 'nvcc': ['-arch=sm_35', + '--ptxas-options=-v', + '-c', + '--compiler-options', + "'-fPIC'"]}, + include_dirs = [numpy_include, CUDA['include']] + ), +] + +setup( + name='nms', + ext_modules=ext_modules, + # inject our custom trigger + cmdclass={'build_ext': custom_build_ext}, +) diff --git a/lib/utils/__init__.py b/lib/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lib/utils/debug.py b/lib/utils/debug.py new file mode 100644 index 0000000..ae6a69a --- /dev/null +++ b/lib/utils/debug.py @@ -0,0 +1,84 @@ +import matplotlib.pyplot as plt +import numpy as np +import gc, torch + + +class GradPlots: + def __init__(self, key=None): + self.layers = [] + self.ave_grads = {} + self.epochs = 0 + self.key = key + + def save_grads(self, named_parameters): + ave_grads = [] + layers = [] + for n, p in named_parameters: + if self.key in n: + print(n) + if (p.requires_grad) and ("bias" not in n): + layers.append(n) + ave_grads.append(p.grad.abs().mean()) + + np_grads = np.asarray(ave_grads) + if self.key is None: + # Keep 10 greatest + idx = np_grads.argpartition(-10)[-10:] + else: + idx = [i for i, k in enumerate(layers) if self.key in k] + ave_grads = np_grads[idx].tolist() + layers = np.asarray(layers)[idx].tolist() + + for l, layer in enumerate(layers): + if layer in self.layers: + self.ave_grads[layer].append(ave_grads[l]) + else: + self.ave_grads[layer] = [ave_grads[l]] + self.layers.append(layer) + + self.epochs += 1 + + for k in self.ave_grads: + while len(self.ave_grads[k]) < self.epochs: + self.ave_grads[k] = [0] + self.ave_grads[k] + + def plot_graph(self): + for e in range(self.epochs): + ave_grad = [self.ave_grads[l][e] for l in self.layers] + + plt.plot(ave_grad, alpha=0.3, label=f'{e}') + + plt.hlines(0, 0, len(self.layers) + 1, linewidth=1, color="k") + plt.xticks(range(0, len(self.layers), 1), self.layers, rotation="vertical") + plt.xlim(xmin=0, xmax=len(self.layers)) + plt.xlabel("Layers") + plt.ylabel("average gradient") + plt.title("Gradient flow") + plt.grid(True) + plt.legend() + plt.savefig('debug_grad.png', bbox_inches='tight') + + +def print_tensors(): + tensors = {} + for obj in gc.get_objects(): + try: + if torch.is_tensor(obj) or (hasattr(obj, 'data') and torch.is_tensor(obj.data)): + lbl_type = type(obj) + if lbl_type == torch.nn.parameter.Parameter: + lbl_type = 'parameter' + elif lbl_type == torch.Tensor: + lbl_type = 'tensor' + + mem_size = obj.element_size() * obj.nelement() + lbls_mem = ['', 'k', 'M', 'G', 'T', 'P'] + i = 0 + while mem_size >= 1024: + mem_size /= 1024 + i += 1 + tensors[ + obj.element_size() * obj.nelement()] = f'{lbl_type}: {tuple(obj.size())}, {mem_size:.2}{lbls_mem[i]}b' + except: + pass + for k in sorted(tensors, reverse=True): + print(tensors[k]) diff --git a/lib/utils/tabs.py b/lib/utils/tabs.py new file mode 100644 index 0000000..7019e72 --- /dev/null +++ b/lib/utils/tabs.py @@ -0,0 +1,103 @@ +import numpy as np + + +def text_from_data(data, lbls_r=None, lbls_c=None): + text = '' + if not data: + return text + + if not type(data[0]) in (list, dict, np.ndarray): + data = [data] + + if lbls_c: + text = '\t' if lbls_r else '' + text += '\t'.join(lbls_c) + + for r, row in enumerate(data): + if lbls_c or r: + text += '\n' + if lbls_r: + text += lbls_r[r] + '\t' + + text += '\t'.join([f'{x:0.2f}' if type(x) in [float, np.float_] else f'{x}' for x in row]) + + return text + + +class Tabs: + def __init__(self, data, lbls_r=None, lbls_c=None, logger=None): + if not data: + return + self.text = data if type(data) == str else text_from_data(data, lbls_r=lbls_r, lbls_c=lbls_c) + + self.rows = [l.split('\t') for l in self.text.split('\n')] + if self.text[-1] == '\n': + self.rows.pop() + + self.num_l = len(self.rows) + self.num_c = len(self.rows[0]) if self.rows else 0 + + self.cols = [[l[i] if len(l) > i else '' for l in self.rows] for i in range(self.num_c)] + + self.len_c = [max([len(x) for x in c]) for c in self.cols] + + self.logger = logger + self.disp_text = self.disp() + + def disp(self): + disp_text = '' + for row in self.rows: + for c, w in enumerate(row): + disp_text += '\t' if c > 0 else '' + disp_text += w + ' ' * (self.len_c[c] - len(w)) + disp_text += '\n' + + if self.logger: + self.logger.info('\n' + disp_text) + else: + print(disp_text) + return disp_text + + def to_latex(self): + header = """ + \\begin{table}[!htb] + \\centering + \\small + \\renewcommand{\\tabcolsep}{2pt} + \\begin{tabular}{""" + + header2 = ''.join(['c' + (' ' if c else '|') for c in range(self.num_c)]) + header3 = """} + \\hline + """ + + header = header + header2 + header3 + + feat = """\\hline + \\multicolumn{9}{c}{} + \\end{tabular} + \\caption{Comparisons of AP scores on the COCO 2017 val set with AP OKS.} + \\label{tab:cocotest} + \\end{table}""" + + mid = '' + for r, row in enumerate(self.rows): + for c, w in enumerate(row): + mid += ' & ' if c > 0 else '' + mid += w + mid += '\\\\\n' + if not r: + mid += "\\hline\n" + + tab = header + mid + feat + print(tab.replace(' ', '')) + + +if __name__ == '__main__': + lbl_c = ['AP', 'AP$^{50}$', 'AP$^{75}$', 'AP$^L$', 'AR', 'AR$^{50}$', 'AR$^{75}$', 'AR$^L$'] + lbl_r = [r'SBl~\cite{Xiao_2018_ECCV}', r'MSPN~\cite{MSPN_2019}', 'RSN~\cite{RSN_2020}'] + data = [[.72, .92, .80, .77, .76, .93, .82, .80], + [.77, .94, .85, .82, .80, .95, .87, .85], + [.76, .94, .84, .81, .79, .94, .85, .84]] + t = Tabs(data, lbls_r=lbl_r, lbls_c=lbl_c) + t.to_latex() diff --git a/lib/utils/transforms.py b/lib/utils/transforms.py new file mode 100644 index 0000000..173d439 --- /dev/null +++ b/lib/utils/transforms.py @@ -0,0 +1,123 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import numpy as np +import cv2 + + +def flip_back(output_flipped, matched_parts): + ''' + ouput_flipped: numpy.ndarray(batch_size, num_joints, height, width) + ''' + assert output_flipped.ndim == 4,\ + 'output_flipped should be [batch_size, num_joints, height, width]' + + output_flipped = output_flipped[:, :, :, ::-1] + + for pair in matched_parts: + tmp = output_flipped[:, pair[0], :, :].copy() + output_flipped[:, pair[0], :, :] = output_flipped[:, pair[1], :, :] + output_flipped[:, pair[1], :, :] = tmp + + return output_flipped + + +def fliplr_joints(joints, joints_vis, width, matched_parts): + """ + flip coords + """ + # Flip horizontal + joints[:, 0] = width - joints[:, 0] - 1 + + # Change left-right parts + for pair in matched_parts: + joints[pair[0], :], joints[pair[1], :] = \ + joints[pair[1], :], joints[pair[0], :].copy() + joints_vis[pair[0], :], joints_vis[pair[1], :] = \ + joints_vis[pair[1], :], joints_vis[pair[0], :].copy() + + return joints*(joints_vis > 0), joints_vis + + +def transform_preds(coords, center, scale, output_size): + target_coords = np.zeros(coords.shape) + trans = get_affine_transform(center, scale, 0, output_size, inv=1) + for p in range(coords.shape[0]): + target_coords[p, 0:2] = affine_transform(coords[p, 0:2], trans) + return target_coords + + +def get_affine_transform(center, + scale, + rot, + output_size, + shift=np.array([0, 0], dtype=np.float32), + inv=0): + if not isinstance(scale, np.ndarray) and not isinstance(scale, list): + print(scale) + scale = np.array([scale, scale]) + + scale_tmp = scale * 200.0 + src_w = scale_tmp[0] + dst_w = output_size[0] + dst_h = output_size[1] + + rot_rad = np.pi * rot / 180 + src_dir = get_dir([0, src_w * -0.5], rot_rad) + dst_dir = np.array([0, dst_w * -0.5], np.float32) + + src = np.zeros((3, 2), dtype=np.float32) + dst = np.zeros((3, 2), dtype=np.float32) + src[0, :] = center + scale_tmp * shift + src[1, :] = center + src_dir + scale_tmp * shift + dst[0, :] = [dst_w * 0.5, dst_h * 0.5] + dst[1, :] = np.array([dst_w * 0.5, dst_h * 0.5]) + dst_dir + + src[2:, :] = get_3rd_point(src[0, :], src[1, :]) + dst[2:, :] = get_3rd_point(dst[0, :], dst[1, :]) + + if inv: + trans = cv2.getAffineTransform(np.float32(dst), np.float32(src)) + else: + trans = cv2.getAffineTransform(np.float32(src), np.float32(dst)) + + return trans + + +def affine_transform(pt, t): + new_pt = np.array([pt[0], pt[1], 1.]).T + new_pt = np.dot(t, new_pt) + return new_pt[:2] + + +def get_3rd_point(a, b): + direct = a - b + return b + np.array([-direct[1], direct[0]], dtype=np.float32) + + +def get_dir(src_point, rot_rad): + sn, cs = np.sin(rot_rad), np.cos(rot_rad) + + src_result = [0, 0] + src_result[0] = src_point[0] * cs - src_point[1] * sn + src_result[1] = src_point[0] * sn + src_point[1] * cs + + return src_result + + +def crop(img, center, scale, output_size, rot=0): + trans = get_affine_transform(center, scale, rot, output_size) + + dst_img = cv2.warpAffine(img, + trans, + (int(output_size[0]), int(output_size[1])), + flags=cv2.INTER_LINEAR) + + return dst_img diff --git a/lib/utils/utils.py b/lib/utils/utils.py new file mode 100644 index 0000000..c7f7620 --- /dev/null +++ b/lib/utils/utils.py @@ -0,0 +1,129 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import logging +import sys +import time +from pathlib import Path +from collections import OrderedDict + +import torch +import torch.optim as optim + +from core.config import get_model_name + + +def create_logger(cfg, cfg_name, phase='train'): + root_output_dir = Path(cfg.OUTPUT_DIR) + # set up logger + if not root_output_dir.exists(): + print('=> creating {}'.format(root_output_dir)) + root_output_dir.mkdir() + + dataset = cfg.DATASET.DATASET + '_' + cfg.DATASET.HYBRID_JOINTS_TYPE \ + if cfg.DATASET.HYBRID_JOINTS_TYPE else cfg.DATASET.DATASET + dataset = dataset.replace(':', '_') + model, _ = get_model_name(cfg) + cfg_name = os.path.basename(cfg_name).split('.')[0] + + final_output_dir = root_output_dir / dataset / model / cfg_name + + print('=> creating {}'.format(final_output_dir)) + final_output_dir.mkdir(parents=True, exist_ok=True) + + time_str = time.strftime('%Y-%m-%d-%H-%M') + log_file = '{}_{}_{}.log'.format(cfg_name, time_str, phase) + final_log_file = final_output_dir / log_file + head = '%(asctime)-15s %(message)s' + logging.basicConfig(filename=str(final_log_file), + format=head) + logger = logging.getLogger() + logger.setLevel(logging.INFO) + console = logging.StreamHandler(sys.stdout) + logging.getLogger('').addHandler(console) + + tensorboard_log_dir = Path(cfg.LOG_DIR) / dataset / model / \ + (cfg_name + '_' + time_str) + print('=> creating {}'.format(tensorboard_log_dir)) + tensorboard_log_dir.mkdir(parents=True, exist_ok=True) + + return logger, str(final_output_dir), str(tensorboard_log_dir) + + +def get_optimizer(cfg, model): + optimizer = None + if cfg.TRAIN.OPTIMIZER == 'sgd': + optimizer = optim.SGD( + model.parameters(), + lr=cfg.TRAIN.LR, + momentum=cfg.TRAIN.MOMENTUM, + weight_decay=cfg.TRAIN.WD, + nesterov=cfg.TRAIN.NESTEROV + ) + elif cfg.TRAIN.OPTIMIZER == 'adam': + optimizer = optim.Adam( + model.parameters(), + lr=cfg.TRAIN.LR + ) + + return optimizer + + +def save_checkpoint(states, is_best, output_dir, + filename='checkpoint.pth.tar'): + torch.save(states, os.path.join(output_dir, filename)) + if is_best and 'state_dict' in states: + torch.save(states['state_dict'], + os.path.join(output_dir, 'model_best.pth.tar')) + + +def convert_state_dict(state_dict, keys, error): + msg = str(error) + for m in ['Error(s) in loading state_dict for', 'Missing key(s)', 'Unexpected key(s)']: + if m not in msg: + raise error + + lines = msg.split('\n') + missing = [] + unexpected = [] + for i, line in enumerate(lines[1:]): + storage = (missing, unexpected)[i] + for word in line.split(): + if '"' not in word: + continue + storage.append(word[1:-2]) + + if len(missing) > len(unexpected): + raise error + + new_dict = OrderedDict() + for k, v in state_dict.items(): + if k not in unexpected: + new_dict[k] = v + continue + elif '.num_batches_tracked' in k: + continue + for i, m in enumerate(missing): + split_m = m.split('.') + short_m = '.'.join(split_m[1:]) + if short_m == k and split_m[0] in keys: + new_dict[m] = v + + if '.running_var' in m: + nbt = m.replace('.running_var', '.num_batches_tracked') + new_dict[nbt] = state_dict[k.replace('.running_var', '.num_batches_tracked')] + + missing.pop(i) + break + else: + raise error + + return OrderedDict(new_dict) diff --git a/lib/utils/vis.py b/lib/utils/vis.py new file mode 100644 index 0000000..adc0947 --- /dev/null +++ b/lib/utils/vis.py @@ -0,0 +1,141 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import math + +import numpy as np +import torchvision +import cv2 + +from core.inference import get_max_preds + + +def save_batch_image_with_joints(batch_image, batch_joints, batch_joints_vis, + file_name, nrow=8, padding=2): + ''' + batch_image: [batch_size, channel, height, width] + batch_joints: [batch_size, num_joints, 3], + batch_joints_vis: [batch_size, num_joints, 1], + } + ''' + grid = torchvision.utils.make_grid(batch_image, nrow, padding, True) + ndarr = grid.mul(255).clamp(0, 255).byte().permute(1, 2, 0).cpu().numpy() + ndarr = ndarr.copy() + + nmaps = batch_image.size(0) + xmaps = min(nrow, nmaps) + ymaps = int(math.ceil(float(nmaps) / xmaps)) + height = int(batch_image.size(2) + padding) + width = int(batch_image.size(3) + padding) + k = 0 + for y in range(ymaps): + for x in range(xmaps): + if k >= nmaps: + break + joints = batch_joints[k] + joints_vis = batch_joints_vis[k] + + for joint, joint_vis in zip(joints, joints_vis): + joint[0] = x * width + padding + joint[0] + joint[1] = y * height + padding + joint[1] + if joint_vis[0]: + cv2.circle(ndarr, (int(joint[0]), int(joint[1])), 2, [255, 0, 0], 2) + k = k + 1 + cv2.imwrite(file_name, ndarr) + + +def save_batch_heatmaps(batch_image, batch_heatmaps, file_name, + normalize=True): + ''' + batch_image: [batch_size, channel, height, width] + batch_heatmaps: ['batch_size, num_joints, height, width] + file_name: saved file name + ''' + if normalize: + batch_image = batch_image.clone() + min = float(batch_image.min()) + max = float(batch_image.max()) + + batch_image.add_(-min).div_(max - min + 1e-5) + + batch_size = batch_heatmaps.size(0) + num_joints = batch_heatmaps.size(1) + heatmap_height = batch_heatmaps.size(2) + heatmap_width = batch_heatmaps.size(3) + + grid_image = np.zeros((batch_size*heatmap_height, + (num_joints+1)*heatmap_width, + 3), + dtype=np.uint8) + + preds, maxvals = get_max_preds(batch_heatmaps.detach().cpu().numpy()) + + for i in range(batch_size): + image = batch_image[i].mul(255)\ + .clamp(0, 255)\ + .byte()\ + .permute(1, 2, 0)\ + .cpu().numpy() + heatmaps = batch_heatmaps[i].mul(255)\ + .clamp(0, 255)\ + .byte()\ + .cpu().numpy() + + resized_image = cv2.resize(image, + (int(heatmap_width), int(heatmap_height))) + + height_begin = heatmap_height * i + height_end = heatmap_height * (i + 1) + for j in range(num_joints): + cv2.circle(resized_image, + (int(preds[i][j][0]), int(preds[i][j][1])), + 1, [0, 0, 255], 1) + heatmap = heatmaps[j, :, :] + colored_heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) + masked_image = colored_heatmap*0.7 + resized_image*0.3 + cv2.circle(masked_image, + (int(preds[i][j][0]), int(preds[i][j][1])), + 1, [0, 0, 255], 1) + + width_begin = heatmap_width * (j+1) + width_end = heatmap_width * (j+2) + grid_image[height_begin:height_end, width_begin:width_end, :] = \ + masked_image + # grid_image[height_begin:height_end, width_begin:width_end, :] = \ + # colored_heatmap*0.7 + resized_image*0.3 + + grid_image[height_begin:height_end, 0:heatmap_width, :] = resized_image + + cv2.imwrite(file_name, grid_image) + + +def save_debug_images(config, input, meta, target, joints_pred, output, + prefix): + if not config.DEBUG.DEBUG: + return + + if config.DEBUG.SAVE_BATCH_IMAGES_GT: + save_batch_image_with_joints( + input, meta['joints'], meta['joints_vis'], + '{}_gt.jpg'.format(prefix) + ) + if config.DEBUG.SAVE_BATCH_IMAGES_PRED: + save_batch_image_with_joints( + input, joints_pred, meta['joints_vis'], + '{}_pred.jpg'.format(prefix) + ) + if config.DEBUG.SAVE_HEATMAPS_GT: + save_batch_heatmaps( + input, target, '{}_hm_gt.jpg'.format(prefix) + ) + if config.DEBUG.SAVE_HEATMAPS_PRED: + save_batch_heatmaps( + input, output, '{}_hm_pred.jpg'.format(prefix) + ) diff --git a/lib/utils/zipreader.py b/lib/utils/zipreader.py new file mode 100644 index 0000000..7c447a3 --- /dev/null +++ b/lib/utils/zipreader.py @@ -0,0 +1,70 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os +import zipfile +import xml.etree.ElementTree as ET + +import cv2 +import numpy as np + +_im_zfile = [] +_xml_path_zip = [] +_xml_zfile = [] + + +def imread(filename, flags=cv2.IMREAD_COLOR): + global _im_zfile + path = filename + pos_at = path.index('@') + if pos_at == -1: + print("character '@' is not found from the given path '%s'"%(path)) + assert 0 + path_zip = path[0: pos_at] + path_img = path[pos_at + 2:] + if not os.path.isfile(path_zip): + print("zip file '%s' is not found"%(path_zip)) + assert 0 + for i in range(len(_im_zfile)): + if _im_zfile[i]['path'] == path_zip: + data = _im_zfile[i]['zipfile'].read(path_img) + return cv2.imdecode(np.frombuffer(data, np.uint8), flags) + + _im_zfile.append({ + 'path': path_zip, + 'zipfile': zipfile.ZipFile(path_zip, 'r') + }) + data = _im_zfile[-1]['zipfile'].read(path_img) + + return cv2.imdecode(np.frombuffer(data, np.uint8), flags) + + +def xmlread(filename): + global _xml_path_zip + global _xml_zfile + path = filename + pos_at = path.index('@') + if pos_at == -1: + print("character '@' is not found from the given path '%s'"%(path)) + assert 0 + path_zip = path[0: pos_at] + path_xml = path[pos_at + 2:] + if not os.path.isfile(path_zip): + print("zip file '%s' is not found"%(path_zip)) + assert 0 + for i in range(len(_xml_path_zip)): + if _xml_path_zip[i] == path_zip: + data = _xml_zfile[i].open(path_xml) + return ET.fromstring(data.read()) + _xml_path_zip.append(path_zip) + print("read new xml file '%s'"%(path_zip)) + _xml_zfile.append(zipfile.ZipFile(path_zip, 'r')) + data = _xml_zfile[-1].open(path_xml) + return ET.fromstring(data.read()) diff --git a/pose_estimation/_init_paths.py b/pose_estimation/_init_paths.py new file mode 100644 index 0000000..d3c81c3 --- /dev/null +++ b/pose_estimation/_init_paths.py @@ -0,0 +1,23 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import os.path as osp +import sys + + +def add_path(path): + if path not in sys.path: + sys.path.insert(0, path) + + +this_dir = osp.dirname(__file__) + +lib_path = osp.join(this_dir, '..', 'lib') +add_path(lib_path) diff --git a/pose_estimation/train.py b/pose_estimation/train.py new file mode 100644 index 0000000..899897d --- /dev/null +++ b/pose_estimation/train.py @@ -0,0 +1,272 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import argparse +import os +import pprint +import shutil +from collections import OrderedDict + +import torch +import torch.nn.parallel +import torch.backends.cudnn as cudnn +import torch.optim +import torch.utils.data +import torch.utils.data.distributed +import torchvision.transforms as transforms +from tensorboardX import SummaryWriter + +import _init_paths +from core.config import config +from core.config import update_config +from core.config import update_dir +from core.config import get_model_name +from core.loss import JointsMSELoss, JointsMSELossVis +from core.function import train +from core.function import validate +from utils.utils import get_optimizer +from utils.utils import save_checkpoint +from utils.utils import create_logger + +import dataset +import models + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train keypoints network') + # general + parser.add_argument('--cfg', + help='experiment configure file name', + required=True, + type=str) + + args, rest = parser.parse_known_args() + # update config + update_config(args.cfg) + + # training + parser.add_argument('--frequent', + help='frequency of logging', + default=config.PRINT_FREQ, + type=int) + parser.add_argument('--gpus', + help='gpus', + type=str) + parser.add_argument('--workers', + help='num of dataloader workers', + type=int) + parser.add_argument('--resume', + action='store_true', + help='Resume') + + parser.add_argument('--model-file', + help='model state file', + type=str) + + parser.add_argument('--debug-memory', action='store_true') + + args = parser.parse_args() + + return args + + +def reset_config(config, args): + if args.gpus: + config.GPUS = args.gpus + if args.workers: + config.WORKERS = args.workers + + if args.resume: + config.MODEL.INIT_WEIGHTS = False + if args.model_file: + config.TRAIN.CHECKPOINT = args.model_file + + if args.debug_memory: + config.DEBUG.DEBUG_MEMORY = True + + +def main(): + args = parse_args() + reset_config(config, args) + + logger, final_output_dir, tb_log_dir = create_logger( + config, args.cfg, 'train') + + logger.info(pprint.pformat(args)) + logger.info(pprint.pformat(config)) + + # cudnn related setting + cudnn.benchmark = config.CUDNN.BENCHMARK + torch.backends.cudnn.deterministic = config.CUDNN.DETERMINISTIC + torch.backends.cudnn.enabled = config.CUDNN.ENABLED + + model = eval('models.' + config.MODEL.NAME + '.get_pose_net')( + config, is_train=True + ) + + if args.resume: + logger.info('=> loading model from {}'.format(config.TRAIN.CHECKPOINT)) + meta_info = torch.load(config.TRAIN.CHECKPOINT) + + # resume previous training + state_dict = OrderedDict({k.replace('module.', ''): v + for k, v in meta_info['state_dict'].items()}) + config.TRAIN.BEGIN_EPOCH = meta_info['epoch'] + model.load_state_dict(state_dict) + + else: + ''' + logger.info('=> initialize from coco, so adjusting the last layer') + model.final_layer = torch.nn.Conv2d(256, config.MODEL.NUM_JOINTS, (1, 1), (1, 1)) + logger.info('=> adjust done.') + ''' + pass + + if config.TRAIN.FREEZE: + model.freeze_encoder() + model.freeze_deconv() + + # copy model file + this_dir = os.path.dirname(__file__) + shutil.copy2( + os.path.join(this_dir, '../lib/models', config.MODEL.NAME + '.py'), + final_output_dir) + + writer_dict = { + 'writer': SummaryWriter(log_dir=tb_log_dir), + 'train_global_steps': 0, + 'valid_global_steps': 0, + } + + dump_input = torch.rand((config.TRAIN.BATCH_SIZE, + 3, + config.MODEL.IMAGE_SIZE[1], + config.MODEL.IMAGE_SIZE[0])) + writer_dict['writer'].add_graph(model, (dump_input,), verbose=False) + + gpus = [int(i) for i in config.GPUS.split(',')] + model = torch.nn.DataParallel(model, device_ids=gpus).cuda() + + # define loss function (criterion) and optimizer + if config.MODEL.PREDICT_VIS: + class_weights = None + if config.LOSS.USE_CLASS_WEIGHT: + vis_weight = [1.61, 7.83, 1.] + if config.MODEL.NB_VIS == 2: + vis_weight = [(1 / vis_weight[1] + 1 / vis_weight[2]) * vis_weight[0], 1.] + class_weights = torch.FloatTensor(vis_weight).cuda() + criterion = JointsMSELossVis( + use_target_weight=config.LOSS.USE_TARGET_WEIGHT, + vis_ratio=config.LOSS.VIS_RATIO, + vis_weight=class_weights + ).cuda() + for st in config.LOSS.VIS_STEP: + if config.TRAIN.BEGIN_EPOCH >= st: + criterion.update_vis_ratio(config.LOSS.VIS_FACTOR) + else: + break + else: + criterion = JointsMSELoss( + use_target_weight=config.LOSS.USE_TARGET_WEIGHT + ).cuda() + + optimizer = get_optimizer(config, model) + + lr_scheduler = torch.optim.lr_scheduler.MultiStepLR( + optimizer, config.TRAIN.LR_STEP, config.TRAIN.LR_FACTOR + ) + + # Data loading code + normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + train_dataset = eval('dataset.' + config.DATASET.DATASET)( + config, + config.DATASET.ROOT, + config.DATASET.TRAIN_SET, + True, + transforms.Compose([ + transforms.ToTensor(), + normalize, + ]) + ) + valid_dataset = eval('dataset.' + config.DATASET.DATASET)( + config, + config.DATASET.ROOT, + config.DATASET.TEST_SET, + False, + transforms.Compose([ + transforms.ToTensor(), + normalize, + ]) + ) + + train_loader = torch.utils.data.DataLoader( + train_dataset, + batch_size=config.TRAIN.BATCH_SIZE * len(gpus), + shuffle=config.TRAIN.SHUFFLE, + num_workers=config.WORKERS, + pin_memory=True + ) + valid_loader = torch.utils.data.DataLoader( + valid_dataset, + batch_size=config.TEST.BATCH_SIZE * len(gpus), + shuffle=False, + num_workers=config.WORKERS, + pin_memory=True + ) + + best_perf = 0.0 + best_model = False + for epoch in range(config.TRAIN.BEGIN_EPOCH, config.TRAIN.END_EPOCH): + + # Step Loss + if config.MODEL.PREDICT_VIS and epoch in config.LOSS.VIS_STEP: + criterion.update_vis_ratio(config.LOSS.VIS_FACTOR) + + # train for one epoch + train(config, train_loader, model, criterion, optimizer, epoch, + final_output_dir, tb_log_dir, writer_dict) + + lr_scheduler.step() + + # evaluate on validation set + perf_indicator = validate(config, valid_loader, valid_dataset, model, + criterion, final_output_dir, tb_log_dir, + writer_dict) + + if perf_indicator > best_perf: + best_perf = perf_indicator + best_model = True + else: + best_model = False + + logger.info('=> saving checkpoint to {}'.format(final_output_dir)) + save_checkpoint({ + 'epoch': epoch + 1, + 'model': get_model_name(config), + 'state_dict': model.state_dict(), + 'perf': perf_indicator, + 'optimizer': optimizer.state_dict(), + }, best_model, final_output_dir) + + if config.TRAIN.SAVE_CHECKPOINT and not (epoch + 1) % config.TRAIN.SAVE_CHECKPOINT: + shutil.copy2(os.path.join(final_output_dir, 'checkpoint.pth.tar'), + os.path.join(final_output_dir, f'checkpoint_{epoch + 1}.pth.tar')) + + final_model_state_file = os.path.join(final_output_dir, + 'final_state.pth.tar') + logger.info('saving final model state to {}'.format( + final_model_state_file)) + torch.save(model.module.state_dict(), final_model_state_file) + writer_dict['writer'].close() + + +if __name__ == '__main__': + main() diff --git a/pose_estimation/valid.py b/pose_estimation/valid.py new file mode 100644 index 0000000..35856a3 --- /dev/null +++ b/pose_estimation/valid.py @@ -0,0 +1,189 @@ +# ------------------------------------------------------------------------------ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +# Written by Bin Xiao (Bin.Xiao@microsoft.com) +# ------------------------------------------------------------------------------ + + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import argparse +import os +import pprint +from collections import OrderedDict + +import torch +import torch.nn.parallel +import torch.backends.cudnn as cudnn +import torch.optim +import torch.utils.data +import torch.utils.data.distributed +import torchvision.transforms as transforms + +import _init_paths +from core.config import config +from core.config import update_config +from core.config import update_dir +from core.loss import JointsMSELoss, JointsMSELossVis +from core.function import validate +from utils.utils import create_logger + +import dataset +import models + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train keypoints network') + # general + parser.add_argument('--cfg', + help='experiment configure file name', + required=True, + type=str) + + args, rest = parser.parse_known_args() + # update config + update_config(args.cfg) + + # training + parser.add_argument('--frequent', + help='frequency of logging', + default=config.PRINT_FREQ, + type=int) + parser.add_argument('--gpus', + help='gpus', + type=str) + parser.add_argument('--workers', + help='num of dataloader workers', + type=int) + parser.add_argument('--model-file', + help='model state file', + type=str) + parser.add_argument('--use-detect-bbox', + help='use detect bbox', + action='store_true') + parser.add_argument('--flip-test', + help='use flip test', + action='store_true') + parser.add_argument('--post-process', + help='use post process', + action='store_true') + parser.add_argument('--shift-heatmap', + help='shift heatmap', + action='store_true') + parser.add_argument('--coco-bbox-file', + help='coco detection bbox file', + type=str) + + args = parser.parse_args() + + return args + + +def reset_config(config, args): + if args.gpus: + config.GPUS = args.gpus + if args.workers: + config.WORKERS = args.workers + if args.use_detect_bbox: + config.TEST.USE_GT_BBOX = not args.use_detect_bbox + if args.flip_test: + config.TEST.FLIP_TEST = args.flip_test + if args.post_process: + config.TEST.POST_PROCESS = args.post_process + if args.shift_heatmap: + config.TEST.SHIFT_HEATMAP = args.shift_heatmap + if args.model_file: + config.TEST.MODEL_FILE = args.model_file + if args.coco_bbox_file: + config.TEST.COCO_BBOX_FILE = args.coco_bbox_file + + +def main(): + args = parse_args() + reset_config(config, args) + + logger, final_output_dir, tb_log_dir = create_logger( + config, args.cfg, 'valid') + + logger.info(pprint.pformat(args)) + logger.info(pprint.pformat(config)) + + # cudnn related setting + cudnn.benchmark = config.CUDNN.BENCHMARK + torch.backends.cudnn.deterministic = config.CUDNN.DETERMINISTIC + torch.backends.cudnn.enabled = config.CUDNN.ENABLED + + model = eval('models.' + config.MODEL.NAME + '.get_pose_net')( + config, is_train=False + ) + + if config.TEST.MODEL_FILE: + logger.info('=> loading model from {}'.format(config.TEST.MODEL_FILE)) + + state_dict = torch.load(config.TEST.MODEL_FILE) + if "state_dict" in state_dict: + state_dict = OrderedDict([(k.replace('module.', ''), v) for k, v in state_dict['state_dict'].items()]) + model.load_state_dict(state_dict) + else: + model_state_file = os.path.join(final_output_dir, + 'final_state.pth.tar') + logger.info('=> loading model from {}'.format(model_state_file)) + model.load_state_dict(torch.load(model_state_file)) + + gpus = [int(i) for i in config.GPUS.split(',')] + model = torch.nn.DataParallel(model, device_ids=gpus).cuda() + + # define loss function (criterion) and optimizer + if config.MODEL.PREDICT_VIS: + class_weights = None + if config.LOSS.USE_CLASS_WEIGHT: + vis_weight = [1.61, 7.83, 1.] + if config.MODEL.NB_VIS == 2: + vis_weight = [(1 / vis_weight[1] + 1 / vis_weight[2]) * vis_weight[0], 1.] + class_weights = torch.FloatTensor(vis_weight).cuda() + criterion = JointsMSELossVis( + use_target_weight=config.LOSS.USE_TARGET_WEIGHT, + vis_ratio=config.LOSS.VIS_RATIO, + vis_weight=class_weights + ).cuda() + for st in config.LOSS.VIS_STEP: + if config.TRAIN.BEGIN_EPOCH >= st: + criterion.update_vis_ratio(config.LOSS.VIS_FACTOR) + else: + break + else: + criterion = JointsMSELoss( + use_target_weight=config.LOSS.USE_TARGET_WEIGHT + ).cuda() + + # Data loading code + normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + + valid_dataset = eval('dataset.' + config.DATASET.DATASET)( + config, + config.DATASET.ROOT, + config.DATASET.TEST_SET, + False, + transforms.Compose([ + transforms.ToTensor(), + normalize, + ]) + ) + valid_loader = torch.utils.data.DataLoader( + valid_dataset, + batch_size=config.TEST.BATCH_SIZE * len(gpus), + shuffle=False, + num_workers=config.WORKERS, + pin_memory=True + ) + + # evaluate on validation set + validate(config, valid_loader, valid_dataset, model, criterion, + final_output_dir, tb_log_dir) + + +if __name__ == '__main__': + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1e9306d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +EasyDict +opencv-python==3.4.13.47 +Cython +scipy +numpy +pandas +pyyaml +json_tricks +scikit-image +scikit-learn +tensorboard +tensorboardX>=1.2 +torchvision -- GitLab