[논문 리뷰] SSD: Single Shot MultiBox Detector

Lil Park·2021년 11월 1일
0

paper: https://arxiv.org/pdf/1512.02325.pdf

Contents

  1. Introduction
  2. The Single Shot Detector (SSD)
  3. Experimental Results
  4. Conclusion

1. Introduction

당시 SOTA 모델이었던 Faster R-CNN은 가정한 bounding boxes의 픽셀과 특징들을 재샘플링 하는 과정을 거치고, high-quality classifier을 적용하였다.

하지만 이런 방식은 고도의 연산 작업을 필요로 하기 때문에 속도면에서 성능이 떨어질 수 밖에 없다. 실제로 Faster R-CNN은 초당 7프레임을 작동시키는 7FPS의 성능을 보인 반면 YOLO는 45FPS, SDD는 59FPS로 나타났다.

이러한 문제를 해결하고자 그동안 리샘플링을 하지 않는 시도가 많았으나 정확도가 떨어지는 모습들을 보였는데 SSD는 다음과 같은 개선방법들로 속도와 정확성을 모두 잡는 모델을 만들어냈다.

  • bounding box의 위치를 찾고 카테고리를 예측하기 위해 작은 컨볼루션 필터를 사용하였다.
  • 종횡비(aspect ratios)가 다른 각각의 필터들을 사용하였다.
  • 다양한 스케일에서의 인식을 위해 네트워크의 뒷부분에 위의 필터를 적용하였다.

위와 같은 방식을 통해 SSD는 PASCAL COV의 실시간 인식에서 74.3% mAP로 63.4% mAP를 보인 YOLO보다 높은 정확도를 보였다.

2. The Single Shot Detector (SSD)

Model

SSD는 base network로 VGG16을 이용하였다. VGG16에는 FC레이어가 6, 7, 8로 세 개가 있는데 SSD에서는 6, 7은 컨볼루션 레이어로 대체하였고 뒤에 보조적인 구조를 덧붙여 구성하였다.

추가된 레이어를 살펴보면 p개의 채널을 가진 m x n feature layer에 대해 3 x 3 x p의 커널을 적용하여 class score와 bounding boxes를 예측할 수 있다.

자세히 보면 다음과 같다.

PASCAL 데이터셋을 예로 설명하면,
3 x 3 x (bouding box의 개수x(Class의 개수+좌표값(x,y,w,h))) = 3x3x(6x(21+4))가 Classifier가 된다.

결과는 그림의 우측과 같이 각 bounding box별로 좌표값과 class score가 나오는 것을 볼 수 있다.

SSD에서는 클래스 별로 8732개의 bounding boxes가 나오게 되는데 도출 과정은 다음과 같다.

  • conv4_3로부터 38x38x(4x(Classes+4)) = 5776x(Classes+4)
  • conv7로부터 19x19x(6x(Classes+4)) = 2166x(Classes+4)
  • conv8_2로부터 10x10x(6x(Classes+4)) = 600x(Classes+4)
  • conv9_2로부터 5x5x(6x(Classes+4)) = 150x(Classes+4)
  • conv10_2로부터 3x3x(4x(Classes+4)) = 36x(Classes+4)
  • conv11_2로부터 1x1x(4x(Classes+4)) = 4x(Classes+4)

Default boxes

앞서 보았듯이 feature map마다 Default boxes는 4개 혹은 6개가 만들어지는데 각각
다른 비율의 bounding box를 의미한다. 식은 다음과 같다.

Smin=0.2,Smax=0.9,m=6S_{min}=0.2, S_{max}=0.9, m=6(feature map의 개수)로 kk의 값만 1~6이 대입되어 (k=1k=1일 때 Smin,k=6S_{min}, k=6일 때 SmaxS_{max}) 각 feature map마다 다른 sks_k 값을 가지게 된다.

비율은 sks_kara_r이 대입된 w,hw, h에 의해 정해진다.

논문에 있는 다음 그림이 Default boxes에 대한 설명을 직관적으로 보여준다.

