본문 바로가기
DL|ML

SSD : Single Shot MultiBox Detector

by 이든Eden 2022. 7. 23.

 

지난 포스팅에서 정리했던 SpaceNet Challenge 1에서 2등을 한 사람이 SSD의 방법의 일부를 이용했다. 2016년도 논문이기 때문에 굉장히 많은 사람들이 포스팅을 했지만 내 스스로 되돌아보는 의미에서 간단히 SSD를 정리해볼까 한다. 아래는 지난 포스팅에 대한 링크이다.

 

https://i-am-eden.tistory.com/48

 

SpaceNet Challenge 1

SpaceNet 이란? > SpaceNet® is dedicated to accelerating applied research in geospatial machine learning. 나만의 정리 SpaceNet Challenge 1 주제 및 정보 : Rio de Janeiro building footprint extraction..

i-am-eden.tistory.com

 

SSD : Single Shot MultiBox Detector

 

Model

논문에서 제안하는 중요한 3가지는 아래와 같다.

  • Multi-scale feature maps for detection
  • Convolutional predictors for detection
  • Default boxes and aspect ratios

이야기하다보면 나올 것 같다.

 

SSD는 YOLO v1 이후에 나온 논문이고 1 Stage Object Detection 논문이다. 논문에서 가져온 아래의 이미지를 보면 SSD는 YOLO보다 작은 input인 300 x 300 사이즈의 이미지가 input으로 사용된다. 저해상도에서도 물체를 잘 잡기 때문에 작은 이미지(YOLO 보다)를 쓸 수 있다.  

SSD vs YOLO

단계별로 설명한다면 아래와 같을 것이다.

 

1) 300 x 300 x 3 이미지를 VGG-16에 input으로 넣어준 후 conv4_3의 output으로 38 x 38 x 512 사이즈의 피쳐맵을 얻는다.

2) 위에서 구한 피쳐맵에 3 x 3 x 1024, 1 x 1 x 1024 등의 커널로 conv를 수행해서 19 x 19 x 1024 , 10 x 10 x 512, 5 x 5 x 256, 3 x 3 x 256, 1 x 1 x 256 사이즈의 피쳐맵까지 만들어낸다. → Multi-scale feature maps for detection 

그리고 bounding box의 후보들을 만들기 위해서 각 layer의 피쳐맵마다 3 x 3 사이즈의 커널로 conv를 해서 사이즈를 유지하고 k(c + 4)의 채널을 갖는 피쳐맵을 만든다. k는 한 개의 지점 당 bounding box 개수, c 클래스 개수(스코어가 들어가 있음), 4는 offset(x, y, w, h)을 의미한다. 왜 이렇게 되는지는 논문 리뷰 영상을 보다가 그림이 잘 나와있어서 캡처를 했다.

 

출처 : PR-132: SSD: Single Shot MultiBox Detector

 

가져온 그림에서 설명을 덧붙이자면 한 지점 당 총 k개의 bounding box가 있을 거고 그 bounding box에 대한 정보인 클래스 개수, 4개의 오프셋에 대한 정보가 들어가있어야하기 때문에 위 그림의 오른쪽처럼 된다. k가 6이라면 클래스 개수 + 4개의 오프셋이 총 6개 있을 것이기 때문에  k(c + 4) 만큼의 채널 수를 가져야 한다. → Convolutional predictors for detection 이렇게 여러개의 피쳐맵에서 이렇게 구한 bounding box의 개수의 합이 8732개이다.

Multi-scale feature maps을 사용하기 때문에 YOLO보다 다양한 크기의 물체를 잘 탐지할 수 있고 SSD에서는 작은 객체를 CNN의 초반 피쳐맵에서 탐지하게 하고 큰 객체를 더 작은 피쳐맵에서 탐지하도록 해서 객체 사이즈의 variance가 다양한 문제를 해결하였다.

아까 위에서 한 지점 당 총 k개의 bounding box가 있을 것이라고 했는데, 각 피쳐맵의 한 지점(그리드)마다 다른 비율과 스케일로 default box를 생성한다. Default boxes and aspect ratios

객체 사이즈에 따른 피쳐맵 쓰임 및 Default boxes and aspect ratios

 

Default boxes and aspect ratios에 대해 조금 더 이야기 하자면 우리는 Multi-scale feature maps for detection 덕분에 여러 사이즈의 피쳐맵이 있다는 것을 이미 알고 있다. 따라서 피쳐맵의 사이즈마다 다양한 스케일의 default box들을 사용하는데 아래와 같은 식을 사용한다. s는 입력 이미지와 box 사이즈의 스케일(비율)을 의미하고 $s_min$은 0.2, $s_max$는 0.9이다.

각 박스의 너비와 높이는 아래와 같다. 총 5개의 $a_r$로 5개의 박스와 스케일이 $s'_k$이고 $a_r=1$인 박스까지 총 6개의 default box를 만든다.

default box 스케일

또한 각 지점(그리드) 마다 defalut box의 중심점 $i, j$는 아래와 같다. $|f_k|$는 피쳐맵의 크기이다. 

3) 마지막으로 NMS를 이용해서 최적의 bounding box만 남긴다.

 

 

Training

  • Hard negative mining : 이미지에 물체에 비해 대부분의 default box가 Background에 그려지기 때문에 이 문제를 해결하기 위해 사용. 높은 confidence loss를 값을 가진 물체 중 positive : negative 비율을 1:3로 해서 loss에 사용 → 나중에 RetinaNet에서는 Focal Loss로 해결하는게 갑자기 생각남.
  • Data augmentation : 원본 이미지, jaccard overlap이 0.1, 0.3, 0.5, 0.7, 0.9가 되도록 샘플, 무작위 샘플 중 선택하도록 하였다.

 

Loss

Loss는 confidence loss, localization loss로 이루어져 있고 N은 GT와 매칭된 default box의 개수, 는 둘의 가중치를 조절하는 값이며 디폴트 값은 1이다.

 

localization loss는 GT와 예측한 박스 사이의 loss이다.

$x_{ij}^k$는 k 클래스에 대해 i번째 default box와 j번째 GT의 IoU가 0.5 이상인 박스에 대하여(1 또는 0) localization loss를 계산한다. IoU가 0.5 이상일 때 매칭된다는 말을 쓰는 것 같다.

 

confidence loss는 각 클래스 별로 예측한 값과 실제 값 사이의 차이다. 

 

공부자료