안녕하세요~


이번글에서는 SSD (Single Shot MultiBox Detector)라는 object detection 모델에 대해서 설명해보도록 할거에요.





<1. Motivation>


SSD는 사실 YOLO V1과 비슷한시기에 나왔어요. YOLO V1에서 grid cell 방식의 region proposal 방식이 Faster RCNN보다 훨씬 높은 FPS를 기록했다고 언급했었죠? 하지만 그에 비해 mAP는 너무 낮게 나와 고민을 안겨주었어요.




SSD는 기존 YOLO V1의 grid cell 방식의 region proposal 방식을 그대로 적용시키면서 더 좋은 mAP, FPS 성능을 기록할 수 없을까 하다가 만들어진 object detection 모델이에요.








<2. Architecture>


1) Modified VGG Net


먼저 SSD는 VGG Net을 이용해 feature extraction하려고 했어요. 하지만 VGG Net을 그대로 이용하지 않고 SSD 모델에 맞게 수정해주었어요. 아래그림에서 보면 어떻게 수정되었는지 직관적으로 이해하기 쉬우실 거에요.






2)  Remove FC layer


앞서 YOLO V2에서 FC layer를 제거시켜서 얻은 효과가 2가지였죠? 첫 번째는 object detection 모델에서 입력 이미지를 고정시키지 않아도 되는거였어요. 그리고 두 번째는 parameters (가중치) 개수의 급격한 감소로 인해 빨라지는 속도였죠.


본래 YOLO V2는 SSD 다음에 나온 모델이기 때문에 YOLO V2에서 FC layer를 제거시킨 아이디어는 SSD 모델에서 얻었을 가능성이 커요.








3) Multi-map scale feature maps


아래 SSD 모델을 보시면 detection을 하기위해 여러 feature map들이 동원되는걸 보실 수 있을거에요. 




SSD 역시 grid cell 방식으로 운영이 되는데, YOLO V1처럼 하나의 grid cell에서 고정된 개수의 default boxes (or anchor boxes)를 사용하게되요. 그러다 보니 학습을 끝낸 anchor boxes (size, aspect ratio가 정해짐) 가 각기 다른 output feature map에 적용되었을때 검출할 수 있는 객체가 다양해져요. 


예를들어 아래와 같이 하나의 grid cell에서 생성하는 anchor boxes의 크기가 동일하다면, output feature map이 작은 크기에서는 좀 더 큰 객체를 더 잘 탐지할 수 있고, 더 큰 output feature map size에서는 작은 물체를 검출할 수 있을 가능성이 커집니다. 그래서 다양한 크기의 feature map을 detection하기 위해 사용한다면 더 좋은 성능을 기대할 수 있게 되는것이죠.








4) Detection


앞서 SSD의 detection 방식은 다양한 output feature map size를 이용하는것이었어요. 이렇게 다양한 output feature map이 최종단계에서 어떻게 결합되는건지 아래 그림을 보시면 이해하기 수월하실 거에요.



각 feature map에서 anchor boxes 개수를 다르게 설정하는 이유에 대한 명확한 실명이 있다기 보다 논문에서 아래와 같이 표현한 부분에서 추정을 했는데요.


"Allowing different default box shapes in several feature maps let us efficiently discretize the space of possible output box shapes"


아마 몇몇 feature map에서 empirical 하게 box 개수들에 대해서 실험을 해봤던거 같아요. 그래서 몇몇 feature map에서는 다른 different default box shapes를 사용했다고 하는데, anchor boxes 개수가 6개인 곳은 기존 anchor boxes 4개와 2개의 다른 anchor boxes 모양이 추가됩니다.







5) NMS


위와 같이 8732x(Classes+4) features를 뽑게되면 아래와 같은 그림으로 요약할 수 있는데요. 이렇게 되면 각각의 output feature map에서 뽑은 anchor boxes 때문에 최종 단계에서 한 객체에 대해 많은 bounding boxes가 생성되게 되요. 


<사진1>


이렇게 많은 anchor boxes 중에서 NMS를 적용하여 가장 높은 class confidence score를 갖는 anchor box를 선택하게 됩니다 (NMS에 대한 설명은 YOLO V1에서 자세히 설명드린바 있으니 여기서는 넘어가도록 하겠습니다).


<사진2>


지금까지의 과정을 진행하다보면 아래와 같은 최종 SSD 모델을 보실 수 있으실거에요.









<3. Training>


전반적인 학습에 대해서는 모든 object detection이 동일하기 때문에 여기에서는 localization 학습이 어떻게 되는지 위주로 살펴보도록 하겠습니다.


1) Shape of anchor boxes


1-1) scale factor


Anchor boxes를 생성시킬 때, grid cell과 크기를 같게 하는 것이 간단하지만 대부분의 물체는 아래와 같이 aspect ratio가 다릅니다. 그렇기 때문에 aspect ratio를 다르게 하는 anchor boxes들을 생성해주어야 하는데 이때 aspect ratio의 기준이 되는 크기 먼저 선정을 해주어야 해요. 예를들어, aspect ratio=2 라고 했을 때, 그기가 4:2를 말하는건지, 3:1.5를 말하는건지 모르기 때문이에요. 그래서 scale을 2라고 설정한 aspect ratio=2라고 한다면 "4:2"의 크기의 anchor boxes를 생각해 볼 수 있겠죠.


