# Maesil 3D model ![](https://i.imgur.com/nVaVV0h.gif) ![](https://i.imgur.com/368AkyY.gif) ![3dpose](https://i.imgur.com/9PJh1Zc.gif) Maesil-AI/3dmodel 은 입력된 동영상을 [openpose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)를 활용 및 [STAF](https://arxiv.org/abs/1811.11975), [VIBE](https://arxiv.org/abs/1912.05656)를 기반으로 매실 서비스에 *업로드 된 동영상*의 2D COCO keypoints와 3D SMPL keypoints, 3D meshses를 추론 및 3D 렌더링을 하는 기능을 담은 레포지토리입니다. ## 작동 아키텍처 ![](https://i.imgur.com/Cift9oW.png) ### OpenCV with STAF(Spatio-Temporal Affinity Fields) Algorithm ![](https://i.imgur.com/m1B9XJC.jpg) 1. PAF(Part Affinity Field)로 각 프레임 별 키포인트와 키포인트의 연결을 생성 2. TAF(Temporal Affinity Field)로 프레임간 키포인트간 연결을 생성 1번과 2번 과정을 합쳐 STAF라 부른다. ### VIBE(Video Inference for Human Body Pose and Shape Estimation) 입력된 영상의 3D Pose Estimation을 담당 ![](https://i.imgur.com/gvqTSUL.png) 1. 영상의 각 프레임을 이미지화 2. 학습된 CNN을 사용하여 피처 추출 3. 양방향 GRU로 구성된 Temporal Encoder를 학습(과거 및 미래 프레임에서 통합 된 정보를 포함하는 잠재 변수를 출력): SMPL 바디 모델의 매개 변수를 회귀 4. AMASS(대용량 모션 캡처 데이터셋) 등을 이용하여 현실적인 움직임의 시퀀스인지를 판단하는 Motion Discriminator ![](https://i.imgur.com/j4WOEIS.png) ### [OneEuro Filter](https://cristal.univ-lille.fr/~casiez/1euro/) ![](https://i.imgur.com/ohL1DeJ.png) 높은 precision을 보여주면서 칼만 필터보다 간단하게 구현할 수 있는 노이즈 제거 필터. 적응형 first-order LPF. ## Installation ### OpenPose 설치 1. (Important) Remove Anaconda 2. Install CMake GUI 3. Install CUDA 11.1 4. Install cuDNN 8 5. Install Caffe, OpenCV 6. [Build OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md#cmake-configuration) 7. Generate models `cd models; sh getModles.sh` 9. Test `build/examples/openpose/openpose.bin --model_pose BODY_21A --trakcing 1 --video examples/media/video.avi --write_video output/result.mp4` ### 3D Model 설치 1. `sudo apt install ffmpeg` 2. Install conda 3. Install nvidia driver and nvidia-cuda-toolkit 4. Set Virtual Environment and Install Prequisities `source scripts/install_conda.sh` 6. Prepare data `source scripts/prepare_data.sh` 7. Test VIBE `python demo.py --vid_file sample.video.mp4 --output_folder --output_folder output/ --tracking_method pose --staf_dir ../openpose` 8. Install requirements for maesil-3dmodel `pip install -r requirements2.txt` 9. (Dotenv file configure) 10. Test: ``` python server.py python test_client.py ``` ### **Important** Caution 1. 가지고 있는 그래픽카드에 따라서 Ubuntu 버전, 맞는 드라이버 버전, CUDA version, cuDNN version 등을 제대로 설정해야 함. 2. cmake version이 너무 낮으면 에러가 나고 너무 높으면 openssl 관련 에러가 나는데 최신 버전을 사용후 openssl 설정을 하는 것을 추천 3. OpenPose 빌드 오류 시 Caffe 를 OpenPose 폴더 안에 수동으로 git clone 해야 함. ## Evaluation 1. 포즈 추출 등에서 현재 최고의 성능(SOTA)을 추구할 필요는 없다. 2. 그러나 유저들이 만족할 수 있는 수준. 불합리하다고 느끼지 않을 수준의 결과를 뽑아야 한다. 3. 속도가 더 중요한 가치인데 업로드 되는 영상을 빠르게 처리해서 올릴 수 있도록 해야한다. 4. 만족할만한 속도를 뽑기 위해 (하이퍼파라미터 등)튜닝을 한다. ### Dataset #### [MPI-INF-3DHP](http://gvv.mpi-inf.mpg.de/3dhp-dataset/) (11G) 마커없는 멀티뷰 모션 캡처 3D 데이터 세트 #### [InstaVariety](https://github.com/akanazawa/human_dynamics/blob/master/doc/insta_variety.md) (53GB) 인스타그램 비디오중 특정 동작 해시태그가 있는 비디오를 통해 만든 2D 데이터 세트 #### Moreover ### Metrics + MPJPE (mean per joint position error)골반 관절을 Ground Truth 위치에 중심을 둔 후 Ground-Truth와 예상 관절 위치 사이의 Euclidean 거리의 평균으로 계산 + PA-MPJPE (Prorustes Aligned MPJPE) MPJPE를 개선하여 rigid alignment 한 값 ### Result Train with RTX 3080 / AMD Ryzen 5 3600 Inference with RTX 3080 / AMD Ryzen 5 3600 #### 속도 - 2D Pose Estimation FPS: 33 FPS - 3D Pose Estimation FPS: 24 FPS - 3D Rendering FPS: 9 FPS(렌더링 되는 결과 영상 FPS 조정이 필요함) --- * 속도 최적화를 배치 사이즈 조정과 영상 전처리 등을 통해 최대의 속도를 맞춰가고 있는 중. #### 3D 정확도 | Model | PA-MPJPE | | -------- | -------- | | MEVA(+ExData) (SOTA) | 51.9 | |VIBE(+ExData) | 55.9| I2L-MeshNet(+ExData) | 58.6 | |SPIN(+ExData) | 59.2| | ExPose | 60.7 | | **Maesil-3dmodel** | 65.1 | |Cross DatasetGeneralization(+ExData) |65.2| |STRAPS | 66.8 | | DSD-SATN | 69.5 | | Spatio-Temporal Network | 71.8 | |Exploiting temporal context for 3D human pose estimation in the wild|72.2| |HMR | 81.3 | --- ![](https://i.imgur.com/SgHl9Ur.jpg) ## 제작 ![](https://i.imgur.com/cI3dyFI.jpg)