빠른 구조의 네트워크를 찾던 중 아래 논문을 보게 되어 정리하고자 한다.
centernet 이란 이름의 논문이 두개 있어서 헷갈릴 수 있는데 여기서 리뷰하는 논문은 아래 논문이다.
title: Objects as points (2019년 아카이브에 올라왔다.)
paper link: arxiv.org/pdf/1904.07850.pdf
code link: github.com/xingyizhou/CenterNet
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로 정의하고 문제를 푼 것이다.
- 구조가 매우 단순해 이해 하기 쉽고 orientation, pose, 3d bbox 추정으로 쉽게 확장 가능 할 것같다.
구조
수치는 input: 3x256x512, output stride: 4 기준이다.
- 위 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
$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
구조 설명에서 언급한것 처럼 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 와 height loss는 단순히 L1 loss 를 이용 하여 위와 같이 구한다.
- total loss
total loss는 위와 같고 논문에서는 $\lambda_{size}$ =0.1 , $\lambda_{off}$=1 로 설정했다.
이 정리만 봐선 내용 파악이 힘들것 같아 근시일 내에 GT 만드는 내용도 추가해서 정리 해야 할것 같다.....
'Deeplearning > paperReviews' 카테고리의 다른 글
[논문정리] swin transformer (6) | 2022.01.04 |
---|---|
[논문 정리]CoordConv: An intriguing failing of convolution neural networks and the CoordConv solution 리뷰 (0) | 2021.08.10 |
[InstanceSegmentation] SOLO:Segmenting Objects by Locations 논문 정리 (0) | 2021.08.08 |
[ObjectDetection] FCOS(Fully Convolution One-Stage Detection) 논문 리뷰 (0) | 2021.05.30 |
[AutoML] AttendNets 논문리뷰 (0) | 2021.05.19 |