이미지에서만 하던 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로 사용
여러 트릭
입력을 이미지 말고 2D pose로 대체(lifting) : 메모리 사용량도 적음
image feature vector를 disk에 저장해두고 로드하는 방식 (TCMR에서도 사용). ResNet : Global Average Pooling해서 2048 vector로 만들고 디스크에 저장한다. 학습 시 추출한 feature를 입력으로 받는다. (end-to-end 학습 불가, data augmentation 불가한 단점)
TCMR (2021)
기존 방식의 문제점 : 기존의 방식들은 static feature에 크게 의존하기 때문에 영상에서 떨림(jittering) 현상 발생
TCMR : 같은 에러가 나더라도 temporal data 사용하면, 전후프레임과 비슷한 에러의 방향이라 보기좋음
영상을 입력으로 받고, ResNet으로 feature 추출해서 disk에 저장한다. 3개의 temporal encoder가 있어서, temporal feature를 추출한다.
poseForecast#1 (위 그림의 상단 영역, g_past) 현재 프레임의 이전 프레임들을 입력으로 받아서, past frame들로 부터 온 feature를 만든다. > 과거만 보고 미래가 뭐였을지 예측한다.
현재 feature (위 그림의 중간 영역, g_all) > temporal encoder에서만 오는 거 사용 (residual connection 미사용)
poseForecast#2 (위 그림의 하단 영역, g_future) 미래 프레임의 전 프레임들 입력으로 받아서, 미래 frame들로 부터 온 feature를 만든다 > 미래만 보고, 과거가 뭐였을지 예측한다.
위 3개의 모듈을 integration (Attention module 사용)
static feature를 봤을 땐 못하지만, temporal feature를 봤을 때 할 수 있는 걸 모델에 강제하면서 static feature에 대한 강한 의존도를 낮췄다.
pose forecast로 미래 프레임 혹은 과거 프레임으로부터 현재 프레임을 추정하도록, 흐름을 보도록 디자인했다.
pose forecast
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개 에버리지)