CornerNet은 anchor box 없이 객체를 탐지하는 방법을 제안한다. 좌측 상단과 우측 하단의 keypoint만으로 bbox를 찾아내기 때문에, 기존의 one stage detector들이 가지고 있었던 다음과 같은 문제들로부터 자유롭다.
- 기존 detection 방식은 G.T.와 충분히 겹치는 anchor box를 찾기 위해 매우 많은 수의 anchor box를 생성해야 하고, 이로 인해 학습 속도가 느려진다는 문제점이 있었다.
- anchor box를 사용하는 경우 개수, 크기, 종횡비 등 관련 hyper-parameter들이 많이 필요하다는 문제점이 있었다.
CornerNet의 기본 구조는 다음과 같다. Backbone으로 Hourglass Network를 사용하며, 이후 출력값에 좌측 상단/우측 하단의 점을 검출해내는 두 개의 모듈을 적용한다. 각 모듈은 corner pooling을 통해 heatmap, offset을 예측하고, embedding을 사용하여 두 개의 점을 한 쌍으로 grouping 한다.
1) Corner pooling
일반적으로 중심좌표와 너비, 높이를 바탕으로 물체를 감싸는 bbox를 생성하는데, 좌측 상단 점과 우측 하단 점만으로 물체를 감싸는 방식을 설명하는 것이 Corner Pooling이다.
이미지 속에 물체가 있고, 해당 물체의 좌측 상단에 bbox의 경계점이 하나 찍힌다고 생각해보면, 해당 점은 object 외부에 떨어져 있을 것이다. feature에 대한 정보를 갖고 있지 않다는 것이다. 하지만 해당 점이 bbox의 경계점이 맞다면, 그 점에서 수평과 수직 방향으로 선을 그으면 그 선에는 분명 물체의 끝부분이 걸려 있을 것이다. Corner Pooling은 이 점을 이용하여 좌측 상단과 우측 하단의 두 점만으로도 bbox를 생성한다.
좌측 상단의 점을 판단할 때는 두 개의 feature map으로부터 각각 특정 점의 우측 모두를 max pooling, 하단 모두를 max pooling 한 후 합친다.
위의 과정을 거쳐 생성된 feature map이 conv layer를 거친 후, heatmap과 offset를 예측한다.
2) Prediction (Detecting Corners)
2-1) heat map
Hourglass Network는 HxW의 크기를 갖는 heatmap을 category 개수만큼 예측하는데, 각 heatmap은 0과 1만을 사용하여 corner의 위치를 표시한다.
* 일반적인 detection과 다르게, category 수를 셀 때, background에 대한 class 수는 포함하지 않는다.
* heatmap은 탐지할 이미지의 G.T.의 좌측 상단 경계점의 위치에 해당하는 셀만 1, 나머지는 0으로 채운다.
* 이때 1로 표시되는 셀이 G.T. positive, 나머지는 G.T. negative
이후 negative 점들에 대해서는 penalty를 주는데, positve 점의 일정 반경(r: 물체의 크기에 따라 결정) 내에 있는 negative 점들은 penalty를 다음과 같이 일부 줄여준다.
( σ = r/3 )
최종적으로 corner point의 위치를 예측하는 loss는 다음과 같다. positive 보다 negative 점들이 훨씬 많기 때문에 불균형 문제를 개선한 focal loss를 기반으로 설계한다.
2-2) Offset
위의 과정을 거쳐 예측된 Heatmap은 conv layer를 거치며 down sampling이 되어 있는 상태이다. 이를 원래 이미지 크기로 복원하는 과정이 필요한데, 이 과정에서 일부 정보가 손실된다. 이를 해결하기 위해 offset을 다음과 같이 계산해 반영하며, SmoothL1Loss를 사용한다.
3) Grouping
3-1) Embedding vectors
Embedding은 찾아낸 점들 중 짝을 찾아주는 역할을 한다. 여러 corner들 중, 같은 bbox를 구성하는 두 점을 한 쌍으로 묶는 것이다. 두 점에 대한 embedding을 생성한 후, 동일한 class의 embedding들에 대해 거리를 측정하여 해당 거리가 가장 짧은 두 점을 한 쌍으로 묶는다.
이때 loss function은 다음과 같으며, 같은 bbox 내의 corner 점들 간에는 pull loss를 적용하고, 다른 group의 점들 간에는 push loss를 적용한다.
다른 One-Stage detector들에 비해 성능은 좋지만, two stage detector들보다 속도가 느리다는 평가가 있다.
CornerNet은 두 개의 특징적인 점만으로 물체를 탐지해내는 새로운 방식을 제시하여, 수많은 anchor box를 생성하고 계산할 필요 없이 간단하게 bbox를 찾아낼 수 있다. 이를 바탕으로 MS COCO 데이터셋에서 매우 좋은 성능을 보였다.
그러나 두 특징적인 점만을 사용하기 때문에 물체의 전체적인 정보를 충분히 활용하지 못한다는 단점이 있는데, 이를 개선한 CenterNet이 공개되었으므로 해당 논문 또한 추가로 읽어볼 것을 추천한다.
https://deep-learning-study.tistory.com/613
https://talktato.tistory.com/19
https://jjeamin.github.io/posts/cornernet/
https://velog.io/@riverdeer/paper-review-CornerNet-Detecting-Objects-as-Paired-Keypoints
[7주차/김희준/논문리뷰]End-to-End Object Detection with Transformers(DETR) (0) | 2023.08.17 |
---|---|
[7주차/논문리뷰/이서연] Mask R-CNN (0) | 2023.08.17 |
[6주차/강민채/논문리뷰] M2Det (0) | 2023.08.09 |
[6주차/김희준/논문리뷰]Single-Shot Refinement Neural Network for Object Detection(RefineDet) (0) | 2023.08.09 |
[6주차/논문리뷰/이서연] Faster R-CNN (1) | 2023.08.07 |
댓글 영역