2D Human Pose Estimation 분야는 굉장히 많은 발전이 이뤄져 왔고, 현재 매우 높은 성능을 내고 있습니다.
대표적인 접근법으로는 Top-down 방식과 Bottom-up 방식이 있는데요.
Top-down : Top-down 방식은 이미지에서 YOLO나 Mask R-CNN과 같은 Object Detector를 사용해 사람을 detection한 뒤, crop and resize해서 single person pose estimation을 진행하는 방식입니다. - 최근의 Human detection network는 매우 정확해서 detect를 하지 못하는 경우가 거의 없습니다. 위처럼 사람 간 겹쳐서 일부 폐색이 일어나는 경우도 마찬가지죠. - Bottom-up 방식 대비 정확성이 더 높습니다 : Top-down 78 vs Bottom-up 71 - 최근의 사람 입력 이미지는 대부분 고해상도이기 때문에, 카메라에서 멀리 떨어진 사람도 crop해서 256x256으로 resize 하면 들어가는 사람의 scale도 어느 정도 크다고 보장됩니다. - 단점으로는 분리된 시스템이기 때문에 비효율적일 수 있다는 문제가 있습니다.
Bottom-up : Joint detection + Grouping - 입력 이미지의 모든 관절을 다 찾는 방식, 우선 그게 어떤 사람의 관절인지는 상관하지 않는다. - 다 찾은 뒤 그걸 사람별로 묶는다 - 256x256으로 full image를 가져가기 때문에, 카메라에서 멀리 떨어진 사람들은 저해상도일 수 있다. - 따라서 여러 스케일을 가진 사람을 고려해야 한다 : 카메라에 가까운 사람 크고, 멀면 작기 때문
Top-down approaches
Mask R-CNN을 Human detector로 사용하는 경우, 사람을 입력 이미지에서 crop and resize 하는 게 아니라! feature map에서 crop and resize를 한다. 이 영역을 RoIAlign이라 한다.
이런 식으로 아키텍처를 구성하면 human detector와 pose estimation network가 공유되어 end-to-end 로도 사용이 가능하다.
1. SimpleBaseline (2019)
ResNet과 3개의 deconvolution layer로 구성된 간단한 형태이다.
YOLOv5 + SimpleBaseline을 결합해서 쓰는 게 가장 무난하다고 한다.
2. HRNet (2019)
ResNet과 같은 기존의 Human Pose Estimation을 위한 backbone들은 입력 이미지를 32배나 downsampling하기 때문에, 사람의 작은 파트 (손목, 발목 등)가 8x8로 줄어든 상태에서는 안 보일 수 있다는 문제점을 지적한다.
이를 discretization problem이라고도 한다. 8x8의 1pixel만 틀려도, 256x256 input image의 1~32x1~32 픽셀이 틀린 것
그래서 위 그림에서 볼 수 있듯이, HRNet은 고해상도(1x)의 feature map을 끝까지 쭉 가져가고, 아래에 2x, 4x로 branch를 나눠서 multi-scale 정보로 가져가도록 한다.
고해상도 feature가 매우 유용하고, multi-scale fusing이 스케일별 정보를 보충해주는 역할을 해서 정확도를 올려준다고 할 수 있다.
현재 좀 더 어려운 연구(crowd scene 등)에 특화된 모델들을 제외하고는 일반적으로 HRNet을 이기는 연구가 잘 없습니다. 하지만 HRNet이 SimpleBaseline보다 좀 더 시간이 걸리기 때문에 빠른 속도를 원한다면 SimpleBaseline을 사용하는 게 좋습니다.
기존 HRNet과 다른 부분은 final layer와 upsampling을 위한 deconv layer를 추가했다는 거고요.
forward method를 보면, final output으로 두개가 append되는데, 하나는 4x downsampling 된 것, 다른 하나는 4x downsampling을 deconv(upsampling)해서 2x downsampling된 거로 만들어서 final output을 만들고 있습니다.