GithubHelp home page GithubHelp logo

mkocabas / pare Goto Github PK

View Code? Open in Web Editor NEW
355.0 14.0 72.0 20.54 MB

Code for ICCV2021 paper PARE: Part Attention Regressor for 3D Human Body Estimation

License: Other

Python 99.88% Shell 0.12%
human-pose-estimation 3d-human-shape-and-pose-estimation 3d-human-reconstruction computer-vision computer-graphics

pare's Introduction

PARE: Part Attention Regressor for 3D Human Body Estimation [ICCV 2021]

Open In Colab report report

PARE: Part Attention Regressor for 3D Human Body Estimation,
Muhammed Kocabas, Chun-Hao Paul Huang, Otmar Hilliges Michael J. Black,
International Conference on Computer Vision (ICCV), 2021

Features

PARE is an occlusion-robust human pose and shape estimation method. This implementation includes the demo and evaluation code for PARE implemented in PyTorch.

Updates

  • 13/10/2021: Demo and evaluation code is released.

Getting Started

PARE has been implemented and tested on Ubuntu 18.04 with python >= 3.7. If you don't have a suitable device, try running our Colab demo.

Clone the repo:

git clone https://github.com/mkocabas/PARE.git

Install the requirements using virtualenv or conda:

# pip
source scripts/install_pip.sh

# conda
source scripts/install_conda.sh

Demo

First, you need to download the required data (i.e our trained model and SMPL model parameters). It is approximately 1.3GB. To do this you can just run:

source scripts/prepare_data.sh

Video Demo

Run the command below. See scripts/demo.py for more options.

python scripts/demo.py --vid_file data/sample_video.mp4 --output_folder logs/demo 

Sample demo output:

Image Folder Demo

python scripts/demo.py --image_folder <path to image folder> --output_folder logs/demo

Output format

If demo finishes succesfully, it needs to create a file named pare_output.pkl in the --output_folder. We can inspect what this file contains by:

>>> import joblib # you may also use native pickle here as well

>>> output = joblib.load('pare_output.pkl') 

>>> print(output.keys())  
                                                                                                                                                                                                                                                                                                                                                                                              
dict_keys([1, 2, 3, 4]) # these are the track ids for each subject appearing in the video

>>> for k,v in output[1].items(): print(k,v.shape) 

pred_cam (n_frames, 3)          # weak perspective camera parameters in cropped image space (s,tx,ty)
orig_cam (n_frames, 4)          # weak perspective camera parameters in original image space (sx,sy,tx,ty)
verts (n_frames, 6890, 3)       # SMPL mesh vertices
pose (n_frames, 72)             # SMPL pose parameters
betas (n_frames, 10)            # SMPL body shape parameters
joints3d (n_frames, 49, 3)      # SMPL 3D joints
joints2d (n_frames, 21, 3)      # 2D keypoint detections by STAF if pose tracking enabled otherwise None
bboxes (n_frames, 4)            # bbox detections (cx,cy,w,h)
frame_ids (n_frames,)           # frame ids in which subject with tracking id #1 appears
smpl_joints2d (n_frames, 49, 2) # SMPL 2D joints 

Google Colab

Training

Training instructions will follow soon.

Evaluation

You need to download 3DPW and 3DOH datasets before running the evaluation script. After the download, the data folder should look like:

data/
├── body_models
│   └── smpl
├── dataset_extras
├── dataset_folders
│   ├── 3doh
│   └── 3dpw
└── pare
    └── checkpoints

Then, you can evaluate PARE by running:

python scripts/eval.py \
  --cfg data/pare/checkpoints/pare_config.yaml \
  --opts DATASET.VAL_DS 3doh_3dpw-all
  
python scripts/eval.py \
  --cfg data/pare/checkpoints/pare_w_3dpw_config.yaml \
  --opts DATASET.VAL_DS 3doh_3dpw-all

You should obtain results in this table on 3DPW test set:

MPJPE PAMPJPE V2V
PARE 82 50.9 97.9
PARE (w. 3DPW) 74.5 46.5 88.6

Occlusion Sensitivity Analysis

