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

Hayun Lee·2021년 8월 26일
1

논문 리뷰

목록 보기
2/11

SSD는 2016년 ECCV에 발표된 논문이다.

논문 본문 : SSD

SSD: Single Shot MultiBox Detector

  • Keywords : Real-time Object Detection, Convolutional Neural Network

Abstract

SSD 알고리즘을 한 문장으로 정리하면, 아웃풋을 만드는 공간(multi feature map)을 나누고, 각 피쳐맵(output map)에서 다른 비율과 스케일로 default box를 생성하고 모델을 통해 계산된 좌표와 클래스 값에 default box를 활용해 최종 bounding box를 생성한다.

1. Intruduction

물체 인식에서는 물체의 후보 박스를 탐지(hypothesize bounding boxes)하고 해당 박스에서 픽셀이나 특징을 리샘플한 뒤, 좀 더 정확한 분류기를 이용하는 방법이 주로 사용된다. 이런 방법은 정확하긴 하지만 임베디드 시스템, 혹은 하이엔드 시스템에서도 계산이 너무 많아 실시간 응용이 어렵다.
이 논문은 후보 박스를 탐지하기 위해서 픽셀이나 특징을 리샘플하지 않는 최초의 deep network 기반의 물체 인식기를 소개한다. 속도 또한 향상되었는데 주원인은 후보 박스를 찾는 과정과 리샘플링 과정을 제거하였기 때문이다.
그 외에도, 물체 클래스 구분과 물체의 바운딩 박스 위치를 찾기 위한 작은 컨볼루션 필터를 사용하는 점이나, 물체의 여러 종횡비를 위한 각기 다른 필터를 사용하는 점, 이러한 필터들을 마지막 단계에서 여러 스케일에 대해 작동하도록 적용한 점들도 향상된 부분이다.
실험 결과는 걸린 시간과 정확도에 대한 분석을 포함하고, PASCAL, COCO, ILSVRC 데이터 셋으로 성능을 비교했고 그 중 제일 성능이 좋다.

2. The Single Shot Detector(SSD)

2.1 Model

Image Detection의 기본적인 Input은 이미지, Output은 이미지 안에 있는 사물들이 어떤 class 인지 나타내는 class 점수와, 그 사물의 offset(위치좌표 주로 중심 x,y좌표와 w,h, 너비와 높이)이 나와야한다.
다음은 논문에 나온 SSD 모델의 구조이다.

