컴퓨터비전(Computer Vision)

객체탐지 - SSD(Single Shot MultiBox Detector)

zzoming 2023. 11. 17. 03:57

SSD가 등장하게 된 배경 

R-CNN 계열의 2-stage detector은 region propsal와 같은 다양한 view를 모델에 제공하여 높은 정확도를 보여준다.

하지만 region proposal를 추출하고 처리하는 과정에서 오랜 시간이 걸려 detection 속도가 느리다는 단점이 존재한다. 

반면 YOLO v1은 원본 이미지 전체를 통합된 네트워크로 처리하기에 detection 속도가 빠르다.  하지만 grid cell 별로 2개의 bounding box만 선택하여 상대적으로 적은 view를 모델에 제공하여 정확도가 떨어진다. 

 

이처럼 일반적으로 정확도와 detection 속도는 trade-off 관계에 있다. SSD는 다양한 view를 활용하면서 통합된 network 구조를 가진 1-stage detector로 앞서 등장했던 모델들의 한계를 극복하고 장점을 가지고 가고자 등장했다. 


요약 

 

SSD모델은 VGG16을 base network로 사용하고 보조 network(auxiliary network)를 추가한 구조를 가진다. 

두 network를 연결하는 과정에서 fc layer를 conv layer로 대체하면서 detection 속도가 향상된다. 

SSD 모델은 Convolutional Network 중간의 conv layer에서 얻은 feature map을 포함시켜, 총 6개의 서로 다른 scale의 feature map을 예측에 사용한다. 또한, feature map의 각 cell 마다 서로 다른 scale 과 aspect ratio를 가진 bounding box인 default box를 사용하여 객체의 위치를 추정한다. 

 

이렇게 SSD모델은 다양한 scale의 feature map에 다양한 scale과 aspect ratio를 가진 default box를 생성하여 다양한 크기를 가진 객체를 포착한다. 또한, 전체 network가 분리되어 있지 않아 빠른 속도의 detection이 가능하다. 


핵심적인 아이디어 

 

1) Multiscale feature maps 

 

SSD 모델은 YOLO v1 모델과 마찬가지로 하나의 통합된 네트워크로 detection을 수행하는 1-stage detector이다. 

전제 network는 사전학습된 VGG16을 base network로 사용하고, 이후 보조 network를 추가한 구조를 가진다.

 

보조( auxiliary )network는 일반적인 conv layer로 구성되며, base network 후반부에 등장하는 fc layer를 conv layer로 바꿔주며 보조 network와 연결한다. 이 과정에서 fc layer 가 제거되면서 detection 속도가 향상되는 이점이 있다. 

 

SSD 모델의 핵심적인 아이디어는 다양한 scale의 feature map을 사용한다는 점이다.  YOLO v1 모델의 경우 7x7 크기의 feature map 만을 사용하여, 다양한 크기의 객체를 포착하는 것이 어렵다는 단점이 있었다. 이를 해결하기 위해 SSD network 중간에 존재하는 conv layer의 feature map들을 추출하여 detection 시 사용하는 방법을 제안한다. 

 

  1. 입력 이미지의 크기는 300x300이다
  2. 먼저 base network conv4_3 layer에서 38x38x(512) 크기의 feature map을 추출한다.
  3. 그 다음, base network의 conv7 layer에서 19x19x(1024) 크기의 feature map을 추출한다.
  4. 그 다음, auxiliary network의 conv8-2 , conv9_2 , conv10_2 , conv11_2 layer에서 각각 10x10x(512) ,  5x5x(256) , 3x3x(256) , 1x1x(256) 크기의 feature map을 추출한다.  

 위 과정을 통해 총 6개의 scale을 가진 feature map을 얻을 수 있으며, 이를 통해 다양한 scale의 feature map(Multiscale feature maps)을 사용하여 보다 다양한 크기의 객체를 탐지하는 것이 가능해진다. 

 

2) Default boxes 

논문의 저자는 원본 이미지에서 보다 다양한 크기의 객체를 탐지하기 위해 feature map의 각 cell 마다 서로 다른 scale과 aspect ratio(가로세로비)를 가진 Default box를 생성한다. 이는 Faster R-CNN모델에서 사용하는 anchor box와 개념적으로 유사하지만 서로 다른 크기의 feature map에 적용한다는 점에서 차이가 있다고 언급한다. 

 

