ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FCPose: Fully Convolutional Multi-Person Pose Estimationwith Dynamic Instance-Aware Convolutions
    Contribution 세미나/Pose estimation 2023. 12. 10. 18:16

    CVPR2021, 41회 인용 (2023-12-10 기준)

     

    Introduction

    이번 contribution 세미나에서 다룰 내용은 pose estimation 관련 논문이다. 아마 한동안은 pose estimation을 주제로 세미나를 진행할 것 같다. 개인적으로 좋아하는 CVPR 학회에 2021년에 게제되어 41회의 인용횟수를 기록하고 있다.

     

     

    Fig.1에서 볼수 있듯이, pose estimation은 이미지에서 사람의 keypoint들을 찾는 문제라고 볼 수 있다. 

    Keypoint라는 개념이 생소할 수도 있으니 이를 간단하게 나타내는 그림을 아래와 같이 첨부하였다.

    Keypoints available in COCO-dataset for humans

    즉 일반적으로 pose estimation을 한다는 말은, 이미지에서 사람의 pose를 구성하는 17개의 keypoint(모델에 따라서는 구조가 달라질 수 있음)들을 찾는 문제라고 봐도 무방하다.

     

    일반적인 pose estimation 방식은 top-down과 bottom-up 방식으로 구성되어 있다.

     

    Top-down방식은 이미지에서 사람을 먼저 찾고(detection), 검출된 사람들 안에서 keypoint들을 개별적으로 찾는 방식이다.

    이는 대체적으로 성능이 높지만, 사람들 각각마다 keypoint 찾는 알고리즘이 따로 돌아가기 때문에 대부분 검출 속도가 느린편에 속한다. 특히 검출해야되는 사람이 많아질수록 이러한 단점이 더 부각된다. 또한 애초에 사람 검출 성능에 영향을 너무 많이 받는다. (당연하게도 애초에 사람 검출이 잘못되면, 그 안에서 keypoint 찾는게 더 어려워짐)

     

    반면에 bottom-up 방식은 이미지에서 keypoint들을 먼저 찾아둔 다음에 해당 keypoint가 어떤 사람에서 나왔는지를 grouping post processing으로 찾는다. 일반적으로 검출 속도는 top-down방식에 비해 상대적으로 빠른편이지만 post-processing 자체가 어떤 학습을 통해 최적화되는 방식이 아니기 때문에 상대적으로 낮은 성능을 보여준다.

     

    지금까지의 pose estimation 논문들은 이러한 흐름에서 크게 벗어나지 않았다. 하지만 본 논문에서는 새로운 방식의 pose estimation을 제안하고 있다.
    (FCPose라고 명칭)

     

    Contribution

     

    본 논문에서 contribution을 간단하게 요약하면 아래와 같다.

     

    1. Dynamic filter를 사용하여 기존에 요구되었던 ROI(detection을 통해 나온)와 grouping 방식들을 제거하고 end-to-end 학습 방식을 제안. 

    2. 오직 convolution 연산만 필요하기 때문에 구현하기 매우 쉽다. 

    3. Dynamic filter를 통해 keypoint head 구조를 매우 간단하게 가져갈 수 있고, 이는 적은 연산량으로도 높은 성능을 내는게 가능하도록 유도.

     

    이제 좀 더 디테일한 설명으로 넘어가보자.

     

    Proposed method

     

    앞서 설명한 dynamic keypoint head는 그림과 같은 컨셉을 가지고 있다.

    모델이 이미지를 보고 각 instance(사람)별로 keypoint를 찾을수 있는 weight값을 구할 수 있다면 해당 weight로 그 instance에 해당하는 keypoint를 찾을 수 있게 된다. (어떻게 보면 당연한 말을 하는 느낌...)

    그렇다면 핵심은 우리가 어떻게 instance별 weight를 구할 수 있을까? 하는 점이다.

     

     

    해당 그림은 FCPose에 대한 framework를 보여주고 있다.

    여기서 FCOS heads는 기존의 FCOS와 동일한 구조라고 보면 되고, 아시다싶이 여기서 FCOS는 일반적인 사람 검출 알고리즘이라고 보면 되겠다. 

    여기서 controller 역할이 각 instance에 특화된 weight를 생성하는 과정으로 볼 수 있다.

    Controller는 1x1 convolution으로 구성되어 있다.

    먼저 FCOS특성상 우리는 검출된 instance에 대한 위치(일반적으로 센터 포인트)를 feature map에 나타낼 수 있다.

    그럼 해당 feature map의 결과를 입력으로 controller를 통과시켜 그에 맞는 weight(theta_i)가 만들어지도록 controller를 학습한다고 보면 된다. (사실 이부분이 이 논문의 핵심으로 보여짐)

     

    추가적으로 기존 feature map에 relative coordinate를 concat하는 부분
    : 여기서 relative coordinate는 검출된 instance의 위치를 기준으로 생성되며, key point의 heatmap을 구할 때 해당 instance와 가까운 위치에 있는 정보에 좀 더 가중치를 주기 위한 방안

     

    Keypoint refinement module
    : 이전에 구한 keypoint에 대한 heatmap은 p3 feature map을 기준으로 생성, p3는 원래 resolution의 1/8이기 때문에, 예측한 p3의 위치로는 실제 keypoint의 위치를 표현하는데 충분하지 않음. 따라서 예측한 p3의 위치와 실제 이미지에서 keypoint 사이의 offset을 예측하는 모델을 하나 구성하여 전체적인 keypoint 위치를 보정한다.

     


    논문에서 보면 알 수 있듯이 keypoint별 offset을 구하도록 설정, 여기서는 instance별로 따로 학습하는게 의미없기 때문에 dynamic filter개념을 사용하지 않음

     

    전체 loss

    여기서는 detection 성능에 관한 loss (L_fcos),

    p3 resolution에서의 keypoint heatmap에 대한 loss (L_heatmap),

    keypoint refinement에 대한 loss (L_reg) 로 구성되어 있다.

     

    Experiments

     

    Controller를 통해 구한 dynamic keypoiny head의 layer 개수에 따른 성능 비교, 여기서는 3개의 layer 사용이 가장 적당해 보임

     

    마찬가지로 dynamic keypoiny head의 channel 개수에 따른 성능 비교, 여기서는 32 channel 사용이 가장 적당해 보임

     

     

    Keypoint refinement 부분에 대한 실험, deconvolution을 통한 upsampling 방식보다는 확실히 적은 연산량으로도 높은 성능을 보여줌

     

     

    Keypoint refinement에서는 굳이 instance별로 따로 학습할 필요가 없다는걸 보여주는 table. 오히려 instance에 무관하게 학습하는 방식이 좀 더 좋은 성능을 보여준다.

     

     

    확실히 비슷한 검출속도를 가진 알고리즘과 비교하면 상대적으로 더 높은 검출 성능을 보여준다.

     

     

    무엇보다 이미지에 사람수가 많아져도 검출속도에 영향을 크게 미치지 않는게 큰 장점이라고 볼 수 있다.

     

    Backbone을 resnet에서 DLA로 바꿔주면 더 좋은 결과를 보여줌

Designed by Tistory.