Notice
Archives
Link
Today
1,798
Total
1,529,563
관리 메뉴

귀퉁이 서재

논문 리뷰 - SSD(Single Shot MultiBox Detector) 톺아보기 본문

논문 리뷰

논문 리뷰 - SSD(Single Shot MultiBox Detector) 톺아보기

Baek Kyun Shin 2022. 3. 30. 00:04

SSD는 여러 합성곱 계층의 피처 맵마다 디폴트 박스로 객체를 탐지하는 모델입니다. 본 글에서 주요 내용 위주로 SSD 논문을 번역/정리했습니다. 글 중간에 <NOTE>로 부연 설명을 달아놓기도 했습니다. 틀린 내용이 있으면 피드백 부탁드립니다.

  • 논문 제목: SSD: Single Shot MultiBox Detector
  • 저자: Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg
  • 개정 발표: 2016년 12월 (첫 발표: 2015년 12월)

Abstract

본 연구진은 단일 깊은 신경망(single deep neural network)을 사용한 객체 탐지 기법, SSD를 제안합니다. 예측 단계에서 SSD는 디폴트 박스 내 객체 카테고리 존재 여부를 점수화하며, 디폴트 박스가 객체 모양과 더 일치하도록 조정합니다.

<NOTE> 디폴트 박스는 YOLO에서 사용한 앵커 박스(anchor box)와 같은 개념이라고 보시면 됩니다.

게다가 SSD는 다양한 크기의 객체를 탐지하도록 서로 다른 해상도를 갖는 여러 피처 맵의 예측 결과를 활용합니다. SSD는 영역 추정을 필요로 하는 다른 객체 탐지 기법에 비해 상대적으로 간단합니다. 영역 추정 단계와 반복적인 피처 샘플링을 제거하여 모든 연산을 단일 네트워크로 수행하기 때문입니다. 이런 점 덕분에 SSD는 훈련하기도 수월합니다. 다른 객체 탐지 요소와 결합하기도 쉽고요. PASCAL VOC와 MS COCO, ILSVRC 데이터셋에서 실험한 결과, 영역 추정을 요하는 다른 객체 탐지 모델보다 속도도 빠르고 성능도 좋았습니다. 훈련과 예측을 단일 프레임워크로 처리한다는 장점도 있습니다. SSD는 (300 x 300) 크기의 입력 이미지를 활용할 때 mAP 74.3%를 달성했으며, 59 FPS의 속도를 보였습니다. Nvidia Titan X에서 VOC 2007 데이터셋으로 실험한 결과입니다. (512 x 512) 크기에서는 mAP 76.9%입니다. Faster R-CNN보다 우수한 성능이죠. 다른 single-stage 모델과 비교해도 SSD는 더 작은 이미지 크기로도 더 높은 정확도를 보입니다.


1. Introduction

최근 객체 탐지 모델은 다음과 같은 접근법을 활용해왔습니다. 1) 경계 박스 추정, 2) 각 경계 박스마다 피처 재추출(resample), 3) 성능 좋은 분류기 적용. 이러한 파이프라인은 선택적 탐색(selective search)이 나온 이후로 꾸준히 객체 탐지 모델에 적용되어 왔죠. PASCLA VOC, MS COCO, ILSVRC 데이터셋에서 좋은 성능을 보여왔고요. 한편, 정확성이 높다는 장점이 있지만 실시간 객체 탐지 서비스에 적용하기에는 속도가 느립니다. 지금까지 모델 가운데 성능이 높으면서 속도도 가장 빠른 모델은 Faster R-CNN입니다. Faster R-CNN은 속도가 7 FPS(1초에 7프레임 처리)죠. 이보다 더 빠른 모델을 만들려는 시도가 있었지만 그만큼 성능도 떨어진다는 난점이 있습니다.

이 논문에서는 '경계 박스 추정을 위한 피처 재추출'을 하지 않는 딥러닝 기반 객체 탐지 모델을 제안합니다. 정확도도 높은 모델입니다. VOC 2007 테스트 데이터셋에서 59 FPS의 속도로 mAP 74.3%를 달성했죠. Faster R-CNN은 7 FPS 속도로 mAP 73.2%를 기록하고, YOLO는 45 FPS 속도로 mAP 63.4%를 기록하는 결과와 비교하면 속도와 정확도 측면에서 모두 앞서네요. 속도가 빨라진 중요한 이유는 경계 박스 추정과 연이은 피처 재추출(resampling) 단계를 없앴기 때문입니다. 우리 연구진이 이러한 작업을 처음 시도한 건 아닙니다. 하지만 여러 개선 사항을 더하면서 기존 시도보다 정확도가 더 높아진 겁니다. 객체 클래스와 경계 박스 좌표를 예측하기 위해 작은 합성곱 필터를 사용했습니다. 이 합성곱 필터는 다양한 스케일과 가로세로 비율의 피처 맵을 잘 탐지하죠. 이러한 개선(다양한 스케일로 예측하기 위해 다중 계층을 사용하는 방법)으로 높은 정확도와 빠른 속도를 달성했습니다.

