SSD는 YOLO v1에서 grid를 사용해서 생기는 단점을 해결할 수 있는 아래와 같은 몇 가지 테크닉을 제안
Image Pyramid
Pre-defined Anchor Box
Image Pyramid는 ImageNet으로 사전학습된 VGG16을 사용
VGG에서 pooling layer를 거친 block은 하나의 image feature로 사용 가능
YOLO에서 7x7 크기의 feature map 하나만을 사용했다면,
SSD는 38x38, 19x19, 10x10, 5x5, 3x3 등의 다양한 크기의 feature map을 사용
각 feature map은 YOLO의 관점에서 보면 원본 이미지에서 grid 크기를 다르게 하는 효과
따라서 5 x 5 크기의 feature map에서 grid가 너무 커서 small object를 못찾는 문제를 38 x 38 크기의 feature map에서 찾을 수 있는 단서를 마련
Q. Image feature pyramid의 단점?
YOLO와 비교하였을 때 최소 feature map의 개수만큼 계산량이 많다. 38 x 38 크기의 feature map은 box를 계산하기에는 충분히 깊지 않은 network
YOLO v1의 두번째 단점은 box 정보 (x, y, w, h)를 예측하기 위한 seed 정보가 없기 때문에 넓은 bbox 분포를 모두 학습할 수 없었다는 점(이로 인한 성능 손실)
따라서 Faster R-CNN 등 에서 사용하는 anchor를 적용할 필요
만약 개가 등장하는 Bounding box가 존재한다면, 그 bounding box만의 x, y, w, h 특성이 존재하기 때문에 pre-defined된 box의 x, y, w, h를 refinement하는 layer를 추가하는 것이 이득이었습니다. 이 anchor box를 SSD에서는 Default box라고 부릅니다.
SSD의 Multi Scale Feature Map과 Anchor Box 적용
(a)는 이미지 원본파일 GT(Ground Truth) 데이터셋
(b)는 VGG Backbone에 가까운 Fine-Grained feature map 즉, 8x8 grid에서 각각의 grid에 3개 anchor box를 적용 고양이는 크기가 작기 때문에 (a)의 고양이는 8x8 feature map의 grid 중 1개의 anchor box로부터 학습
(c)에서 개의 경우 크고 세로로 긴 경향을 보이기 때문에 receptive field가 넓은 4x4 feature map에서 Detection
Object의 크기 차이로 인해서 각각(고양이 & 개)는 다른 FeatureMap에서 Detaction된다.
Fine Grained란?
"결이 거친, 조잡한"의 뜻을 가진 Coarse-grained와 반대되는 개념으로, 세밀하다는 뜻을 가지고 있습니다. 참고로 fine grained classification은 세밀하게 분류하는 것으로, 상대적으로 비슷한 특징을 가진 class를 분류하는 것입니다.
Default box를 위한 scale
Smin을 0.2, Smax를 0.9라고 하고, 위의 식에 넣으면 FeatureMap당 서로 다른 6개의 s값(scale값)
여기서 aspect retio를 {1,2,3,1/2,1/3}로 설정 Default box를 width는 sixr
r=1 인 경우 si = si∗sl+1
Default box의 cx, cy는 l번째 feature map의 크기를 나눠 사용
대략 예측되는 상자가 정사각형이나 가로로 조금 길쭉한 상자, 세로로 조금 길쭉한 상자이기 때문에 2:3으로 임의로 정해도 학습
특이한 경우
가로 방향의 작은 오브젝트는 위의 비율로 정하면 threshold를 0.5로 했을 때 미학습
따라서 학습할 이미지에 따라서 aspect ration를 조정필요
임의로 정하는 것은 비효율적이므로 KNN과 같은 알고리즘을 활용하면 좋은 결과