SSD 모델은 총 6개의 scale의 (38x38 , 19x19 , 10x10 ,5x5 ,3x3 ,1x1)  feature map의 각 cell 마다 default box를 생성한다. 

 

Defaul box의 scale =  $$ s_k $$ 이다. 여기서 $$ s_k $$ 는 원본이미지에 대한 비율을 의미한다. 

예를 들어보자 
원본 이미지의 크기 : 300x300 
s = 0.1 , aspect ratio가 1:1 ⇒ default box의 크기 30x30 ( 300x 0.1 , 300x0.1) 이다

 

각 feature map 별로 적용할 default box의 scale을 구하는 공식은 다음과 같다 

 

s_min과 s_max는 큰 의미는 없고 min, amx를 잡은 다음 그 사이를 m 값에 따라서 적당히 구간을 나누어주는 값이다. 

첫 번째 featue map부터 마지막 feature map 까지 $$ s_k $$는 각각 0.2 , 0.34, 0.48, 0.62, 0.76, 0.9 이다. 

이 값은 각각의 feature map에서 default box의 크기를 계산할 때 입력 이미지의 너비, 높이에 대해서 얼만큼 큰지를 나타내는 값이다.

 

  

위 그림처럼 첫번쨰 feature map에선 입력 이미지의 크기의 0.2 비율의 가진 작은 box를 default box로 놓겠다는 의미이며, 마지막 feature map에서는 0.9와 같이 큰 default box를 설정하겠다는 의미이다. 

 

이제 각각의 default box의 너비와 높이를 계산해야한다. 이 때 우리는 정사각형 뿐만이 아닌 다양한 비율의 default box를 구하고자 한다. 이는 (1 ,2 ,3 ,1/2 ,1/3) 비율 값을 가지고 다음 수식을 통해서 계산된다. 

 

예를 들어 k =3, 즉 3번째 feature map 의 default box들의 width 와 height를 구현해보겠다. 앞서 우리는 scale 값을 구했으며, k=3일때 값은 0.48이다.  주어진 공식에 맞게 계산을 해보자.

 

5개의 비율에 대해 각각 계산을 진행했으며, 논문에서는 여기서 추가적으로 현재 스케일 값 보다 조금 더 큰 정사각형 박스하나를 추가하여 총 6개의 default box의 높이 너비 값을 구한다. 이 값들은 모두 입력이미지의 높이, 너비에 곱해서 사용할 비율의 값이다. 

 

이제 입력이미지에서 default box가 위치할 중심점을 구해보자. 이에 대한 수식은 아래와 같다. 

 

$$ f_k $$는 feature map의 가로 세로 크기이다. 즉 , mxn 크기의 feature map의 중심점을 구하는 것으로 1x1 크기의 feature map은 0.5 , 0.5가 될 것이다.  $$ f_k $$가 25일 때, 아래와 같은 결과를 얻을 수 있다. 

 

이제 모든 작업이 끝났다. 구해둔 중심점 좌표들에 원래의 입력 이미지 크기를 곱해서 중심점을 구하고, 각각의 중심점 마다 default box를 그려주면 된다. 

 

3) Predicitions

 

 

 

총 서로 다른 scale의 feature map 에 맞는 default box를 적용한 경우 총 default box 수는 8732개 이다. 

최종 예측을 위해 서로 다른 scale의 feature map을 추출한 후 3x3(stride = 1 , padding = 1) conv 연산을 적용한다 

이때 default box의 수를 k ,  에측하려는 class의 수를 c 라고 할 떄, ouput feature map의 channel 수는 k(4+c)가 되도록 설계한다. 

⇒ 이는 각 feature map의 cell이 k 개의 default box를 생성하고 각 box마다 4개의 offset 과 class score을 예측한다는 것을 의미한다. 

 

 

SSD 모델은 예측하려는 class의 수가 20개인 PASCAL VOC 데이터 셋을 사용해 학습을 진행한다. 

따라서 class의 수는 배경을 포함하여 c= 21이다.

 예를 들어 5x5(x256) 크기의 feature map을 추출할 경우 k = 6 , c = 21 이므로 conv 연산을 적용한 ouput feature map의 크기는  5x5x6x( 4 + 21)  이다

4) Matching strategy 

 

학습을 진행할 떄 default box의 학습 대상을 지정하기 위해 어떤 default box가 어떤 ground truth box와 대응하는지 결정해야 한다. 

 

