Towards Accurate Multi-person Pose Estimation in the Wild (CVPR 2017)


  • 논문 제목: Towards Accurate Multi-person Pose Estimation in the Wild
  • 연구 기관: 구글


    본 연구는 Faster R-CNN 으로 사람 영역의 rectangular bounding box 를 찾고, box 영역 내에서 pose estimation 을 처리하는 2단계 기술 구조를 제안한다 (아래 그림 참조).




    [ Network Architecture ]

    Person detection 을 위한 faster R-CNN 은 ResNet101 을 backbone 으로 사용하였다. Person detection 에 의해 검출된 영역은 가로 또는 세로 길이를 변환하여 가로/세로 비율이 일정 비율을 가지도록 하였다 (위 그림 (1) 의 person detection 결과인 붉은 색 box 가 (2) 에서는 세로 방향으로 축소된 모습을 볼 수 있다). 학습 시의 데이터 증강을 위해 person detection 결과 box 영역을 1.0 ~ 1.5 사이의 scale factor 값을 무작위 선정하여 조금 더 넓은 person box 를 학습 데이터로 추가하였다. 추론 시에는   scale factor 값을 1.25로 고정시켰다. 이와 같은 image cropping 및 re-sizing 을 통해 최종적으로 353 x 257 크기의 이미지를 생성하여 pose estimation module 로 전달한다.
    또한, activation feature point 의 이미지 분석 대상 영역을 넓히기 위해서 atrouse convolution 을 적용하였다. Atrouse convolution 은 convolution kernel 의 분석 포인트를 일정 간격을 두고 배치한 kernel 이다. 아래 그림에서 (a) 가 일반적인 convolution kernel 이고, (b) 와 (c) 그림이 각각 convolution point 를 일정 간격을 두고 convolution point 를 배치한 atrouse convolution kernel 이다 (일정 간격을 stride 라고 한다). 일반적인 convolution 은 stride 가 0인 경우라고 볼 수 있다. 연구자에 따라 atrouse convolution 을 dilated convolution 으로 표기하기도 한다.


    Atrouse (Dilated) convolution kernel 예시

    Atrouse convolution 을 적용하면 하위 레이어에 convolution 을 적용할 때 보다 넓은 영역으로 부터 정보를 입력받음으로써, 동일한 연산량으로 현재 레이어의 activation feature point 가 가지는 분석 범위를 넓힐 수 있다. 


    일반적인 convolution                                          Atrouse convolution (stride = 1)

    사람의 몸을 구성하는 K개 관절 위치를 keypoint 로 지정하고 (K = 17), keypoint regression + activation map classification 을 통합한 구조를 적용하여 최종 pose estimation 추정한다.
    Activation map 은 heat-map 및 offset vector 를 이용하여 구성한다. Heat-map 은 keypoint 주변의 원형 영역 (반지름 25 픽셀) 으로 정의하며, offset vector 는 heat-map 영역 내의 각 픽셀 위치와 대상 keypoint 위치의 상대적 위치로 정의한다. 아래 그림에 keypoint, heat-map 및 offset vector 예시를 나타내었다.



    Output channel 은 keypoint 1개 당 heat-map channel 1개 및 offset vector channel 2개 (x, y) 로 구성되어, 총 3 K 개의 channel 로 구성된다. Pose estimation module 은 ResNet101 의 마지막 레이어를 "1x3 convolution with 3K outputs" 로 변경한 구조로 설계하였다.
    Keypoint k 에 대한 heat-map 및 offset vector 는 아래 수식으로 표한된다. 여기서 xi 는 이미지 내 각 픽셀 위치, lk 는 keypoint 위치, R 은 heat-map 반경이다.



    위의 heat-map hk(), offset vector Fk() 를 이용하여 아래 수식과 같은 최종 activation map fk() 를 생성한다. Activation map 은 keypoint 후보 위치 (xi) 에 대해, 얼마나 많은 heat-map 내 다른 위치들 (xj) 의 offset vector 가 후보 위치 (xi) 를 가르키고 있는가를 나타내는 일종의 voting system 으로 볼 수 있다. 즉, heat-map 내의 각 위치 마다 offset vector 가 하나씩 할당되어 있으며, offset vector 들이 가장 많이 가르키고 있는 위치를 keypoint 후보 위치로 선정하는 방식이다. G() 함수는 bi-linear interpolation 이라고 기술되어 있다 (아마도, 아무도 가르키지 않는 위치의 데이터를 생성하는 역할일 것으로 추정된다. 논문에 자세히 기술되어 있지 않다 ㅠㅠ).


    이와 같은 과정을 거친 최종 activation map 예시를 아래 그림에서 볼 수 있다.


    [ Training ]

    Heat-map loss Lh()는 keypoint 주변의 sigmoid output (predicted heat-map) 과 ground truth heat-map 차이를 모두 더한 값을 설정한다. 학습을 가속화 시키기 위해서 ResNet 의 50번째 레이어의 feature map 을 이용하여 추가적인 heat-map prediction 레이어를 삽입하고, 그 결과를 heat-map loss 에 추가적으로 반영하였다 (즉, 2 종류의 heat-map loss 를 사용).

    Offset loss Lo() 는 predicted offset 과 ground truth offset 차이에 대한 Huber function H()으로 설정하였다.


    Huber function H() 는 입력의 절대값이 일정 크기까지 도달할 때 까지는 2차원 함수형태를 띄며 (square error, L2 error), 입력의 절대값이 일정 크기를 넘어가면 1차원 함수 형태를 띈다 (difference error, L1 error). 아래 그림에서 파란색 실선이 square error loss 를 나타내고, 붉은색 점선이 Huber loss 를 나타낸다. Square error loss 를 적용하게 되면 predicted value 와 ground truth value 의 차이가 클 경우 최종 손실값이 과도하게 커지고, 이에 따라 gradient 도 증가할 수 있으므로, gradient back-propagation 에 의한 weight update 값이 과도하게 증가할 수 있다 (일종의 overshooting 으로 볼 수도 있다). Huber loss 는 이러한 부정적 영향을 방지하는 효과가 있다. 연구자에 따라 Huber loss 를 smoothed-L1 loss 라고 표현하기도 한다.



    Square Error vs. Huber



    최종 loss function 은 heat-map loss 와 offset loss 의 가중합으로 구성된다.


    • 기타
      • Person detection learning parameter
        • Asynchronous SGD momentum 0.9
        • Initial LR 0.0003 (800k step 이 후 1/10 감소), 총 1M steps
      • Pose estimation learning parameter
        • batch size 24
        • Fixed learning rate (0.005), 총 800k steps
      • 모든 neural network 는 ImageNet DB 를 이용하여 pre-training


    [ OKS 기반 Person Detection 최적화 ]

    Person detection 에 적용된 faster R-CNN 은 유사한 위치에서 검출된 여러 개의 box (서로 겹치는 영역이 큰 복수 개의 box) 중 objectless score 가 가장 큰 box 만 남기고, 나머지는 제거한다 (NMS, Non-Maximum Suppression). 영역이 겹치는 정도를 IoU (Intersection over Union) 으로 계산하고, IoU 가 일정 값 이상일 경우 objectness score 를 참조하여 가장 큰 objectness score 를 가진 box 만 남기게 된다 (IoU-NMS).

    NMS 시 IoU 를 쓰지 않고, OKS (Object Keypoint Similarity) 를 사용하면 person detection 성능을 크게 증가시킬 수 있다. OKS 는 두 개 object (두 사람) 의 keypoint (관절 위치들) 가 얼마나 유사하게 배치되어 있는가를 측정하는 것으로써, predicted pose 와 ground truth pose 의 유사도에 대한 측정치이다.

    아래 그림에 IoU 와 OKS 의 개념에 대한 그림을 나타내었다.

            

    OKS 는 MS COCO dataset 에서 정의한 것이다. 아래 그림에 MS COCO dataset 에서 제공하는 OKS 에 대한 자세한 설명이 있다. 하늘색은 ground truth keypoint 를 나타내고, 연두색은 predicted keypoint 를 나타내며, OKS 는 둘 사이의 유사도라고 볼 수 있다.




    [ 실험결과 ]

    Mask-RCNN 및 Carnegie Mellon University 에서 제안한 기술의 pose estimation 성능과 비교하였다. 자기네 기술이 제일 좋다고 한다...
    (Mask-RCNN 과 CMU pose estimation 은 조만간 리뷰 글을 올릴 예정이다.)


    • Ablation study: box detection
      • 입력 이미지 크기를 두 가지로 하여 성능비교 600 x 900 vs. 800 x 1200 (아래 Table 3 참조)
        • 이미지 크기가 클 수록 성능이 더 좋음 (당연한거 아닌가...?)
      • Ground truth bonding box 를 대상으로 pose estimation 할 경우의 성능 (upper bound performance) -> Table 3 의 "Ground-truth boxes" 성능 참조
        • Upper bound performance 와의 성능 차이는 bounding box detection error 에서 기인함
    • Ablation study: pose estimation
      • Person box crop size 두 가지 비교 257 x 185 vs. 353 x 257 (아래 Table 4 참조)
        • 이미지 크기가 클 수록 성능이 더 좋음 (이것도 당연한거 아닌가...?)

    아래 Table 5에서 OKS-NMS threshold 에 따른 성능 변화를 나타내었다.





    Comments

    Popular posts from this blog

    EAST: an efficient and accurate scene text detector (CVPR 2017)

    Realtime multi-person 2d pose estimation using part affinity fields (CVPR 2017)