요약하면 본 연구진은 다음과 같은 공헌을 했습니다.

  • 기존의 SOTA(state-of-the-art) single shot detector인 YOLO보다 빠르고 정확한 SSD(Single Shot Detector)를 개발했습니다.
  • SSD의 핵심은 고정된 경계 박스들을 활용해 클래스 레이블과 경계 박스 좌표를 예측한다는 것입니다. 작은 합성곱 필처를 피처 맵에 적용해서 말이죠.
  • 정확도를 높이기 위해 다양한 스케일의 피처 맵에서 여러 스케일로 예측을 합니다. 가로세로 비율에 따라 분리해 예측하죠.
  • 이러한 설계 덕분에 end-to-end 방식으로 간단히 훈련할 수 있습니다. 게다가 입력 이미지의 해상도가 낮더라도 높은 정확도를 보입니다.

2. The Single Shot Detector (SSD)

이번 단원에서는 SSD 프레임워크(2.1 단원)와 SSD 훈련 방식(2.2 단원)을 설명합니다. 이어서 3단원에서는 여러 데이터셋에서 실험한 결과를 보여줍니다.

2.1 Model

SSD는 합성곱 신경망을 통해 '고정된 크기의 경계 박스 모음'을 예측하고, '각 경계 박스 내 객체 클래스의 존재 여부'를 점수화합니다. 이어서 비최댓값 억제(Non-Maximum Suppression, NMS)를 적용해 최종적으로 객체 탐지 결과를 도출합니다. 전통적인 이미지 분류 모델 아키텍처를 SSD 앞부분에 사용합니다. 이를 기본 네트워크(base network)라 부르겠습니다. SSD에서는 기본 네트워크로 VGG-16을 사용합니다. 기본 네트워크 다음에 또 다른 구조를 덧붙였습니다. 다음과 같은 효과를 위해서죠.

Multi-scale feature maps for detection
기본 네트워크 다음에 여러 합성곱 피처 계층을 덧붙였습니다. 이 계층의 크기는 차례로 줄어듭니다. 다양한 스케일로 객체를 탐지하기 위해서입니다. 각 피처 계층마다 객체 탐지를 수행하는 것입니다.

Convolutional predictors for detection
추가된 각 피처 계층은 합성곱 필터를 통해 객체 탐지를 수행합니다. 이때 탐지된 결과의 크기는 일정합니다. 다음 그림의 위쪽은 SSD 모델 구조를 나타냅니다.

SSD와 YOLO 구조 비교

SSD 모델은 기본 네트워크 끝에 여러 피처 계층을 덧붙였습니다. 각 피처 계층마다 '다양한 스케일과 가로세로 비율을 갖는 디폴트 박스의 좌표값'과 '해당 디폴트 박스가 나타내는 객체의 존재 여부 신뢰도'를 예측합니다. 이때 경계 박스 좌표는 디폴트 박스를 기준으로 상대 좌표로 예측합니다. 300 x 300 크기의 입력 이미지를 받는 SSD는 448 x 448 크기의 입력 이미지를 받는 YOLO보다 더 빠르고 정확합니다(PASCAL VOC 2007 실험 결과).

다음 그림은 SSD 프레임워크를 보여줍니다.

SSD 프레임워크

(a) SSD는 훈련 시, 입력 이미지와 각 객체별 참 경계 박스(ground truth boxes)만 필요로 합니다. 입력 이미지에 합성곱 연산을 해 피처 맵을 구합니다. 이때 앞서 말했든 여러 차례 합성곱 연산을 해서 다양한 크기의 피처 맵을 만듭니다. 다양한 피처 맵마다 각 픽셀당 서로 다른 비율을 갖는 디폴트 박스가 있습니다.

<NOTE> (b)와 (c)에서 점선으로 표시된 것을 디폴트 박스라고 합니다. 디폴트 박스는 한 픽셀당 네 가지가 있습니다. 그러므로 (b) 8 x 8 피처 맵에서는 디폴트 박스가 총 8 * 8 * 4개 있습니다. (c) 4 x 4 피처 맵에서는 4 * 4 * 4개가 있고요.