<사진3>


SSD는 detection을 위해 6개의 feature map을 사용하는데요. 이때 각 feature map 마다 grid cell 크기가 다릅니다. 그래서 6개의 output feature map에 따라서 scale factor를 다르게 주어야 하는데요.



아래와 같은 수식을 이용하면 output feature map에 따라서 적절한 scale factor값이 도출됩니다. k=1일때 Smin 값이 나오고, k=6일때 Smax 값이 나오기 때문에 위의 그림과 연결시켜 이해하실 수 있을것 같습니다. (highest layer=⑥/ lowest layer=①)




1-2) width and height


Aspect ratio의 기준이되는 scale factor를 결정했으면, aspect ratio에 따라 anchor boxes의 width height을 결정해주어야 해요. SSD에서는 아래와같은 aspect ration(=a)를 설정하고 scale factor에 따라 아래와 같은 식을 통해 width, height을 결정해 줍니다.




지금까지 배운 식들을 이용해서 anchor(default) boxes들의 모양을 결정합니다. 그렇다면 이렇게 결정되는 anchor boxes들은 어떻게 학습하게 될까요?






2) Bounding Box regression


2-1) Select candidate anchor boxes by using Jaccard overlap


SSD는 각각의 다른 output feature map마다 anchor boxes를 생성하게되요. 예를들어, train 단계에서는 38x38x4 개의 anchor boxes가 생성되는데요. 이렇게 무수히 생성되는 anchor boxes 중에서 우리가 학습에 이용하고 싶은 anchor boxes는 ground truth와 유사한 anchor boxes에요. 



그렇기 때문에 여러 anchor boxes 중 ground truth와 유사한 IoU를 갖는 anchor boxes들에 대해서만 학습을 진행하게 되는데요. 이러한 방식을 위해서 jaccard overlap 방식을 사용해요. (SSD 논문에서는 threshold=0.5로 설정했습니다)


만약 이러한 조건이 없다면 무수한 anchor boxes에 대해서 학습할 것이고 negative examples, positive examples 비율도 맞지않고, 학습시간도 굉장히 오래걸리기 때문에 학습자체가 매끄럽게 되지 않을거에요.


<사진4. jaccard overlap>


추가적으로 jaccard overlap이 0.5 이상이라고 하더라도 분명 negative example이 존재할 수 있을거에요. 아래그림을 예를 들면 하나의 cell에 생성된 IoU가 0.5 이상인 anchor boxes가 2개 인데요. 2개를 비교했을 때 상대적으로 한 anchor box의 이미지는 negative example이라 할 수 있고, 다른 한 이미지는 positive example이라 할 수 있을거에요.

<사진5>


SSD에서는 jaccard overlap을 통해 선별된 anchor boxes들 중에서 가장 높은 confidence loss를 기준으로 positive example과 negative example의 비율을 3:1로 나누게 됩니다. (Confidence loss는 아래에서 설명할거에요~)





2-2) bounding box regression


먼저 bounding box 좌표에 대해서 학습하는 방식에 대해서 설명드릴게요.



아래식은 위의 notation만 이해하고 있으면 어렵지않아요. 아래 식들은 Faster RCNN에서의 bounding box regression 식과 대조해보면 급방 이해하실 수 있으실거에요.



또한 선별된 default(anchor) box와 class의 관계를 기반으로 아래와 같은 confidence loss를 도출하게 됩니다. (Pos: positive examples, Neg: Negative examples)



이렇게 confidence score와 bounding box 좌표식을 이용해 bounding box regression 식을 만들게 됩니다.






<4. Result>









[논문 래퍼런스]

SSD: Single Shot MultiBox Detector/ wei. L. et al/ 2016/ https://arxiv.org/pdf/1512.02325.pdf


[글 래퍼런스]

https://m.blog.naver.com/sogangori/221007697796


[사진 래퍼런스]

사진1

https://m.blog.naver.com/sogangori/221007697796

사진2

https://twitter.com/KirellBenzi/status/1039521626025541632

사진3

https://www.shutterstock.com/fr/video/clip-1013815781-people-animation-walk-video-transparent-background

https://geekgirljoy.wordpress.com/2017/10/02/ancestor-simulations-elementary-cellular-automata/

https://www.dreamstime.com/stock-photography-crocodile-cartoon-illustration-image34607912

사진4

https://medium.com/@smallfishbigsea/understand-ssd-and-implement-your-own-caa3232cd6ad

사진5

https://mypetlife.co.kr/wiki/%EA%B3%A0%EC%96%91%EC%9D%B4-%EB%94%B8%EA%B8%B0-%EB%A8%B9%EC%96%B4%EB%8F%84-%EB%90%98%EB%82%98%EC%9A%94/

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

14. Object Detection Trend (2019~2021.08)  (7) 2021.09.12
13. YOLO V3  (0) 2021.08.26
10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06

+ Recent posts