SSD는 저해상도 이미지에서도 작동이 잘 된다. input image는 300x300x3이다. SSD에서는 VGG-16모델을 가져와 conv4_3까지 적용하는 것을 base network로 두는데, 이렇게 처리하면 인풋 이미지 300x300x3이 38x38x512 크기로 바뀐다.
38x38, 19x19, 10x10, 3x3, 1x1에 해당되는 feature map은 output과 직결된 feature map으로, 논문에서 강조하는 multi feature maps에 해당한다.
각 feature map에서 적절한 conv 연산을 통해 예측하고자 하는 bounding box의 class 점수와 offset을 얻게 된다. conv filter size는 3 x 3 x (#바운딩박스 개수 x (class score + offset))이다. 이 6개의 피쳐맵 각각에서 예측된 바운딩박스의 총 합은 8732개이다. 이 바운딩 박스를 모두 고려하는 것은 아니고 각 feature map 당 다른 scale을 적용해 default 박스 간의 IOU를 계산한 다음 0.5 이상이 되는 box들만 1로 고려 대상이 되고 나머지는 0으로 만든다. 그 후 NMS를 통해 최종 detect를 한다.
SSD에서 default box는 Faster R-CNN에서 사용되는 anchor box와 유사하지만, 다른 해상도의 여러 feature map에 적용한다. 여러 featue map에서 다른 default box를 허용하면 가능한 output box 모양의 공간을 효율적으로 구분할 수 있다.

  • Multi-scale feature maps for detection
    - 38x38, 19x19, 10x10, 5x5, 3x3, 1x1 의 피쳐맵을 의미
    - Yolo는 7x7 grid 하나뿐이지만 SSD는 전체 이미지를 38x38, 19x19, 10x10, 5x5, 3x3, 1x1의 그리드로 나누고 output과 연결
    - feature map은 점진적으로 크기가 줄어 여러 스케일에 대해 검출이 가능
    - 큰 feature map에서는 작은 물체 탐지, 작은 feature map에서는 큰 물체 탐지

  • Convolutional predictiors for detection
    - 이미지부터 최종 피쳐맵까지는 Conv(3x3, s=2)로 연결
    - Output과 연결된 피쳐맵은 컨볼루셔널 필터를 이용해 생성된 고정된 수의 검출 결과를 생성. 이 때 m×nm \times n 크기의 pp 채널을 가지는 작은 커널을 사용하는데 3×3×p3 \times 3 \times p 사이즈의 필터로 컨볼루션 연산. (Yolo v1은 Output과 Fully-Connected. 여기서 시간을 많이 단축시킴)
    - 예측된 Output은 class, category 점수와, default box에 대응되는 offset을 구함

  • Default boxes and aspect ratios
    - 각 피처맵의 셀(5x5인 경우 총 25개의 셀)에서 default bounding box를 만들고 그 default box와 대응되는 자리에서 예측되는 박스으 ㅣoffset과 per-class scores(박스 안에 물체의 존재 유무)를 예측한다.
    - per-class scores는 확률이 아니라 박스에 사물이 있는지 없는지 나타내는 값
    - kk개의 셀 위치가 있고, cc개의 클래스와 4개의 오프셋 정보를 계산하여야 한다면 각 셀마다 (c+4)k(c+4 )k 개의 필터를 가지게 되어 m×nm \times n 크기의 특징 맵은 (c+4)kmn(c+4)kmn개의 출력을 가지게 됨.
    - 6개의 피쳐맵(마지막 6개의 피쳐맵, Output과 직결된)은 각각 Conv(3×3×(Conv(3\times3\times(#bb×(c+offset)))\times(c + offset))) 연산을 통해 Output 형성
    - Output은 각 셀당 #bb개의 바운딩박스를 예측

2.2 Training

  • Ground Truth Box : 예측해서 맞춰야 하는 정답
  • Predicted Box : Extra Network의 5 x 5 의 feature map에서 output (predicted box)를 위해 conv 연산을 하면 총 5 x 5 x (6 x (21 + 4))의 값이 형성된다. = gridcell×gridcell×(grid cell \times grid cell \times (# of bb×(class+offset)))\times ( class + offset)))
  • Default Box : 5x5 feature map은 각 셀당 6개의 default box를 가지고 있다. 이때 default box의 w, h는 feature map의 scale에 따라 서로 다른 s 값과 서로 다른 aspect ratio인 a 값을 이용해 도출된다. 또 default box의 cx와 cy는 feature map size와 index에 따라 결정된다. 먼저 default box와 ground truth box 간의 IOU를 계산해 0.5 이상인 값들은 1(positive), 아닌 값들은 0으로 할당한다. 예를 들어, 그림과 같이 5x5의 feature map의 13번째 셀(가운데)에서 총 6개의 default box와 predicted bounding box가 있는데, 같은 순서로 매칭되어 loss를 계산한다. 이는 아래의 loss function을 보면 더 쉽게 이해할 수 있을 것이다. 어쨌든, 매칭된(x=1, positive) default box와 같은 순서의 predicted bounding box에 대해서만 offset 에 대한 loss를 고려한다.

    빨간색 점섬이 매칭된 default box라고 한다면, 거기에 해당하는 cell의 같은 순서의 predicted boudning box의 offset만 update되고 최종적으로는 아래와 같이 predict된다.

Matching strategy

ground truth와 default box를 미리 매칭시킨다. 이를 위해 먼저 jaccard overlap을 이용하여 GT box와 가장 많이 겹치는 박스를 먼서 선택한 뒤, default box 중 jaccard overlap이 0.5 이상이 되는 GT box를 선택한다. (= 두 영역의 IOU가 0.5 이상인 것들을 매칭한다는 것과 같은 말)

training objective

전체 objective loss func는 localziation loss(loc)와 confidece loss(conf)의 가중치 합으로 계산한다.

  • xijp={1,0}x_{ij}^p = \{1, 0\} : i번째 default box와 j번째 ground truth 박스의 category p에 물체 인식 지표. p라는 물체의 j번째 ground truth와 i번째 default box 간의 IOU 가 0.5 이상이면 1 아니면 0.
  • NN : 매칭된 default box의 수. N=0N=0 이라면 loss는 0으로 사용
  • ll : predicted box
  • gg : ground truth box
  • dd : default box
  • cx,cycx, cy : 그 박스의 x, y 좌표
  • w,hw, h : 그 박스의 width, heigth
  • α\alpha : 1 (교차검증으로부터 얻어짐)

localization loss는 예측된 박스 ll과 실제 참 박스 gg 파라미터 사이의 Smooth L1 loss를 이용하여 계산한다. 여기서는 default box의 (d)(d)의 중심의 offset (cx,cycx, cy) default box의 크기 (w,hw, h)를 사용했다.

Lloc(x,l,g)=iPosnm{cx,cy,wh}xijksmoothL1(limg^jm)g^jcx=(gjcxdicx)/diwg^jcy=(gjcydicy)/dihg^jw=log(gjwdiw)g^jh=log(gjhdih)L_{loc} (x, l, g) = \sum_{i \in Pos}^n \sum_{m \in \{ cx, cy, w h \}} x_{ij}^k \text{smooth}_{\text{L1}} (l_i^m – \hat{g}_j^m) \\ \hat{g}_j^{cx} = (g_j^{cx} – d_i^{cx}) / d_i^w\\ \hat{g}_j^{cy} = (g_j^{cy} – d_i^{cy}) / d_i^h \\ \hat{g}_j^{w} = \log(\frac{g_j^{w}}{d_i^{w}})\\\hat{g}_j^{h} = \log(\frac{g_j^{h}}{d_i^{h}})

  • 우리가 예측해야할 predicted box의 lim(cx,cy,w,h)l^m_i(cx,cy,w,h)값들은 특이한 g^\hat{g} 값들을 예측. 이때 g^\hat{g}cx,cycx,cy는 default box의 cxcxw,hw,h로 normalize된다.
  • g^\hat{g}w,hw, h도 마찬가지
  • 예측된 ll 값들을 box를 표현할때(마지막 Test Output) 역시 default box의 offset 정보가 필요

confidence loss는 여러 클래스 간의 softmax loss를 사용한다.

Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0) where c^ip=exp(cip)pexp(cip)L_{conf}(x, c) = – \sum_{i \in Pos}^{N} x_{ij}^p \log(\hat{c}_i^p) – \sum_{i \in Neg} \log(\hat{c}_i^0) \text{ where } \hat{c}^p_i = \frac{\exp(c_i^p)}{\sum_p \exp(c_i^p)}

  • positive(매칭 된) class에 대해서는 softmax
  • negative(매칭 되지 않거나, 배경인 것) class를예측하는 값으 c^i0\hat{c}^0_i 값이고 background이면 1, 아니면 0의 값을 가짐
  • 최종적인 predicted class scores는 우리가 예측할 class + 배경 class 를 나타내는지표

Choosing scales and aspect ratios for default boxes

default box를 위한 scale. 여래 크기의 default box 생성을 위해 다음과 같은 식 만듦.

  • SminS_{min} = 0.2, SmaxS_{max} = 0.9
  • 여기에 aspect ratio = ar{1,2,3,12,13}a_r\in\{ 1, 2, 3, \frac{1}{2}, \frac{1}{3} \}로 설정.
  • default box의 가로 크기 wka=skarw^a_k=s_k\sqrt{a_r}와 세로 크기 hka=sk/arh^a_k = s_k / \sqrt{a_r} 를 계산하여 사용
  • ar=1a_r = 1에 대해서는 sk=sksk+1s’k = \sqrt{s_k s_{k+1}} 을 사용
  • 따라서 결과적으로 6개의 default box가 각 맵마다 생성
  • default box의 중심(cx,cycx, cy)은 (i+0.5fk,j+0.5fk\frac{i + 0.5}{|f_k|}, \frac{j + 0.5}{|f_k|})를 사용하였는데, fk|f_k|는 k번째 square feature map의 크기. (i,j[0,fk]i, j \in \big[ 0, |f_k| \big])

Hard negative Mining

매칭 단계에서 대부분의 default box가 배경이다. 이는 positive와 nagative 샘플의 imbalance를 유발한다. 따라서 마지막 class loss 부분에서 positive : negative 비율을 1:3으로 뽑는다. (high confidence로 정렬해서)

Data augmentation

입력 이미지의 크기, 모양, 그리고 다음 방법 중 하나를 이용하여 샘플링한다.

  • 전체 이미지 사용
  • 물체와 최소 IOU가 0.1, 0.3, 0.5, 0.7, 0.9가 되도록 패치샘플
  • 랜덤 샘플링하여 패치 구함.

3 Experimental Results

PASCAL VOC, COCO Dataset에서 속도, 정확도 성능 가장 좋음.

참고자료

논문
Taeu Kim님의 블로그
룬룬님의 블로그
Official Code
그림

이제 구현해야지

0개의 댓글