motion blur : 입력 이미지의 정보가 불완전한 케이스(찍을때 손이 움직이거나, 피사체가 빨리 움직이거나, 춤 - 아이돌은 매 프레임마다 모션 블러 일어날 수도 있음, 피아노 연주, 기타 연주)
잘림 : 보통 SNS에올릴때상반신만올리는경우가많음, 안보이는부분어떻게할건지
네트워크의 학습과 테스트
기본적인 과정 : Input image - Feature extractor(보통 ResNet이나 Hourglass Network) - 2D heat map 추정
Input image : 우선 single person만 있는 cropped image만 한다고 가정
heat map : J x H x W (J=조인트 개수, H, W : 히트맵의 높이/너비)
사실은 관절마다 2D Heatmap이 따로따로 있는 것
Heatmap 말고 Feature Extractor에서 2D Joint 바로 추정하는 방법 : 있긴 한데, 지금은 heat map 추정하는 방법들이 훨씬 높은 성능, 대부분 히트맵 선호
GAP해서 feature를 vectorize하고 좌표 추정하면 입력 이미지의 높이, 너비 개념이 없어지기 때문에 비선형적 연산을 요구해서 낮은 성능을 낸다
Heatmap 방식의 학습
GT 2D joint 에서 GT 2D heatmap을 만들고 L2 loss 적용해서 추정된 최종적으로 Feature extractor를 포함하는 NN이 GT에 가까운 heatmap을 추정하도록 한다
관절이 입력 이미지에서 정의가 안되어 있을 경우
정의되어 있지 않은 관절들은 loss를 0으로 설정 : backprop 하지말고 신경쓰지말아라 (이런 heuristic rule 적용함)
Test
2D heat map 추정 (JxHxW) : j번째 2D heatmap마다 하나의 Gaussian blob이 j번째 관절의 위치 중심에 만들어진다.
j번째 2D heatmap에 2D argmax 적용 : x, y 좌표 얻을 수 있음
Confidence 적용해서 Jx3을할수도있다. (openpose)
3D HPE의어려움
3D human pose : 관절의 3D 좌표 및 회전, 카메라를 중심으로 하는 3D 공간 정의
Challenges
2D와 같은 문제점
depth ambiguity : front view에서는 괜찮아 보이지만, 옆에서 보면, 이상해 보이는 것 / 제일 쉬운 해결방법은 multi-view 이미지 제공인데 in-the-wild에서 불가능
data collection : 3D data는 특수 장비로부터만 얻을 수 있다 모션캡처(MoCap) 스튜디오가 가장 널리 사용됨 : 여러 view에서의 2D data를 triangulation을 통해 하나의 3D data로 변환 MoCap studio data는 in-the-wild 이미지에 적용 불가! (움직임을 제외한 나머지는 모두 다름)
3D HPE 학습, 테스트
Input Image -> Feature Extractor(보통 ResNet 사용) -> 3D Pose 추정 (j번째 관절의 3D 포즈 : 그 관절의 3D 좌표 혹은 3D 회전)
3D 좌표 추정 : x,y,z 단위는 픽셀이 아닌 real scale 사용 (미터, 밀리미터) 3D heat map 방식 추정 : x, y (pixel), z(meter)
회전
* 입력 이미지 > Feature extractor > 3D rotations 추출 -> forward kinematics(미분가능한 연산) 해서 3D coordinates 얻는다 / Loss를 3D rotations, 3D coordinates 두 부분에 적용한다