SSD Network

2021. 1. 8. 22:08Computer vision ღ'ᴗ'ღ

728x90

 

※ 본 글은 <딥러닝 컴퓨터비전 완벽가이드> 강의 및 여러 자료를 참고하여 쓰여진 글입니다. ※

github: github.com/chaeyeongyoon/ComputerVision_Study

 

chaeyeongyoon/ComputerVision_Study

Contribute to chaeyeongyoon/ComputerVision_Study development by creating an account on GitHub.

github.com

 

SSD는 기본적으로 anchor box기반으로, 각 feature map에서 anchor box가 classification 과 detection을 동시에 수행합니다.

SSD의 주요 구성 요소는

1. Multi Scale Feature Layer

2. Default Anchor Box ★

두가지 입니다.

● Multi Scale Feature layer

Multi scale feature map은 image pyramid와 비슷한 원리입니다.

sliding window 기법을 사용할 때 다음 그림과 같이 이미지의 크기에 따라 detect되는 객체가 달랐습니다.

Sliding Window / Image Pyramid

이와 비슷하게 서로 다른 크기의 feature map을 기반으로 object detection을 수행합니다.

conv layer을 지나며 feature map의 크기는 점점 작아지고, feature map이 작아질수록 큰 object를 detect하게 됩니다.

Faster RCNN에서의 RPN과 boundary box regression을 하나로 합쳐 Network로 만들었다고 할 수 있습니다.

● (Default) Anchor Box

anchor box

label과 bounding box(Ground Truth)가 주어진 이미지를 넣어주고 conv layer을 통과한 다양한 size의 feature map에 각 point마다 anchor box를 할당합니다(보통 각 9개).

개별 anchor box가 anchor box와 겹치는 feature map 영역의 object class 분류(softmax값)와 GT box 예측할 수 있게 수정된 좌표의 정보를 가질 수 있도록 학습합니다.

다시한번 이 이미지를 살펴보면 

classifier 1: 3x3x(4x(classes+4)) 에서 classes + 4는 각 anchor box가 채워야하는 정보입니다(softmax값과 수정좌표값) 거기에 곱해준 4는 anchor box의 개수입니다.(PASCAL VOC dataset을 이용했다면 classes=20 + 1(BG) 겠죠?)

다른 classifier도 anchor box개수만 다를뿐 동일합니다.

 

이 정보들을 다 합치면 class 당 8732개를 detection하게됩니다. 이후에 Non-Maximum Suppression으로 각 object별 가장 높은 것만 남겨줍니다.

위의 고양이 강아지 그림에서 빨간 박스와 같이 matching된 anchor box들이 저런 형태의 feature map이 들어오면 개다/고양이다 이렇게 classification할 수 있게 학습됩니다. loc의 값이 최소가 되도록 계속 bounding box regression을 수행합니다.

 

※ SSD Training

<matching 전략: GT Bounding box와 겹치는 IOU가 0.5이상인 default anchor box들의 classification과 bounding box regression을 최적화 학습을 수행합니다.>

SSD에서의 loss값은 다음과 같습니다 (loss에 대한 자세한 설명은 생략하겠습니다.)

SSD의 Loss 출처:https://taeu.github.io/paper/deeplearning-paper-ssd/

 

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

그러나 One stage 방법은 작은 object를 잘 detection하지 못하는 단점이 있습니다.

이를 개선하기 위해 Feature pyramid기법을 쓴 것이지만 특히 SSD가 작은 object를 잘 detection하지 못합니다.

(Retina Net이 이 단점을 많이 개선하였습니다. 추후 소개하겠습니다.)

 

그래서 SSD는 augmentation을 중요시하고 이를 통해 개선을 노력하였습니다.

매우 특이한 방법으로 augmentation을 수행하였는데, 다음과 같습니다.

  1. GT이미지와 IOU가 0.1, 0.3, 0.5, 0.7, 0.9가 되도록 특정 object의 image를 잘라냄
  2. 잘라낸 이미지를 randomly sampling
  3. 잘라낸 sample이미지를 0.1~1사이 크기로, aspect ratio는 0.5~2사이로 크기를 맞춘다.
  4. 개별 sample image를 다시 300x300으로 고정하고 그 중 50%는 horizontal flip해준다.

다음 표는 augmentation의한 object detetion 성능 변화를 나타낸 것 입니다.

위가 augmentation이전, 아래가 augmentation이후  object사이즈별 성능입니다.

(github.com/opencv/opencv/wiki/TensorFlow-Object-Detection-API 에서 pretrained된 weight 및 opencv위한 config 파일 받아 실습을 진행할 수 있습니다.)

728x90

'Computer vision ღ'ᴗ'ღ' 카테고리의 다른 글

keras-yolo3 opensource package  (0) 2021.01.22
YOLO  (0) 2021.01.09
Fast R-CNN, Faster R-CNN  (0) 2021.01.03
SPPNet  (0) 2021.01.03
R-CNN(Regions with CNN)  (0) 2021.01.03