포스트

SSD는 왜 8,732개 Default Box를 쓰나: 멀티스케일 구조 계산

SSD의 핵심은 서로 다른 해상도의 feature map 각 위치에 여러 종횡비의 default box를 놓고, 한 번의 네트워크 통과로 클래스 점수와 box offset을 함께 예측하는 것입니다. 8,732라는 수는 임의의 성능 주문이 아니라 여섯 map의 위치 수와 위치별 box 수를 합한 결과입니다. 모델을 이해할 때는 box 개수, 정답 matching, 배경 불균형을 다루는 hard negative mining을 한 흐름으로 봐야 합니다.

Single Shot이 실제로 한 번에 예측하는 것

SSD는 Single Shot MultiBox Detector의 약자입니다. 별도의 region proposal 단계 뒤에 분류기를 실행하는 대신, 여러 feature map에 작은 convolution predictor를 붙여 두 출력을 동시에 만듭니다.

  • 어떤 클래스인지 나타내는 confidence
  • default box를 실제 물체 위치로 조정하는 offset

SSD의 multi-scale feature map

전체 모델은 고정 크기의 default box와 해당 box의 클래스 점수를 예측하는 feed-forward convolutional network입니다.

SSD 모델 구조

원문은 VGG-16 일부 뒤에 feature map을 추가하고, 격자 크기를 점차 줄여 서로 다른 크기의 물체를 맡기는 구조로 설명합니다.

1
2
3
4
5
6
38×38×512
19×19×1024
10×10×512
5×5×256
3×3×256
1×1×256

여기서 “single shot”은 feature map이 하나라는 뜻이 아닙니다. 여러 크기의 feature map에서 나온 예측을 한 네트워크 안에서 함께 사용한다는 뜻으로 읽어야 합니다.

8,732개는 어떻게 나오는가

각 격자 위치마다 사용하는 default box 수가 다릅니다.

Feature map위치당 box전체 box
38×3845,776
19×1962,166
10×106600
5×56150
3×3436
1×144
합계 8,732

한 위치에서 클래스 수를 c, default box 수를 k라고 하면 출력 수는 (c + 4) × k입니다. 4는 중심 좌표와 너비, 높이에 대응하는 box offset입니다. m×n feature map 전체에서는 (c + 4) × k × m × n개의 출력이 생깁니다.

이 숫자가 중요한 이유는 단순히 box가 많기 때문이 아닙니다. 촘촘한 고해상도 map과 거친 저해상도 map이 서로 다른 scale을 맡고, 각 위치에서 여러 종횡비를 비교한다는 설계가 8,732라는 결과로 드러나기 때문입니다.

학습에서는 어떤 box를 정답으로 삼는가

먼저 Jaccard overlap으로 ground-truth box와 default box를 맞춥니다. 원문에서는 overlap이 0.5보다 높은 값을 학습에 사용한다고 정리했습니다.

SSD matching과 loss

전체 loss는 두 부분의 합입니다.

  • localization loss: 예측 box offset과 정답 box의 차이
  • confidence loss: 클래스 예측의 차이

SSD localization loss

localization에는 smooth L1 loss, confidence에는 softmax loss를 사용하며 원문의 가중치 α는 1입니다.

SSD confidence loss

default box의 scale은 feature map 수 m, Smin 0.2, Smax 0.9를 사용해 정하고, 종횡비는 1, 2, 3, 1/2, 1/3을 사용합니다.

Default box scale

Default box center

배경에 해당하는 default box가 훨씬 많기 때문에 모든 음성 예제를 그대로 학습하지 않습니다. confidence를 기준으로 음성 box를 정렬하고, 음성과 양성의 비율이 최대 3:1이 되도록 hard negative mining을 적용합니다.

데이터 증강에는 전체 이미지, 여러 최소 Jaccard overlap 조건의 patch, 무작위 sampling, resize, 0.5 확률의 horizontal flip, photometric distortion이 기록돼 있습니다.

성능 숫자를 읽을 때 주의할 점

기존 글에는 VOC2007에서 SSD300 77.2% mAP, SSD512 79.8% mAP, SSD300 59FPS 같은 논문 결과가 적혀 있습니다.

SSD benchmark

SSD benchmark 비교

이 숫자를 현재 장비의 보장값으로 읽으면 안 됩니다. 데이터셋, 입력 크기, 구현과 측정 환경에 묶인 논문 결과이기 때문입니다. 구조를 비교할 때 더 오래 남는 판단 포인트는 다음 세 가지입니다.

  1. 하나의 최종 feature map이 아니라 여섯 scale에서 예측합니다.
  2. 각 위치는 클래스와 offset을 함께 냅니다.
  3. 많은 default box에서 생기는 불균형을 hard negative mining으로 다룹니다.