We prepare a script to run occlusion sensitivity analysis proposed in our paper. Occlusion sensitivity analysis slides an occluding patch on the image and visualizes how human pose and shape estimation result affected.

python scripts/occlusion_analysis.py \
  --cfg data/pare/checkpoints/pare_config.yaml \
  --ckpt data/pare/checkpoints/pare_checkpoint.ckpt

Sample occlusion test output:

Citation

@inproceedings{Kocabas_PARE_2021,
  title = {{PARE}: Part Attention Regressor for {3D} Human Body Estimation},
  author = {Kocabas, Muhammed and Huang, Chun-Hao P. and Hilliges, Otmar and Black, Michael J.},
  booktitle = {Proc. International Conference on Computer Vision (ICCV)},
  pages = {11127--11137},
  month = oct,
  year = {2021},
  doi = {},
  month_numeric = {10}
}

License

This code is available for non-commercial scientific research purposes as defined in the LICENSE file. By downloading and using this code you agree to the terms in the LICENSE. Third-party datasets and software are subject to their respective licenses.

References

We indicate if a function or script is borrowed externally inside each file. Consider citing these works if you use them in your project.

Contact

For questions, please contact [email protected]

For commercial licensing (and all related questions for business applications), please contact [email protected].

pare's People

Contributors

mkocabas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pare's Issues

How to get Human3.6M Moshed data

Hello, thanks for your excellent job! Could you give me some advice that how can I get the Human3.6M moshed data for training?

Any improvement for multiview SMPL fitting?

I'm trying to fit SMPL to scans. Currently, I just render it in different views and choose the result predicted by PARE with lowest Chamfer distance. Is there any feasible improvement on view consistency?

How to pass shape data for the "humanoids" outlook

Hi, hope you are fine.

I'm looking to use PARE for a project.

The whole idea is pass a multiperson video dataset where the humanoids takes the gesture and save just the humanoids on a separate video.

I want to pass some parameters on the result like age, gender, race,... so in the next step, humanizing the "humanoid" can "dress" it with images provided (body and faces)

Please let me know how to separate the results in different video dataset of the "humanoids" replicating the movements.

Appreciate!

Could you provide the 3DPW-OCC dataset?

Thanks for the exciting work.

Can you provide the 3DPW-OCC dataset mentioned in the paper?

It would be appreciated if you provide a 3DPW-OCC annotation file or video sequence names.

Thank you.

size not very fit??

image

for far , it looks normal, but if near:

image

the predict mesh bigger than real on image.

Colab demo

Hello, excellent work! Is there a colab demo? The “open in colab” badge link to a 404 not found page.

good

I think it may due to the egl reason.

download data

Hi,could you please share the required data with google drive? I could not download from dropbox. Thanks! @mkocabas

Part Features

Hi Vibe, Great Work!

I wanted to ask, I need the part features before the heat maps.
Altho, from the code I see that the final step of the part features is the _get_part_attention_map function.
Afterwards, I see that there is an if statement that says: elif self.use_heatmaps == 'part_segm' then output['pred_segm_mask'] = heatmaps.
I wanted to ask, in this case the pred_segm_mask are the body part segments as you attached in the appendix of the paper?
(see attached picture :-) )
image

joints2d not found

Hi, after I run the image folder demo,I can't find joints2d in the output file. If it is possible to share the STAF dir? The path in demo.py is '/home/mkocabas/developments/openposetrack', and I can't find it. Thank you very much.

Output for images folder

Hi,

Congratulations on such a great work!

When I run PARE on an image folder I get an output pkl file that doesn't match what you specify in README.me.

For example, you specify an output key:
pose (n_frames, 72) # SMPL pose parameters
But in the output from an image folder I get this:
pred_pose (1, 24, 3, 3)

I guess that you are transforming the 72 parameters into 24 joints rotation matrices, but I can't know exactly the format of these rotations.
Would it be possible to also get the original pose parameters?

Another question is about the joints output, which includes 49 elements.
But the SMPL skeleton has only 24 joints...
How do I relate this 49 positions to the original 24 joints?

Thank you in advance.

Sincerely,

Alejandro Beacco

dataset

Thanks your good work.

could you give preprocessed dataset?

Training instruction

Hi

