Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields
https://arxiv.org/pdf/1611.08050.pdf
http://image-net.org/challenges/talks/2016/Multi-person%20pose%20estimation-CMU.pdf (slides)
Human Pose estimation문제를 다룬 논문이고, Demo영상이 유명해서 아마 이미 읽어보신분들도 꽤 있을 것 같아요.
CMU의 로보틱스 그룹에서 낸 논문인데, 같은 그룹의 Convolutional Pose Machine(CPM)이라는 Framework를 CVPR 2016에서 발표했었고, 당시 Human pose estimation에서는 SOTA였었습니다. (추가하자면 Pose Machine이라는 Framework를 예전에 같은 그룹에서 발표했고, CPM은 Pose Machine의 Framework를 그대로 가져오고 분류기를 CNN으로 바꾼 것이 유일한 차이점입니다. 오랜 기간동안 해당 주제에 대한 고민을 많이 한 그룹이더라구요.)
여기서도 CPM을 거의 그대로 이용하였구요. 한가지 다른점이라면 CPM에서는 single person을 다루었는데 여기서는 multi person을 다루고 있습니다.
single person과 multi person 환경의 차이점은,
single persond에서는 영상에 존재하는 사람이 1명이라는 가정이 있어서 사람의 관절(joint 혹은 part)만
정확하게 잘 찾으면 자세를 추정할 수 있는데요. multi person에서는 영상에 존재하는 사람이 몇명인지 알수가 없으므로
검출한 관절들을 잘 이어주는 문제(association)를 추가적으로 풀어야 합니다.
association문제를 풀기 위해서 part affinity field라는 것을 제안하였는데요. 그게 이 논문의 핵심입니다. 간단하게 한줄로 설명을 하면 joint만 찾지말고, 동시에 joint-to-joint를 이어주는 limb(관절..? 뼈마디..?)도 같이 찾자! 가 논문의 내용입니다.
Fig 1. Pose Machine
Fig 2. Convolutional Pose Machine
Fig 3. CPM with Part affinity fields
그림을 보시면 아시겠지만, Pose Machine은 Multi-stage framework이구요. 그래서 이를 이용한 후속 연구들도 다 multi-stage로 앞선 stage의 정보와 input의 정보를 이용해서 refinement를 수행합니다.
그리고 본 논문에서는 stage에서 branch를 하나 더 따서, joint말고 limb도 동시에 찾습니다. joint와 limb detection의 결과를 concatenate(기억이 정확하진 않은데, 공개한 코드를 봤을 때 channel로 concatenate했던 것 같아요.)해서 다음 stage의 input으로 넘깁니다.
그리고
그림을 보시면 또 아시겠지만 joint의 경우 ground-truth를 가우시안 형태로 encoding을 하구요. limb의
경우도 encoding을 하는데요. 특이하게도 vector 형태로 encoding을 합니다. 논문의 eq(5)에 정의가
나와있는데요. 영상에서 점 p가 두 개의 joint를 연결하는 어떠한 통로 내부에 존재할 경우, 해당 point는 joint를 이어주는 unit vector로 정의합니다. 여기서 통로의 넓이는 parameter이구요. 논문의 Fig1의 (d)를 보시면 어떠한 형태로 encoding이 되는지 감이 오실꺼에요.
그리고
inference단계에서는 prediction된 limb와 joint가 얼마나 align이 잘 맞는지를 이용해서 score를
measure합니다(eq 7). (논문의 Fig 1의 (d)는 prediction단계라서 vector들의 크기가 제각각입니다.)
이렇게 joint를 이어주는 limb까지 prediction을 하게되면 association이 굉장히 쉬워지게 됩니다.
실험을 보시면 다른 방법들에 비해 성능은 가장 잘 나오구요.
Table 3을 보시면 ssd로 사람찾고 그리고 cpm으로 pose estimation한거보다 제안한 방법으로 한방에 한게 성능이 월등하게 잘 나오네요.
예전에 실제로 돌려보았을 때도 성능은 잘 나오는 것 같았구요. 다만, 제목에 Realtime은 efficient정도로 바꿔야되지 않을까..싶네요. nvidia 1080에서 10fps정도 나왔던 것 같습니다.
pose estimation에 관심이 있으시면, cpm과 해당 논문을 한번 보시는 것을 추천드립니다 :)
Hand쪽도 금번 cvpr 2017에 나오네요. Hand Keypoint Detection in Single Images using Multiview Bootstrapping.
이것도 참 재밌는 아이디어이긴한데요, 막강한 설비(?)를 이용한 논문이라..아마 재현은 힘들 것 같다고 생각했었는데
이번 CVPR에서 multiview camera system에 대한 tutorial이 있네요. (와우..)
http://domedb.perception.cs.cmu.edu/tutorials/cvpr17/
'Computer Vision' 카테고리의 다른 글
Chained Cascade Network for Object Detection (0) | 2018.04.02 |
---|---|
Pixel Recursive Super Resolution (0) | 2018.04.02 |
DeNet: Scalable Real-time Object Detection with Directed Sparse Sampling (0) | 2018.04.02 |
Amulet: Aggregation Multi-level Convolutional Features for Salient Object Detection (0) | 2018.04.02 |
Prediction Deeper into the Future of Semantic Segmentation (0) | 2018.04.02 |