3D human pose estimation in video with temporal convolutions and semi-supervised training (CVPR '19)
이번에 리뷰하는 논문은 FAIR(Facebook AI Research)에서 2019 CVPR에 발표한 '3D human pose estimation in video with temporal convolutions and semi-supervised training'이라는 제목의 논문이다.
3D Pose Estimation에 관한 논문이고, 3D 도메인 관련하여 Pose Estimation 오픈 소스 서베이를 하던 와중에 리눅스로 편하게 빌드할 수 있는 기법이어서 논문 요약 및 리뷰까지 진행하게 되었다.
1.Introduction
본 논문에서는 3D Human Pose Estimation 문제를 동영상에서 풀고자 하고,
문제를 풀기 위해 기존의 2D pose estimation에 기반하는 3D pose estimation 기법을 설계했다.
기존 연구들은 temporal information을 처리하기 위해 RNN을 사용하기도 했지만 CNN이 temporal information을 모델링하는데 훌륭하고, 복수 프레임의 병렬 처리도 가능케하기 때문에 본 논문에서는 CNN 기반 기법을 채택했다.
그리고 이 논문에서는 두가지 주된 contribution이 있다.
- 첫번째는 Dilated temporal convolution에 기반한 3D human pose estimation을 위한 단순하고 효율적인 방법을 제시했다는 것이다. 이를 통해 RNN 기반 기법들보다 복잡도와 파라미터 측면에서 더 효율적임을 증명했다
- 두번째는 semi-supervised 기법을 통해 라벨이 없는 비디오와 데이터가 적은 분야에서의 효율적인 방법을 제시했다. 과거 semi-supervised 기법과 비교할 때 본 논문은 camera intrinsic parameter만을 필요로 한다.(타 논문은 GT 2D annotation or multi-view imagery with extrinsic camera parameter도 필요)
* 카메라 내부 파라미터 : 초점거리, 주점, 비대칭 계수
카메라 외부 파라미터 : 카메라 좌표계와 월드 좌표계 사이의 변환 관계를 설명하는 파라미터로서, 두 좌표계 사이의 회전(rotation) 및 평행이동(translation) 변환으로 표현
2. Related Work
딥 러닝 기법 이전에는 대부분의 기법은 feature engineering과 스켈레톤과 관절 움직임에 대한 가정에 기반했다.
초창기의 딥러닝 기법들은 CNN 기반으로 end-to-end 방식으로 직접 RGB 영상에서 3D pose를 추정하였다.
Two-step pose estimation
이 방법으로 분류되는 기법들은 처음에 2D 관절 위치를 image space에서 추정하고 이후 3D 도메인으로 확장시키는 방법들로, 일반적으로 end-to-end 기법들보다 성능이 좋다.
- k-nearest neighbor search로 2D 키포인트를 구하고 그에 상응하는 3D pose를 구하던 방법
- image feature와 2D GT pose를 사용하기도 했다.
- 주어진 2D 키포인트에 그들의 깊이 추정을 함으로써 3D pose 계산
- 뼈 길이(Bond Length)와 projection consistency에 대해 2D GT와 함께 prior를 이용
Video pose estimation
일부 연구는 spatio-temporal volume의 HoG feature를 이용하여 3D pose를 추정.
LSTM으로 하나의 이미지에서 추정한 3D pose들을 정제하기도 해왔다.
하지만 가장 성공적인 기법들은 2D keypoint trajectories에 기반했다.
최근에, LSTM seq2seq 모델들이 제안되었고, 이는 2D pose들의 sequence를 고정된 크기의 벡터로 인코딩하고 이후 3D pose들의 sequence로 디코딩한다.
Semi-supervised training
일부 연구는 2D PE를 위해 학습된 feature를 3D task에 transfer.
2D annotation만 가능한 상황에서 GAN은 realistic / unrealistic pose를 discriminate(구분)할 수 있다.
또한 일부 연구에서는 GAN을 이용하여 unpaired 2D/3D dataset으로부터 학습을 했고, 2D projection consistency term을 포함했다(아마도 loss term에?).
이와 유사하게, 일부 연구는 3D pose를 임의로 2D에 projection시킨 후 discriminate하였다.
또 일부 연구는 weakly-supervised 기법을 제안하여 2D pose dataset을 depth annotation을 이용해 증강하는 방법도 있다.
* Supervised: fully labelled
Semi-supervised: labelled+unlabelled
Weakly-supervised: Bootstrapping 또는 self-training이라고도 불림. 적은 수의 샘플에서 시작해서, classifier를 만들고, positive example을 예측해서 labeling을 하고 다시 re-training을 함으로써 classifier를 성장시킨다. 당연한 얘기지만 positive example 예측이 잘못될 경우 classifier가 더 나빠질 수 있다.
Unsupervised: no labeled
3D shape recovery
본 논문이 정확한 3D pose에 집중한 반면, 사람의 full 3D shape을 복원하려는 연구들도 있다. 주로 parametrized 3D mesh에 기반하며, pose accuracy는 덜 중요하다. (ex : DensePose, VIBE, etc)
Our work
본 논문에서는 히트맵을 사용하는 대신에 검출된 키포인트 좌표를 이용하여 pose를 표현했다.
이는 좌표의 시계열 데이터에 대해 1D convolution을 사용할 수 있게 하였다.
본 기법은 적은 파라미터로도 높은 정확도를 보여줬고, 빠른 학습과 테스트 속도를 보여준다.
그리고 seq2seq 모델 대신에 deterministic mapping을 학습한다.
또 대부분 two-step 모델들과 달리, 본 기법에서는 Mask R-CNN과 Cascaded pyramid network(CPN)을 검출기로 사용하여 3D HPE에 더욱 robust함을 보여준다.
3. Temporal dilated convolutional model
본 기법의 모델은 fully convolutional architecture로 residual connection을 포함하고 연속된 2D pose들을 입력으로 받고, 이들을 temporal convolution을 통해 변환한다.
여기서 말하는 CNN 기반 모델의 장점은
- 배치와 시간 차원에 대해 병렬화(parallelization)을 가능케함(RNN에서는 시간에 대한 병렬화 불가)
- 출력과 입력 사이의 Gradient의 경로가 sequence의 길이와 관계 없이 고정된 길이를 갖고, 이는 vanishing / exploding gradient를 완화시킴.
- Temporal receptive field에 대한 정밀한 조정을 할 수 있고 이를 통해 3D PE를 위한 temporal dependency를 모델링 할 수 있음.
또한 제안 기법에서 dilated convolution을 사용하여 long-term dependency를 모델링하고, 동시에 효율성은 유지시킨다. Dilated conv는 audio generation, semantic segmentation, machine translation 분야에서 이미 좋은 성능을 보인 바 있음.
입력 (243, 34)에서 243은 연속된 프레임의 수, 34는 프레임마다 17쌍의 (x,y) 키포인트를 포함하고 있다는 의미.
Dilated conv를 이용하여 효과적으로 resolution을 줄이고 최종적으로 17쌍의 (x,y,z) 키포인트를 얻어낸다.
4. Semi-supervised approach
본 논문에서는 라벨이 제한된 3D GT pose 데이터에 대한 정확도를 높일 수 있는 semi-supervised 학습 기법을 제시.
2D keypoint detector와 조합하여 라벨이 없는 비디오에게 기존의 supervised loss function을 back-projection loss term을 결합하여 확장시켜서 적용.
그래서 이렇게 설계한 문제를 오토인코더로 모델링한다 :
인코더(pose estimator – 3D pose estimation from 2D joint coordinates) – 디코더 (projection layer – 3D pose를 2D joint coordinate로 projection).
본 기법은 기존의 supervised component에 unsupervised component를 regularizer로서 결합시켰다.
그래서 라벨이 있는 데이터에 대해서는 GT 3D pose를 목표로 하여 supervised loss로 최적화하고, 라벨이 없는 데이터에 대해서는 오토인코더 loss를 이용하여 predicted 3D pose를 2D로 projection시키고, 기존 입력과의 consistency를 체크한다.
Trajectory Model
Perspecitve projection때문에 스크린 위의 2D Pose는 trajectory와 3D Pose에 의존적이다. 그래서 본 기법에서는 2D back-projection을 정확하게 하기 위해 3D trajectroy를 회귀(regression)한다. 이를 위해 camera space에서 global trajectory를 회귀하는 second network를 최적화하고, 해당 네트워크는 Ch3의 네트워크와 구조는 동일하고, 가중치 공유는 하지 않는다. 그리고 최적화 함수로는 weighted mean per-joint position error(WMPJPE) loss function을 사용한다.
Bone length L2 Loss
본 기법에서는 단순히 입력값을 복사하는 것 대신에 그럴듯한 3D pose 추정값을 장려한다.
이를 위해 라벨이 없는 배치와 라벨이 있는 배치 간의 평균 bone length를 비교하는 soft constraint를 추가하는 것이 효과적이라고 한다.
Discussion
본 기법은 camera intrinsic paramter를 필요로 한다.
이는 3D pose에서 2D로 변환할 때 쓰는 simple projection layer에 사용되며, 파라미터로 focal length, principal point, non-linear lens distortion coefficients를 사용한다.
또한 이 기법은 어느 특정 네트워크 구조에 한정되지 않으며, 2D 키포인트를 입력값으로 사용하는 3D pose detector에 사용 가능하다.
5. Experimental setup
5.1 Datasets and Evaluation
본 기법에서 데이터셋은 두 종류를 사용했다.
- Human3.6M : 11 종의 객체에 대한 3.6M 비디오 프레임을 포함하는 데이터셋으로, 이 중 7종은 3D pose로 라벨링 되어 있다. 각 객체는 15종의 행동을 수행하고, 4개의 동기화된 카메라로 50Hz로 촬영되었다. 이전 연구들을 따라, 본 논문에서도 17개의 키포인트를 차용했고, 5종의 객체에 대해 학습하고, 2종의 객체에 대해 테스트했다. 모든 행동에 대해 하나의 모델만을 학습시켰다.
- HumanEva-I : 3종의 객체에 대해 3개의 카메라 뷰로 60Hz로 촬영.Walk, Jog, Box의 3가지 행동에 대해서 평가했고, 각 행동에 따른 서로 다른 모델을 학습시켰다.(행동 통합 모델도 결과에는 포함) 15개의 키포인트를 사용했다.
평가 protocol은 다음 3가지를 사용했다.
- Protocol 1 : mean per-joint position error(MPJPE) in millimeters를 사용하여 추정된 관절 위치와 GT간의 평균 Euclidean 거리를 측정.
- Protocol 2 : Alignment(Translation / Rotation / Scale) 후의 error를 측정(P-MPJPE)
- Protocol 3 : semi-supervised 실험에 대해 scale에 대해서만 align한 후 GT와 비교(N-MPJPE)
5.2 Implementation details for 2D pose estimation
두가지 2D detector를 사용하여 2D pose estimation 했다.
- Mask R-CNN with a ResNet-101-FPN backbone.(Detectron에 구현되어 있음.)
- Cascaded pyramid network(CPN, extension of FPN) with a ResNet-50 backbone. : FPN이 각 feature map을 독립적인 classifier로 사용한 것에 반해, CPN은 이들을 모두 concatenate하여 단일 classifier로 사용.
5.3 Implementation details for 3D pose estimation
다른 연구들과의 일관성을 지키기 위해 camera space에서 3D pose를 rotation / translation을 이용하여 학습하고 평가했다.
Optimizer로 Amsgrad 사용. (Adam 기반의 기법과 함께 사용되는 Stochastic optimizer의 종류.)
학습 데이터 샘플 간 correlation을 줄이기 위해 서로 다른 비디오 segment에서 학습 clip을 골랐고 이는 generalization에 중요하다.
6.Result
위 결과들을 비롯하여 제시한 프로토콜들과 여러 지표에서 성능이 좋다는 결과들이 나와 있다.
7. Conclusion
비디오 내 3D HPE를 위한 Fully convolutional model를 제안.
본 논문의 구조는 2D 키포인트 trajectory에 대한 시계열 정보를 dilated convolution을 통해 처리.
라벨이 부족한 데이터에 대해 semi-supervised 학습을 위해 back-projection 기법을 제시.
Human 3.6M과 HumanEva-I 데이터셋에서 상당히 낮은 average joint error를 보여줌.
Back-projection 기법은 N-MPJPE 지표에 대해 라벨이 부족한 데이터에 대해 정확도 향상을 보여줌.
Demo
위 동영상은 청하의 AR 동영상을 캡쳐하여 위 기법을 이용하여 3D Pose Estimation을 테스트해본 결과이다.
보다시피 원본 자체에 버벅이는 부분이 있지만 상당히 결과가 좋다는 것을 확인할 수 있다.
아직 메타 데이터를 타 어플리케이션을 위한 전처리로서 얼마나 잘 활용할 수 있는지까지는 판단이 안 서지만 RGB 영상에서 이 정도 뽑을 수 있다는 것은 대단함에는 틀림이 없다.
* 데모 코드 링크 : github.com/facebookresearch/VideoPose3D
facebookresearch/VideoPose3D
Efficient 3D human pose estimation in video using 2D keypoint trajectories - facebookresearch/VideoPose3D
github.com
코드는 우분투에서 돌렸고(윈도우에서 실행 x), custom dataset을 이용하여 깃헙 내 가이드를 따라서 진행했다.
키포인트가 17개인 것은 Human3.6M pretrained 모델을 사용했기 때문이고, 원래는 Human 3.6M 데이터셋에 대한 테스트도 해보고 싶었지만 일주일째 아래와 같이 관리자가 권한을 주지 않아서 데이터 다운로드를 받지 못해서 할 수 없었다.
올해 제대로 된 논문 리뷰 포스팅을 해본 것 같고, 앞으로도 성실히 하나 하나 작성해 나갈 생각이다.