I'm trying to train a model. But, training instruction does not exist.
When can you upload training instruction?

Thank you.

FBX output

I really thank you for sharing this state-of-the-art model.
I just try to export the .fbx file (from vibe implementation) by it seems that there are some differences between vibe and pare in the SMPL pose parameters shape.
the shape of pose in vibe is (n_frames, 72)
but in pare is pose (n_frames, 24, 3, 3)

How can I export .fbx from the .pkl file generated via PARE?

Best regards,

issue about training data

Hi @mkocabas
Thanks for sharing this great work with helpful inspiration. I noticed that in this repo you contained some pieces of code to train PARE, however some data was missing (e.g., 3dpw_train.npz, 3dpw_all_test_with_mmpose.npz). May I kindly ask that what the status of training code and is it possible to provide missing training data listed above, it would be great if so. Thanks again for sharing ideas and code with the community.

Segmentation fault (core dumped)

When I used import pare.core.tester in my program, it was be an error of " Segmentation fault (core dumped) " occurred. How can I fix this?

How to use 'orig_cam'

Hi, thanks for your great work!

In your code, orig_cam is converted from pred_cam. However during 2D projection, a prespective camera is assumed by a given focal_length, which means pred_cam is actually used in prespective camera.

So I want to ask
(1) how can I use orig_cam? Should I use them in a weak-prespective or a prespective way?
(2) My goal in the end: if I assume a focal_length, can I also calculate the prespective camera translation in the original image space, using orig_cam?

Issues on evaluation process

Thanks for the great work!

I wanted to leave issues while I was running the evaluation code.

hparams.DATASET.NUM_WORKERS = -1 # set this to be compatible with other machines

num_workers=-1 raises an error in my machine as below:
ValueError: num_workers option should be non-negative; use num_workers=0 to disable multiprocessing.

num_workers=0 resolves the issue.

In order to use jpeg4py module smoothly, I had to install libturbojpeg using the following command:
sudo apt-get install libturbojpeg
You might not have noticed this dependency yet, since it's not a python module.

FileNotFoundError is raised when running demo.py

Hi, I ran into this issue when I was trying to run demo.py on Windows platform. Here is the log:

