논문 읽기/Object Detection

[논문 읽기] SSD(2016) 리뷰, Single Shot MultiBox Detector

AI 꿈나무 2021. 3. 1. 23:07
반응형

 SSD: Single Shot MultiBox Detector 논문을 읽어보고 정리했습니다.

 

 Faster R-CNN은 region proposal network(RPN)을 사용하여 객체가 있을 법한 구역(300개)를 제안하고, detection network를 통해 각 구역의 객체를 검출합니다. 2가지 과정을 걸쳐서 object detection이 수행되며, 이를 2-stage라고 합니다.

 

 SSD는 region proposal 과정을 제거하여 1-stage 방식으로 객체를 검출합니다. 이미지를 CNN 모델에 전달하면 객체를 검출할 수 있는 것입니다. 따라서, SSD는 2-stage 방식보다 더 빠릅니다.

 

 SSD300은 74.3% mAP, 59FPS 성능으로 Faster R-CNN(73.2% mAP, 7FPS)와 YOLO1(63.4%mAP, 45FPS)를 능가합니다.

 


SSD Model

 SSD는 여러 feature map에 convolutional filter를 사용하여 바운딩박스 offset과 class score 반환합니다. 바운딩 박스의 offset은 사전에 정의한 default box에 대한 offset이며, defalut box는 다양한 크기(scale)와 종횡비(aspect ratio)로 설정합니다. 여러 feature map에서 반환된 바운딩박스는 한 곳에 모여, non-maximum supression을 거쳐서 최종 바운딩박스를 선별합니다.

 

SSD 구조

 

 SSD 작동 방식을 잘 정리한 블로그가 있어서 가져와봤습니다.

 출처 : taeu.github.io/paper/deeplearning-paper-ssd/

 

 

 300x300x3 입력 이미지가 VGG-16의 conv4_3까지 거쳐서 38x38x512 feature map이 생성됩니다.

 그리고, conv4_3까지를 base network라고 합니다.

 

 

 base network 이후의 feature map에서 3x3 conv filter를 이용해 바운딩박스의 클래스와 offset을 예측합니다. (3x3x바운딩박스 개수x (class score + offset))

 6개의 feature map에서 예측된 바운딩박스는 8732개가 됩니다.

 

 8732개의 모든 바운딩박스를 이용하지 않습니다. non-maximum-supression(NMS)를 적용하여 최종적인 바운딩박스를 선별합니다.

 

Multi-scale feature maps for detection

  • 각 feature map에서 서로 다른 scale의 바운딩박스가 생성됩니다.
  • 38x38, 19x19, 10x10, 5x5, 3x3, 1x1 feature map에서 바운딩박스를 예측하므로 다양한 크기의 객체를 검출할 수 있습니다.

 

Convolutional predictors for detection

  • 각 feature map에서 3x3 filter를 사용하여 객체를 검출합니다.
  • m x n x p의 feature map이 있으면, 3 x 3 x p개 convolutional filter는 default box 좌표에 해당하는 offset과 class score를 생성합니다.
  • YOLO는 이 과정을 연산량이 더 많은 FC layer를 사용했기 때문에 convolutional filter를 사용하는 SSD가 더 빠릅니다.

 

Default boxes and aspect ratios

 

 feature map cell에 다양한 크기(scale)와 종횡비(aspect ratio)의 default box를 고정시킵니다. 각 feature map cell에는 default box가 위치하게 되고, default box에 상대적인 바운딩박스 offset과 class score를 예측합니다.(3x3 filter 사용). 각 feature map cell에서 3x3 크기의 (c+4)k개 filter가 적용되고(4는 offset, c는 class score, k는 default box 수), m x n 크기의 feature map에서 (c+4)kmn를 출력합니다.

 


Training

Matching strategy

 학습 도중, ground truth detection에 해당하는 default box를 선정해야하고, 그에 따라 신경망을 학습해야 합니다. IoU 0.5 이상을 기준으로 ground truth를 default box에 매칭합니다. 가장 높은 IoU를 선택하는 것보다 여러 default box를 선택하는 것이 학습을 간소화 합니다.

 

loss function

 

 앞부분은 confidence loss로 class에 대한 loss를 계산합니다. 뒷부분은 localization loss로 바운딩박스 offset에 대한 loss를 계산합니다. N은 매칭된 default box와 ground truth box수를 나타내며, $\alpha$는 1입니다.

 

 $x^p_{ij}$는 i번째 default box와 j번째 ground truth box 사이 IoU가 0.5 이상이되어 서로 매칭된 것을 나타냅니다. 즉,  $x^p_{ij}$ 기호가 들어가 있으면, 매칭된 것들에 대해서만 loss를 계산합니다.

 

 앞부분은 default box에 object가 있는 경우, default box와 ground truth box의 cross entrophy loss를 계산합니다. i는 default box, j는 ground truth box를 의미합니다. 뒷부분은 default box에 물체가 없다고 예측했지만, 실제로 물체가 있는 경우의 loss를 계산합니다.

 

 localization loss를 계산합니다. $\hat{g}$은 ground truth box와 default box 사이의 offset입니다. cx, cy, w, h에 해당하는 $\hat{g}$를 계산하고, 예측값인 l에 값을 빼주어 smoothL1 loss를 계산합니다. 각 $\hat{g}$는 정규화하여 0에서 1의 값을 갖습니다.

 

smmothL1은 Fast R-CNN 논문에 나와있는 수식입니다.

 

Choosing scales and aspect ratios for defaults boxes

 각 feature map에 대한 default box의 크기는 다음과 같이 계산합니다.

 

 

 $s_{min}$ = 0.2, $s_{max}$ = 0.9 입니다. m은 feature map 수 입니다. 가장 낮은 계층의 scale은 0.2이고, 가장 높은 계층의 scale은 0.9가 되며, m의 수에따라 scale의 구간이 정해집니다. 예를 들어, m=8으로 설정하면 scale은 [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]가 됩니다.

 

 aspect ratio(종횡비)도 설정합니다. {1,2,3,1/2,1/3}으로 설정을 했다면, 이 종횡비는 default box의 넓이에 루트를 씌워 곱해주고 높이에는 루트를 씌워 놔눠줌으로써 종횡비를 유지시킵니다.

 

 

 aspect ration를 2로 설정했다면 h = s/root(2), w=s*root(2)가 되어 두 비율은 2가 됩니다.

 

 다음은 default box의 중심 좌표를 계산하는 수식입니다.

 

 

 $f_k$는 feature map의 크기입니다. 5x5 feature map이면 $f_k$는 25가 됩니다. i와 j는 0 ~ $f_k$ 사이의 정수입니다.

 

 중심점을 계산하고 중심점에 default box를 그려주면 됩니다. 아래는 이 작업을 시각화한 그림입니다.

 

출처 : https://yeomko.tistory.com/20

 

Hard negative mining

 default box와 ground truth box를 매칭하고 나면, 대부분의 default box는 negative입니다. 매칭 방법은 가장 높은 IoU를 선택하는 것이 아니라, 0.5 이상의 IoU를 지니면 매칭하기 때문입니다. 따라서 positive와 negative 사이에 불균형이 발생합니다. 모든 negative example를 사용하지 않고, confidence loss로 정렬하여 positive : negative = 1:3 비율이 되도록 sample 합니다.

 


참고자료

[1] arxiv.org/abs/1512.02325

[2] yeomko.tistory.com/20

[3] taeu.github.io/paper/deeplearning-paper-ssd/

반응형