각 디폴트 박스마다 '경계 박스 좌표'와 '그 경계 박스의 객체 신뢰도 점수'를 예측합니다. 위 (c) 그림에서 보다시피 객체 신뢰도 점수를 c_1, c_2, ... , c_p로 표현합니다. 훈련 단계에서 디폴트 박스를 먼저 참 경계 박스(ground truth boxes)와 매칭합니다. 예를 들어, 두 가지 디폴트 박스가 고양이 한 마리, 강아지 한 마리와 매칭됐다고 합시다. 이 두 디폴트 박스를 positive로 간주하고, 나머지 디폴트 박스는 negative로 간주합니다. 

Default boxes and aspect ratios
SSD 네트워크에서는 다양한 피처 맵을 구한다고 했습니다. 다양한 피처 맵마다 디폴트 박스와 피처 맵의 각 픽셀과 연관시킵니다. 각 픽셀마다 경계 박스 좌표와 객체 클래스 신뢰도 점수를 구합니다. 객체 클래스 신뢰도 점수란 해당 디폴트 박스에 객체가 존재하는지 여부를 점수화해 나타낸 값을 듯합니다. 객체 클래스가 c개 있다고 하면, 각 디폴트 박스마다 예측하는 값은 (c + 4)개입니다(경계 박스 좌표는 4개이기 때문에). 한 픽셀마다 갖는 디폴트 박스가 k개라 하면, 한 픽셀마다 예측하는 값은 (c + 4)k개입니다. 만약 피처 맵 크기가 m x n이라면 피처 맵당 예측하는 값은 (c + 4)kmn개입니다. 디폴트 박스는 Faster R-CNN에서 사용한 앵커 박스와 비슷합니다. 하지만 SSD에서는 다양한 해상도를 갖는 피처 맵을 활용한다는 점이 다릅니다. 이렇게 피처 맵 크기를 다양하게 활용하고, 디폴트 박스의 비율도 여러 개 사용하기 때문에 효과적으로 객체를 탐지할 수 있습니다.

2.2 Training

SSD와 '영역 추정을 활용한 전통적인 객체 탐지 모델'과는 훈련하는 방식에 차이가 있습니다. 바로 참 경계 박스(ground truth boxes)가 필요하다는 점입니다. Faster R-CNN이나 MultiBox의 영역 추정 단계에서도, YOLO에서도 필요하긴 합니다. 참 경계 박스가 있어야 end-to-end 훈련에 손실 함수와 역전파를 적용할 수 있죠. 

Matching strategy 
훈련하는 동안 어떤 디폴트 박스가 참 경계 박스와 매칭되는지 확인해야 합니다. 참 경계 박스에 매칭되는 디폴트 박스를 찾는 방식으로 훈련이 진행되죠. 매칭되는 디폴트 박스는 크기도, 위치도, 가로세로 비율도 다양하겠죠. 참 경계 박스와 IoU가 0.5보다 큰 디폴트 박스를 찾습니다. IoU가 가장 큰 디폴트 박스 하나만 찾는 게 아니라, 우선은 0.5보다 큰 모든 디폴트 박스를 찾는 겁니다.

Training objective 
SSD 훈련 손실 함수는 MultiBox 훈련 손실 함수에서 가져왔습니다. 다만, 여러 객체 클래스를 다루도록 조금 변형했습니다. 각 객체 클래스마다 디폴트 박스와 참 경계 박스가 매칭되는지 여부를 다음 변수로 설정합니다.

SSD의 전체 손실 함수는 다음과 같습니다.

N은 매칭된 디폴트 박스 개수입니다. 만약 N=0이라면 전체 손실 값도 0으로 설정합니다. SSD에서는 가중치 파라미터인 α는 1로 설정합니다.

localization 손실은 예측한 디폴트 박스(l)와 참 경계 박스(g) 사이의 Smooth L1 손실입니다. Faster R-CNN과 비슷하게, 디폴트 박스의 좌표는 중앙 x값, 중앙 y값, 너비, 높이로 예측합니다. 

Localization 손실

신뢰도 손실은 각 객체 클래스마다 소프트맥스 함수로 구합니다.

Choosing scales and aspect ratios for default boxes 
다양한 객체 크기를 다루기 위해 Overfeat이나 SPP-net 모델에서는 이미지를 다양한 크기로 처리합니다. 하지만, SSD에서는 각 합성곱 계층의 피처 맵을 활용해 같은 효과를 냅니다. 이렇게 하면 모든 객체 스케일끼리 파라미터도 공유할 수 있습니다. 또한, 각 합성곱 계층의 피처 맵을 활용하기 때문에 객체의 전반적인 특성도 파악할 수 있고, 세세한 특성도 파악할 수 있습니다.

