빠른 구조의 네트워크를 찾던 중 아래 논문을 보게 되어 정리하고자 한다.

centernet 이란 이름의 논문이 두개 있어서 헷갈릴 수 있는데 여기서 리뷰하는 논문은 아래 논문이다.

 

title: Objects as points (2019년 아카이브에 올라왔다.)

paper link: arxiv.org/pdf/1904.07850.pdf

code link: github.com/xingyizhou/CenterNet

 

xingyizhou/CenterNet

Object detection, 3D detection, and pose estimation using center point detection: - xingyizhou/CenterNet

github.com

centernet의 특징

  • One-stage detector
    어찌 보면 당연하게도 centernet은 YOLO, SSD 등과 같은 one-stage detector이다.
    다만, YOLO나 SSD가 미리 정해진 anchor에서 bounding box의 overlap을 기준으로 삼는것과 달리
    centernet은 각 object에 대해 단 하나의 중심점을 key point estimation방식으로 추정한다.

  • Object detection 문제를 key point estimation문제로 정의해 풀었다.
    바로 위의 설명과 겹치는 부분이 많지만 기존 one-stage detector 들은 각 anchor 위치에서 정해진 비율의 bbox들에 대해

    overlap 정도를 기준으로 학습하지만 centernet은 feature map으로 부터 각 object의 center 위치를 확률 맵으로 나타내어 학습한다. center 위치를 key point로 정의하고 문제를 푼 것이다. 

기존 one-stage detector와 centernet의 차이(objects as points 논문에서 발췌)

  • 구조가 매우 단순해 이해 하기 쉽고 orientation, pose, 3d bbox 추정으로 쉽게 확장 가능 할 것같다.

구조

수치는 input: 3x256x512, output stride: 4 기준이다. 

centernet 구조

  • 위 centernet 구조 그림에서 처럼 centernet은 feature를 생성하는 backbone과 3개의 header로 이루어져 있다.

  • 해더는 각각 center heatmap, center offset, width and height 를 출력한다. 

  • center heatmap은 channel index가 각 object category에 해당한다. 예를 들어 사람의 object id=0 이면
    centerHeatmap[0,:,:]에는 사람의 center 위치에 해당하는 pixel의 값이 1에 가까울 것이다. 
    (그림에서 center heatmap 위의 ncls x 64 X128은 출력 텐서의 모양이고 ncls는 number of classes의 약자이다.)

  • center offset은 output stride때문에 발생하는 discretization error를 보상하기 위해 추정하는 것으로 각 object center 위치를
    input image scale로 해석할때 오차를 보상하기 위한 값이다. 예를 들어 input image에서 A 라는 object의 center가 (146, 133)에 
    위치한다면 출력 center heatmap 텐서에서 해당 object의 위치는 (36,33)이다. 하지만 실제 (146/4, 133/4)=(36.5, 33.25)이므로
    (0.5, 0.25)의 오차가 발생한다. 이 오차가 output stride에 의해 발생하는 discretization error 이고 이를 보상해 주기 위해 추정한다.
  • 마지막으로 width and height 텐서는 object의 width, height를 추정 하는 텐서이다. 예를 들어 object id =0 인 물체에의 width, height는 widthAndHeight[0:2, x,y] 위치의 값이고 object id=4인 물체의 width, height는 widthAndHeight[8:10,x,y] 위치에 저장된다.

Loss

  • center heatmap loss

center heatmap loss: focal loss

$Y_{xyc}$=1은 object center 위치의 GT 값이다. 학습 초반 $\hat{Y}_{xyc}$의 값이 작다면 $(1-\hat{Y}_{xyc})^{\alpha}$ 의 값이 상대적으로 커서 loss 가 커지고 학습 후반으로 갈록 $\hat{Y}_{xyc}$의 값이 0에 가까워 지면 $(1-\hat{Y}_{xyc})^{\alpha}$ 의 값이 기하 급수적으로 작아져 loss에 거의 영향을 미치지 않는다. 

반대로 center point가 아닌 위치에서 학습 초반에 $\hat{Y}_{xyc}$ 의 값이 크다면 $(1- Y_{xyc})^{\beta} (\hat{Y}_{xyc})^{\alpha}$의 값이 상대적으로 커서 loss에 영향을 크게 미치지만 학습 후반 부로 갈수록 이 값이 기하 급수적으로 작아져 loss가 줄어 든다.

 

  • center offset loss 

center offset loss

구조 설명에서 언급한것 처럼 output stride로 인해 발생하는 discretization error를 보상하기 위해 추정하는 offset값이다. 

$\frac{p}{R}-\tilde{p}$ 부분이 의미하는 것이 discretization error 이고 여기서 R은 output stride를 의미한다. 

p는 input image scale에서 object center의 x 또는 y 좌표 이고 $\tilde{p}$ 는 소수를 버림한 $\frac{p}{R}$ 값이다.

 

이 loss는 위와 같이 단순히 L1 loss를 이용한다.

 

  • width and height loss

width and height loss

width 와 height loss는 단순히 L1 loss 를 이용 하여 위와 같이 구한다. 

 

  • total loss

total loss는 위와 같고 논문에서는 $\lambda_{size}$ =0.1 , $\lambda_{off}$=1 로 설정했다.

 

 

이 정리만 봐선 내용 파악이 힘들것 같아 근시일 내에 GT 만드는 내용도 추가해서 정리 해야 할것 같다.....

+ Recent posts