Traceback (most recent call last):
    File "D:\工程文件\Python\PARE\scripts\demo.py", line 242, in <module>
    main(args)
  File "D:\工程文件\Python\PARE\scripts\demo.py", line 69, in main
    input_image_folder, num_frames, img_shape = video_to_images(
  File "D:\工程文件\Python\PARE\pare\utils\demo_utils.py", line 195, in video_to_images
    subprocess.call(command)
  File "C:\Users\Freeman\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 340, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Users\Freeman\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Freeman\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1307, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 系统找不到指定的文件。

The Chinese sentence means "System cannot find the specified file". It seems this error occurred when the process was trying to launch a subprocess to convert the video to images, but I can't figure out exactly which file is missing nor do I understand why such an error would occur. Is there anyone who ran into a similar problem?

Training instruction

Your work is so excellent ! I want to retrain your model.And I would appreciate it if you share your training instruction! best wishes~

Training code

Thanks for sharing this great and interesting work!
I want to know when will you release the training code?

Query on Shape of Pred_pose parameters

Hello @mkocabas,
Thank you for the work.

I ran the demo.py on my folder of images and got the individual pkl files. Upon checking the shape of all the dict_keys,
I found the pred_pose which should be (1, 72) - since I have pkl files per frame.
I have (1,24, 3, 3) - I am aware that 24*3 would be the total 72 pose parameters, but why the extra 3 at the end.

Can you tell me how can I transform it into (1,72) shape

Screenshot 2023-06-10 150647

why PARE don't have fitting part?

From VIBE, there are some operation when do smpl, it will do fitting in a train loop, but PARE seems don't have it.
Why it was still performance better than VIBE?

cannot run the demo.py

I cloned the repo and run
'source scripts/install_pip.sh'
'source scripts/prepare_data.sh'
'python scripts/demo.py --vid_file data/sample_video.mp4 --output_folder logs/demo '.
Then i got error:

"(PARE) ywk@hello-Precision-3640-Tower:~/桌面/Paper/PARE$ python scripts/demo.py --vid_file data/sample_video.mp4 --output_folder logs/demo

2021-11-01 21:05:45.270 | INFO | main:main:65 - Frames are already extracted in "logs/demo/sample_video_/tmp_images"
2021-11-01 21:05:45.389 | INFO | main:main:97 - Demo options:
Namespace(batch_size=16, beta=1.0, cfg='data/pare/checkpoints/pare_w_3dpw_config.yaml', ckpt='data/pare/checkpoints/pare_w_3dpw_checkpoint.ckpt', detector='yolo', display=False, draw_keypoints=False, exp='', image_folder=None, min_cutoff=0.004, mode='video', no_render=False, no_save=False, output_folder='logs/demo', save_obj=False, sideview=False, smooth=False, staf_dir='/home/mkocabas/developments/openposetrack', tracker_batch_size=12, tracking_method='bbox', vid_file='data/sample_video.mp4', wireframe=False, yolo_img_size=416)
2021-11-01 21:05:46.038 | INFO | pare.models.backbone.hrnet:init_weights:530 - => init weights from normal distribution
2021-11-01 21:05:46.231 | WARNING | pare.models.backbone.hrnet:init_weights:558 - IMPORTANT WARNING!! Please download pre-trained models if you are in TRAINING mode!
2021-11-01 21:05:46.231 | INFO | pare.models.head.pare_head:init:125 - "Keypoint Attention" should be activated to be able to use part segmentation
2021-11-01 21:05:46.231 | INFO | pare.models.head.pare_head:init:126 - Overriding use_keypoint_attention
2021-11-01 21:05:46.253 | INFO | pare.models.head.pare_head:init:327 - Keypoint attention is active
WARNING: You are using a SMPL model, with only 10 shape coefficients.
2021-11-01 21:05:58.125 | INFO | pare.core.tester:_load_pretrained_model:113 - Loading pretrained model from data/pare/checkpoints/pare_w_3dpw_checkpoint.ckpt
2021-11-01 21:05:58.365 | WARNING | pare.utils.train_utils:load_pretrained_model:45 - Removing "model." keyword from state_dict keys..
2021-11-01 21:05:58.749 | INFO | pare.core.tester:_load_pretrained_model:116 - Loaded pretrained weights from "data/pare/checkpoints/pare_w_3dpw_checkpoint.ckpt"
2021-11-01 21:05:58.753 | INFO | main:main:103 - Input video number of frames 3080
Downloading files from https://raw.githubusercontent.com/mkocabas/yolov3-pytorch/master/yolov3/config/yolov3.cfg
--2021-11-01 21:05:58-- https://raw.githubusercontent.com/mkocabas/yolov3-pytorch/master/yolov3/config/yolov3.cfg
正在连接 127.0.0.1:8889... 已连接。
已发出 Proxy 请求,正在等待回应... 200 OK
长度: 8338 (8.1K) [text/plain]
正在保存至: “/home/ywk/.torch/config/yolov3.cfg”

yolov3.cfg 100%[===================>] 8.14K --.-KB/s 用时 0s

2021-11-01 21:05:59 (32.7 MB/s) - 已保存 “/home/ywk/.torch/config/yolov3.cfg” [8338/8338])