이런 방식으로, 여러 피처 맵을 활용해 객체 탐지를 수행합니다. 이때 사용하는 k개 디폴트 박스 크기는 피처 맵마다 일정합니다. 그러면 큰 피처 맵에서는 디폴트 박스가 작은 객체를 탐지할 테고, 작은 피처 맵에서는 큰 객체를 탐지할 테죠. 다음 그림은 다시 봅시다.

SSD 프레임워크

상대적으로 크기가 큰 강아지는 4 x 4 피처 맵에서 위아래로 길쭉한 디폴트 박스가 탐지합니다. 반면, 크기가 작은 고양이는 8 x 8 피처 맵에서 좌우로 길쭉한 디폴트 박스가 탐지합니다. 

Hard negative mining 
디폴트 박스를 매칭하고 나면, 대부분 디폴트 박스는 negative일 겁니다. 전체 디폴트 박스 개수는 상당히 많지만 참 경계 박스와 매칭된 디폴트 박스는 적기 때문이죠. 그러면 positive 훈련 샘플과 negative 훈련 샘플 간 불균형이 심하겠네요. 모든 negative 훈련 샘플을 사용하는 대신, 신뢰도 손실 점수를 기반으로 negative 샘플을 제외합니다. 최종적으로 negative 샘플과 positive 샘플 비율이 3:1 정도가 되게 맞춥니다. 더 빠르고 효과적으로 훈련을 하기 위해서죠.


3. Experimental Results

SSD에서 사용한 기본 네트워크는 VGG-16입니다. 구체적으로 말하면, ILSVRC CLS-LOC 데이터셋에서 사전 훈련된 VGG-16입니다.

3.1. PASCAL VOC 2007

PASCAL VOC 2007 테스트 데이터셋에서 Fast R-CNN, Faster R-CNN과 비교해 SSD 성능을 실험해봤습니다. 세 모델 모두 기본 네트워크로 사전 훈련된 VGG-16을 사용합니다. 이를 PASCAL VOC 2007에서 파인튜닝한 것이죠. 다음 그림은 SSD 구조를 보여줍니다.

SSD구조


그림에서 보다시피 conv4,_3, conv7, con8_2, conv9_2, conv10_2, conv11_2를 활용해 경계 박스 좌표와 객체 클래스 신뢰도를 구합니다. conv4_3, conv10_2, conv11_2에서는 4가지 디폴트 박스만 사용했습니다. 나머지 합성곱 계층에서는 6가지 디폴트 박스를 사용했죠.

훈련 시 학습률 0.001로 40,000번 이터레이션을 수행합니다. 이어서 학습률 0.0001과 0.00001에서 10,000번씩 이터레이션을 더 수행합니다. 다음은 SSD와 Fast R-CNN, Faster R-CNN과 성능을 비교한 표입니다.

PASCAL VOC 2007 테스트 데이터셋 객체 탐지 결과

SSD300은 300 x 300 입력 이미지를 사용한 SSD 모델, SSD512는 512 x 512 입력 이미지를 사용한 SSD 모델을 뜻합니다. SSD300(②)만으로도 Faster R-CNN(①)보다 성능이 좋습니다. (VOC 2007, 2012, MS COCO 데이터를 활용한) SSD512는 mAP 81.6%로 성능이 더 좋습니다. 표에서 알 수 있듯이 데이터가 많을수록, 입력 이미지가 클수록 성능이 좋습니다. 참고로, 각 데이터가 뜻하는 바는 다음과 같습니다.

  • ”07”: VOC 2007 trainval
  • ”07+12”: VOC 2007, VOC2012 trainval
  • ”07+12+COCO”: 먼저 MS COCO trainval35k에서 훈련한 뒤, 07+12에서 파인 튜닝

3.2 Model analysis

SSD를 더 잘 이해하기 위해, 각 요소별로 성능 향상에 얼마나 도움되는지를 실험해봤습니다. 모든 실험에서 (몇몇 설정을 제외하고는) 설정값을 동일하게 해줬습니다. 입력 이미지 크기는 300 x 300으로 잡았습니다. 

각 요소별 SSD 성능에 미치는 영향

Data augmentation is crucial. 
데이터 증강은 SSD 성능 향상에 중요한 요소입니다. Fast R-CNN과 Faster R-CNN은 훈련 시 원본 이미지와 좌우 대칭한 이미지를 사용합니다. SSD에서는 YOLO처럼 더 많은 데이터 증강을 적용했습니다. 위 표가 보여주듯 데이터 증강을 적용하면 mAP가 8.8% 오릅니다. Fast R-CNN과 Faster R-CNN에서는 데이터 증강이 얼마나 효과 있는지 모르지만, SSD에서 만큼 효과가 있진 않을 겁니다. 왜냐하면 Fast R-CNN과 Faster R-CNN은 분류 시 피처 풀링을 하기 때문에 객체 변화에 상대적으로 강건하기 때문입니다.