일반적으로 이미지 내에서 대부분이 배경에 해당하는 box가 많기 때문에 negative sample 수가 positive sample 보다 훨씬 많다. 이로 인해 클래스 불균형 문제가 발생하여 원활한 학습이 진행되지 않는다. 이러한 문제를 해결하기 위해 hard negative mining 기법을 사용한다. 

모델이 잘못 예측하는 '부정적인' 샘플 중에서 특히 모델이 학습하기 어려운 샘플을 선택하여 추가 학습을 진행하는 기법 

SSD에서 positive 와 negative sample의 비율은 1:3 이 되도록 한다. 


Training SSD 

 

1) 전체 Network 구성하기 (base network + auxiliary network) 

  • 사전학습된 VGG16 모델을 불러와 마지막 2개의 fc layer를 conv layer로 대체
  • 이후 output feature map의 크기가 1x1이 되도록 auxiliary network 설계 

2) 이미지 입력 및 서로 다른 scale의 feature map 얻기

  • Input : 300x300 sized image
  • Process : feature map extraction
  • Ouput 
    • conv4_3  : 38x38(x512) sized feature map
    • conv7 :19x19(x1024) sized feature map
    • conv8_2  :10x10(x512) sized feature map
    • conv9_2 : 5x5(x256) sized feature map
    • conv10_2  : 3x3(x256) sized feature map
    • conv11_2  :1x1(x256) sized feature map

3) 서로 다른 scale의 feature map에 conv 연산 적용하기 

 

앞의 과정에서 얻은 서로 다른 scale의 feature map에 3x3 conv (stride = 1 , padding= 1) 연산 적용하기 

  • Input : 6 feature maps
  • Process : 3x3 conv(stride=1, padding=1)
  • Output 
    • 38x38(x4x(21+4)) sized feature map
    • 19x19(x6x(21+4)) sized feature map
    • 10x10(x6x(21+4)) sized feature map
    • 5x5(x6x(21+4)) sized feature map
    • 3x3(x6x(21+4)) sized feature map
    • 1x1(x4x(21+4)) sized feature map

4) 전체 feature map 병합 

 

앞서 3번 과정에서 얻은 모든 feature map을 8732 x (21 +4) 크기로 병합한다. 이를 통해 default box 별로 bounding  box offset 값과 class score을 얻을 수 있다. 

  • Input : 6 feature maps
  • Process : merge feature maps
  • Output : 8732 x (21+4) sized feature map 

5) loss function 을 통해 SSD network 학습시키기 

  • 앞서 얻은 feature map과 ground truth 정보를 활용하여 localization loss를 계산
  • 이후 negative sample에 대하여 cross entropy loss를 구한 후 loss에 따라 내림차순 정렬 
  • negative sample에서 loss가 높은 순으로 positive의 3배만큼 추출 
  • 이러한 hard negative mining 과정을 통해 얻은 hard negative sample 과 positive sample을 사용하여 confidence loss를 계산
  • localization loss와 confidence loss를 더해 최종 loss를 구한 후 backward pass를 수행하여 network 학습 

Detection 

SSD 모델은 detection 시, 마지막 예측에 대하여 Non Maximum suppression을 수행한다.

이를 통해 겹치는 default box를 적절하게 제거하여 정확도를 높인다. 


 

📝참고자료 

https://herbwood.tistory.com/15

 

SSD 논문(SSD: Single Shot MultiBox Detector) 리뷰

이번 포스팅에서는 SSD 논문(SSD: Single Shot MultiBox Detector)을 읽고 정리해봤습니다. RCNN 계열의 2-stage detector는 region proposals와 같은 다양한 view를 모델에 제공하여 높은 정확도를 보여주고 있습니다.

herbwood.tistory.com

https://blog.firstpenguine.school/20

 

갈아먹는 Object Detection [6] SSD: SIngle Shot Multibox Detector

지난 글 갈아먹는 Object Detection [1] R-CNN 갈아먹는 Object Detection [2] Spatial Pyramid Pooling Network 갈아먹는 Object Detection [3] Fast R-CNN 갈아먹는 Object Detection [4] Faster R-CNN 갈아먹는 Object Detection [5] Yolo:You Only

blog.firstpenguine.school

https://taeu.github.io/paper/deeplearning-paper-ssd/

 

[논문] SSD: Single Shot Multibox Detector 분석

SSD:Single Shot Multibox Detector

taeu.github.io