Running Multi-Person-Tracker
100%|█████████████████████████████████████████| 257/257 [01:23<00:00, 3.09it/s]
Finished. Detection + Tracking FPS 37.06
2021-11-01 14:54:27.210 | INFO | pare.core.tester:run_on_video:287 - Running PARE on each tracklet...
0%| | 0/278 [00:00<?, ?it/s]2021-11-07 14:54:28.564 | INFO | pare.core.tester:run_on_video:362 - Converting smpl keypoints 2d to original image coordinate
0%|▏ | 1/278 [00:01<06:12, 1.34s/it]2021-11-07 14:54:30.089 | INFO | pare.core.tester:run_on_video:362 - Converting smpl keypoints 2d to original image coordinate
1%|▎ | 2/278 [00:02<06:26, 1.40s/it]2021-11-07 14:54:31.578 | INFO | pare.core.tester:run_on_video:362 - Converting smpl keypoints 2d to original image coordinate
1%|▍ | 3/278 [00:04<06:32, 1.43s/it]
................
100%|█████████████████████████████████████████| 278/278 [03:13<00:00, 1.44it/s]
2021-11-01 21:10:36.733 | INFO | main:main:115 - PARE FPS: 15.92
2021-11-01 21:10:36.733 | INFO | main:main:117 - Total time spent: 277.98 seconds (including model loading time).
2021-11-01 21:10:36.733 | INFO | main:main:118 - Total FPS (including model loading time): 11.08.
2021-11-01 21:10:36.734 | INFO | main:main:121 - Saving output results to "logs/demo/sample_video_/pare_output.pkl".
WARNING: You are using a SMPL model, with only 10 shape coefficients.
libEGL warning: DRI2: failed to create dri screen
libEGL warning: DRI2: failed to create dri screen
Traceback (most recent call last):
File "scripts/demo.py", line 238, in
main(args)
File "scripts/demo.py", line 126, in main
orig_width, orig_height, num_frames)
File "./pare/core/tester.py", line 392, in render_results
wireframe=self.args.wireframe
File "./pare/utils/vibe_renderer.py", line 66, in init
point_size=1.0
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/pyrender/offscreen.py", line 31, in init
self._create()
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/pyrender/offscreen.py", line 134, in _create
self._platform.init_context()
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/pyrender/platforms/egl.py", line 177, in init_context
assert eglInitialize(self._egl_display, major, minor)
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/OpenGL/platform/baseplatform.py", line 415, in call
return self( *args, **named )
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/OpenGL/error.py", line 234, in glCheckError
baseOperation = baseOperation,
OpenGL.raw.EGL._errors.EGLError: EGLError(
err = EGL_NOT_INITIALIZED,
baseOperation = eglInitialize,
cArguments = (
<OpenGL._opaque.EGLDisplay_pointer object at 0x7f9a2e003710>,
c_long(0),
c_long(0),
),
result = 0
)"
can you tell me how solve the error?

where are the Sup. Mat?

Hello, thanks for your excellent job! You have mentioned in articles that more details are provided in Sup. Mat, but I haven't found where are the Sup. Mat?

Error of eval.py and occlusion_analysis.py

When i run 'eval.py' and 'occlusion_analysis.py' , i got error:
WARNING: You are using a SMPL model, with only 10 shape coefficients.
WARNING: You are using a SMPL model, with only 10 shape coefficients.
WARNING: You are using a SMPL model, with only 10 shape coefficients.
libEGL warning: DRI2: failed to create dri screen
libEGL warning: DRI2: failed to create dri screen
Traceback (most recent call last):
File "/home/ywk/Paper/PARE/scripts/occlusion_analysis.py", line 265, in
run_dataset(args, hparams)
File "/home/ywk/Paper/PARE/scripts/occlusion_analysis.py", line 129, in run_dataset
model = PARETrainer(hparams=hparams).to(device)
File "/home/ywk/Paper/PARE/scripts/pare/core/trainer.py", line 223, in init
mesh_color=self.hparams.DATASET.MESH_COLOR,
File "/home/ywk/Paper/PARE/scripts/pare/utils/renderer.py", line 43, in init
point_size=1.0
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/pyrender/offscreen.py", line 31, in init
self._create()
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/pyrender/offscreen.py", line 134, in _create
self._platform.init_context()
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/pyrender/platforms/egl.py", line 177, in init_context
assert eglInitialize(self._egl_display, major, minor)
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/OpenGL/platform/baseplatform.py", line 415, in call
return self( *args, **named )
File "/home/ywk/anaconda3/envs/PARE/lib/python3.7/site-packages/OpenGL/error.py", line 234, in glCheckError
baseOperation = baseOperation,
OpenGL.raw.EGL._errors.EGLError: EGLError(
err = EGL_NOT_INITIALIZED,
baseOperation = eglInitialize,
cArguments = (
<OpenGL._opaque.EGLDisplay_pointer object at 0x7fa447ad8680>,
c_long(0),
c_long(0),
),
result = 0
)

Process finished with exit code 1
Can you tell me how to solve it ? Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.