새소식

딥러닝, 머신러닝/Pose Estimation

video 3D pose estimation

  • -

이미지에서만 하던 3D Pose estimation에서 한 차원 더 나아가, 영상에서의 3D Pose Estimation에 대해 알아보겠습니다.

 

가장 쉬운 방법

  • 매 프레임마다 단일 이미지에서 inference
  • motion blur가 심할 때는 단일 이미지만 보고 3D human pose estimation을 하기가 매우 어려움
  • 단일 이미지에서의 3D human pose estimator는 주변 프레임 정보를 활용할 수 없기 때문에,
    주변 프레임 정보를 활용할 수 있는 temporal module이(LSTM, GRU, GraphCNN, Transformer, …) 필요

 

temporal module

  • 여러 시간대의 정보를 조합할 수 있는 모듈
  • 단일 프레임 + 주변 프레임 정보까지 활용 가능
  • 같은 데이터셋이면 비디오를 입력으로 하는 게 당연히 더 높은 성능
  • 대신 여러 프레임을 GPU에 올려야 하니 GPU 메모리가 매우 부족해짐
  • 비디오 베이스는 보통 10프레임은 기본으로 함

 

데이터셋

  • mocap based : 대부분 automatic annotation 사용
    (여러 카메라에서 2d pose 추정하고 그걸 triangulation)
  • in-the-wild : 대부분 single RGB, data annotation이 매우 어려움
    (매 프레임마다 포즈를 annotation해야 하기 때문)
    단일 이미지 기반 방법들은 in-the-wild를 추가로 학습에 사용할 수 있기 때문에 비디오보다 더 높은 성능 나옴
  • insta variety : 2D pose estimation 결과를 GT로 사용

 

여러 트릭

 

3d pose lifting (VideoPose3D)

  1. 입력을 이미지 말고 2D pose로 대체(lifting) : 메모리 사용량도 적음
  2. image feature vector를 disk에 저장해두고 로드하는 방식 (TCMR에서도 사용).
    ResNet : Global Average Pooling해서 2048 vector로 만들고 디스크에 저장한다.
    학습 시 추출한 feature를 입력으로 받는다. (end-to-end 학습 불가, data augmentation 불가한 단점)

TCMR 아키텍처

 

 


 

 

TCMR (2021)

TCMR result

  • 기존 방식의 문제점 : 기존의 방식들은 static feature에 크게 의존하기 때문에 영상에서 떨림(jittering) 현상 발생
  • TCMR : 같은 에러가 나더라도 temporal data 사용하면, 전후프레임과 비슷한 에러의 방향이라 보기좋음

TCMR 아키텍처(2)

  • 영상을 입력으로 받고, ResNet으로 feature 추출해서 disk에 저장한다.
    3개의 temporal encoder가 있어서, temporal feature를 추출한다.
  1. poseForecast#1 (위 그림의 상단 영역, g_past)
    현재 프레임의 이전 프레임들을 입력으로 받아서, past frame들로 부터 온 feature를 만든다.
    > 과거만 보고 미래가 뭐였을지 예측한다.
  2. 현재 feature (위 그림의 중간 영역, g_all)
    > temporal encoder에서만 오는 거 사용 (residual connection 미사용)
  3. poseForecast#2 (위 그림의 하단 영역, g_future)
    미래 프레임의 전 프레임들 입력으로 받아서, 미래 frame들로 부터 온 feature를 만든다
    > 미래만 보고, 과거가 뭐였을지 예측한다.
  • 위 3개의 모듈을 integration (Attention module 사용)
  • static feature를 봤을 땐 못하지만, temporal feature를 봤을 때 할 수 있는 걸 모델에 강제하면서 static feature에 대한 강한 의존도를 낮췄다.
  • pose forecast로 미래 프레임 혹은 과거 프레임으로부터 현재 프레임을 추정하도록, 흐름을 보도록 디자인했다.

 

pose forecast

표1,2 / 결과

  • current frame을 없애면, TCMR이 static feature만을 선호하는 걸 방지하고, temporal feature에만 집중할 수록 해서 temporal error(Accel)가 더 감소했다.
  • 우측 이미지를 봤을 때, per frame accuracy는 기존 SOTA 대비 약간 개선이 되지만, temporal consitency에는 큰 개선을 했다 (acceleration error).
  • VIBE, MEVA는 동작 변화 크면 acc error가 컸음(오른쪽 그림, acc error spikes) : TCMR이 기존 방식보다 효과적이라는 결과

  • 보통 average filter를 많이 쓴다. (표-5. window 5개짜리 필터, 에버리지해서 current frame output사용)
    : MEVA, TCMR에 적용하면 에러 더 커짐 (contextual information을 고려하지 않기 때문, 무조건 5개 에버리지)
  • TCMR은 엄청 부드러운 결과 : accel error

표5

 

 


 

 

Code

 

https://github.com/hongsukchoi/TCMR_RELEASE/blob/master/lib/models/tcmr.py

 

TCMR 데이터 처리부 (lib/data_utils/h36m_utils.py)

  • h36m 데이터셋 처리하는 부분인데, read_data_train 메서드에서 extract_feature로 feature를 추출한 뒤, joblib.dump로 파일로 추출한 feature들을 저장하고 있다.

 

feature 추출 모델 (pretrained hmr)

  • 위와 같은 소스(h36m_utils.py)인데, feature 추출하는 모델은 SPIN의 pretrained hmr을 사용한다.

 

TCMR 모델 코드 (lib/models/tcmr.py)

  • Temporal encoder : GRU 사용
  • gru_bef, gru_aft : 이전(before), 이후(after)에 기반한 pose forecast 모듈
  • gru_cur : 현재 프레임 기반의 temporal encoder

 

TCMR 모델 코드-2 (lib/models/tcmr.py)

  • x_bef : mid_frame 전까지
  • x_aft : mid_frame 이후
  • y : temporal feature concat (y_before, y_current, y_after)
  • 마지막 integration : attention (코드 상의 scores 부분)

 

TCMR 모델 코드-3 (lib/models/tcmr.py)

TemporalAttention : softmax하고 score output

  • activation의 크기에 기반하여 weighted average하기 위해 attention 사용
  • attention score에 기반한 average

 

 


 

 

참고자료

https://github.com/facebookresearch/VideoPose3D

 

GitHub - facebookresearch/VideoPose3D: Efficient 3D human pose estimation in video using 2D keypoint trajectories

Efficient 3D human pose estimation in video using 2D keypoint trajectories - GitHub - facebookresearch/VideoPose3D: Efficient 3D human pose estimation in video using 2D keypoint trajectories

github.com

https://arxiv.org/pdf/2011.08627.pdf

https://github.com/hongsukchoi/TCMR_RELEASE

 

GitHub - hongsukchoi/TCMR_RELEASE: Official Pytorch implementation of "Beyond Static Features for Temporally Consistent 3D Human

Official Pytorch implementation of "Beyond Static Features for Temporally Consistent 3D Human Pose and Shape from a Video", CVPR 2021 - GitHub - hongsukchoi/TCMR_RELEASE: Official Pytorch...

github.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.