위와 같이 작은 객체(고양이)는 resolution이 큰 feature map(8x8)에 의해 인식이 되며 큰 객체(강아지)는 resolution이 작은 feature map(4x4)에 의해 인식이 됨을 알 수 있다.

1부터 6까지의 k의 값을 대입했을 때 sk=[0.2,0.34,0.48,0.62,0.76,0.9]s_k= [0.2, 0.34, 0.48, 0.62, 0.76, 0.9]가 되는데 이 값이
bouding box의 크기를 결정하는 input image와의 비율임을 생각하면 그림과 맞아떨어짐을 다시 한 번 이해할 수 있다.

300픽셀의 이미지의 0.2는 60픽셀의 bounding box로 작은 박스이므로 resolution이 큰 feature map에서 사용되며 반대로 0.9일 경우에는 bouding box의 크기가 270이므로 resolution이 작은 feature map에서 사용된다.

또한, 그림 속의 다양하게 나타난 점선 박스들을 통해 여러 개의 aspect ratio가 사용되고 있음을 확인할 수 있다.

Loss function

SSD의 loss function은 분류에서의 손실값과 테두리 상자 설정에서의 손실값의 선형결합으로 이루어져있다.

  • x: 이미지, c: 클래스, l: 예측 테두리 상자, g: 정답 테두리 상자
  • N: l과 g의 IOU가 0.5 이상인 상자의 수

Localization Loss

  • xijkx^k_{ij}: k클래스에 대해 i번째 default box와 j번째 Ground Truth가 매칭되면(IOU>=0.5) 1, 아니면 0. 즉, 매칭된 박스에 대해서만 loss를 계산한다.
  • 예측 bouding box에서 좌표(x,y,w,h)의 조정값을 빼주어 smooth L1 loss를 구한다.
  • 조정값을 구하는 방법은 R-CNN논문에서 이미 한 번 살펴보았다.

Confidence Loss

Confidence Loss는 매칭된 박스와 매칭되지 않은 박스에 대한 두 식으로 다시 한 번 나눠진다.

전자의 경우 loglog (전체 클래스 확률 / 특정 클래스 확률)을, 후자의 경우 loglog (전체 클래스 확률 / 배경 클래스 확률)을 의미하는데 log1log1일 때 0으로 loss가 최소가 되므로 각각 특정 클래스, 배경 클래스의 확률을 높이는 방향으로 학습하게 된다.

Hard Negative Minining

SSD의 bounding box는 8000여개나 되지만 실질적으로 우리가 인식하고자 하는 객체의 수는 10개도 안 되는 경우가 다반사이므로 대부분의 box들은 background을 나타낸다.

따라서 background class에 대한 데이터만 과도하게 많은 imbalance 문제가 발생한다.

이를 해결하기 위해 SSD에서는 loss가 높은(background인데 background class라 판단하는 확률이 작은) 데이터만 sorting하여 positive data의 3배만 사용하는 기법을 쓴다.

3. Experimental Results

결과 중에 눈에 띄었던 것은 작은 물체에 대한 성능이 유독 떨어진다는 것인데 추후에 나온 분석으로는 작은 물체는 첫 feature map에서 detect하기 때문이라 하고 이를 보완하기 위해 RetinaNet의 경우에는
왕복하는 방식을 통해 작은 물체에 대한 성능을 높였다고 한다.

SSD에서는 image의 사이즈를 줄이고 남는 공간은 평균값을 채워넣는 Data Augmentation을 통해 작은 물체에 대한 성능을 약간 향상시켜주었다.

4. Conclusion

SSD는 multiple categories 1-stage detector이다. 제일 큰 특징은 여러 개의 feature map으로부터 다양한 크기의 bounding box를 가져오는 것이다. 이것이 매우 효과적으로 성능 향상에 도움이 되었다. 다른 obejcet detector(faster R-CNN, YOLO 등)와 비교하여 높은 인식률과 속도를 보여줍니다. 마지막으로 R-CNN이나 영상에서 object tracking에서도 잘 사용될 것이다.

profile
코딩하는 물리학도

0개의 댓글