원문은 SSD 논문공식 Caffe 코드를 연결합니다. 이 글은 구현 명령이 아니라, 코드를 열었을 때 8,732개 예측과 loss가 어디서 나오는지 읽기 위한 구조 안내입니다.

Default box 계산을 직접 확인하는 방법

각 feature map의 가로, 세로 위치 수를 먼저 곱하고, 그 레벨에서 한 위치에 두는 scale, aspect ratio 조합 수를 다시 곱합니다. 여섯 레벨의 값을 모두 더하면 전체 box 수가 됩니다. 구현을 바꿨는데 출력 channel이 맞지 않는다면 이 표와 head가 예측하는 class, offset 차원을 함께 확인해야 합니다.

학습에서는 box 수보다 positive 할당이 중요합니다. 작은 물체가 어느 레벨의 default box와 충분히 겹치는지, 극단적인 종횡비가 준비된 prior에 가까운지를 봅니다. Positive가 거의 없는 범주라면 confidence threshold를 조정하기 전에 matching과 데이터의 box 분포를 확인해야 합니다.

평가에서는 누락과 오검출을 scale별로 나눕니다. 작은 물체 누락이 많다면 앞쪽 고해상도 map의 학습 신호와 입력 해상도를 보고, 배경 오검출이 많다면 confidence와 hard negative 선택을 봅니다. 후처리 NMS가 과하게 겹친 실제 객체까지 지우는지도 별도 검사해야 네트워크와 후처리 오류를 분리할 수 있습니다.

실제 영상에서는 연속 frame의 box 흔들림도 확인합니다. 한 장 AP가 같아도 confidence와 NMS 경계에서 검출이 켜졌다 꺼지면 추적, 경보 시스템이 불안정해질 수 있으므로 시간 방향 일관성을 별도 지표로 둡니다.

함께 읽으면 이해가 이어지는 글

자주 묻는 질문

SSD의 8,732개 default box는 학습마다 달라지나요?

기본 구조에서는 여섯 feature map의 공간 크기와 위치별 box 개수로 정해집니다. 각 box의 class와 offset 예측값은 입력마다 달라지지만 배치 개수 계산은 구조에서 나옵니다.

Ground truth와 가장 많이 겹친 default box만 positive가 되나요?

가장 잘 겹치는 box를 우선 연결하고, 정한 IoU 기준을 넘는 다른 default box도 positive로 사용할 수 있습니다. 이 matching이 각 scale과 종횡비가 받을 학습 신호를 정합니다.

Hard negative mining은 왜 필요한가요?

대부분의 default box가 배경이어서 모든 negative를 그대로 학습하면 confidence loss가 배경에 치우칩니다. 손실이 큰 negative를 골라 positive와의 비율을 조절합니다.

SSD 출력 오류를 scale별로 기록하는 예시

검증 이미지를 물체 크기 구간으로 나누고 각 구간의 positive matching 수, 누락, 오검출을 기록합니다. 작은 물체가 특정 feature map에 거의 할당되지 않는다면 confidence threshold보다 default box scale과 입력 정보가 먼저입니다. 큰 물체의 box만 일관되게 작다면 offset 복원과 prior 크기를 봅니다.

같은 raw prediction에 confidence 기준과 NMS 기준만 바꿔 결과를 저장하면 네트워크와 후처리 영향을 나눌 수 있습니다. 기준을 낮춰 recall이 늘 때 오검출이 어느 class, 배경에서 증가하는지, NMS를 강하게 할 때 가까이 붙은 실제 객체가 함께 지워지는지 확인합니다. 이 표가 있어야 8,732개 후보가 최종 결과로 줄어드는 과정의 어느 단계가 비용을 만드는지 설명할 수 있습니다.

Default box 설정을 바꾸면 출력 head의 channel과 decoding도 함께 바뀌는지 확인합니다. Prior만 추가하고 head shape나 후처리를 그대로 두면 학습 target과 예측 배열이 대응하지 않습니다. 변경 전후에 레벨별 box 수를 다시 합산하는 작은 검사를 두면 8,732 계산 원리를 구현 검증에 사용할 수 있습니다.

THE END / OPSOAI

여기까지 읽었습니다

핵심 장면을 한 번 더 떠올려 보세요. 이해가 남았다면 이 책은 제 역할을 다했습니다.

다른 책 고르기
표지 1

키와 좌우 스와이프를 지원합니다. 읽던 페이지는 이 기기에 저장됩니다.

CONTENTS

이 책의 목차

    8개 장 13 분읽는 시간