More default box shapes is better. 
SSD는 디폴트 박스를 6개 사용합니다. 여기서 1/3과 3 비율의 디폴트 박스를 제거하면 성능이 0.6% 떨어집니다. 1/2과 2 비율의 디폴트 박스를 제거하면 2.1%가 더 떨어집니다. 이 결과로 미루어 보아, 다양한 모양의 디폴트 박스를 사용하는 게 성능 향상에 좋다는 사실을 알 수 있습니다.

Multiple output layers at different resolutions is better. 
SSD의 주요 특징은 여러 출력 계층에서 다양한 크기의 디폴트 박스를 사용한다는 점입니다. 이러한 방식의 효과를 알아보려면 출력 계층을 차례로 제거하면서 성능을 비교하면 됩니다. 정확한 비교를 위해, 계층을 하나 제거할 때마다 전체 디폴트 박스 개수는 거의 일정하게 맞췄습니다. 참고로, 총 디폴트 박스 개수는 8,732개입니다. 나머지 계층에 크기가 다른 디폴트 박스를 더 넣으면 됩니다. 매번 디폴트 박스 타일링(tiling)을 최적화하지는 않았습니다.

<NOTE> 타일링(tiling)이란 각 픽셀마다 디폴트 박스를 잘 배열하는 일입니다. 

아래 표는 다양한 출력 계층별 효과를 보여줍니다.

다양한 출력 계층별 효과


계층이 적을수록 mAP가 떨어지네요. resolution이 다른 다양한 출력 계층을 사용할수록 성능이 좋아집니다.

COCO 데이터셋에서 SSD512 모델로 탐지한 결과

3.3 Inference time

SSD 구조상 디폴트 박스가 굉장히 많기 때문에, 추론(inference) 단계에서는 비최댓값 억제(NMS)를 적용합니다. 먼저, 신뢰도 임계값을 0.01로 정해서 많은 경계 박스를 필터링합니다. 그런 다음 IoU 0.45를 기준으로 NMS를 적용합니다. 이미지당 탐지 결과를 상위 200개만 남기죠. 이 단계는 SSD300에서 이미지마다 1.7ms가 걸립니다. 배치 크기를 8로 설정하고, Intel Xeon E5-2667v3@3.20GHz에서 Titan X와 cuDNN v4로 실험한 결과입니다. 다음 표는 SSD, Faster R-CNN, YOLO 간 비교 표입니다.

VOC 2007 테스트 데이터셋 결과

SSD300과 SSD512 모두가 Faster R-CNN보다 속도도 빠르고 mAP도 높습니다. Fast YOLO보다 속도는 느리지만 mAP가 훨씬 높습니다. SSD300이 mAP 70%를 넘으면서 실시간 객체 탐지가 가능한 속도를 보인 최초 모델입니다. 기본 네트워크인 VGG-16에서 전체 순전파 시간의 80%를 차지합니다. 따라서 더 빠른 기본 네트워크를 사용한다면 SSD512도 실시간 탐지가 가능한 수준이 될 것입니다.


4. Conclusions

이 논문에선 SSD를 제안했습니다. 여러 객체 클래스를 탐지할 수 있는 single-shot 객체 탐지기입니다. SSD의 주요 특징은 여러 스케일의 합성곱 계층 피처 맵마다 경계 박스를 예측한다는 점입니다. 피처 맵의 모든 픽셀마다 크기와 가로세로 비율이 다양한 디폴트 박스를 활용해서 말이죠. 이런 특징 덕분에 다양한 크기를 갖는 객체를 효율적으로 탐지할 수 있습니다. 기본 네트워크로 같은 VGG-16을 사용한다고 할 때, 기존 SOTA(state-of-the-art) 객체 탐지 모델보다 SSD가 성능과 속도가 더 우수했습니다. SSD512는 Faster R-CNN보다 3배나 빨랐습니다(PASCAL VOC와 COCO에서 실험한 결과). SSD300은 59 FPS를 보여 YOLO(21 FPS)보다 더 빠릅니다. 성능도 더 좋고요. 성능과 속도를 떠나서, SSD는 간단한 구조로 구성돼 있기 때문에 더 큰 모델 시스템의 구성 요소로 사용될 수도 있습니다. 

0 Comments
댓글쓰기 폼