SSD
R-CNN 계열의 2 stage detector는 region proposals와 같은 다양한 시각을 모델에 제공하여 높은 정확도를 제공합니다. 하지만, region proposals을 사용하여 물체가 있을 법한 위치를 찾아내고 CNN을 통과하여 feature extraction 하는 과정은 시간이 많이 소비되어 느리다는 큰 단점을 가지고 있습니다.
반면, YOLO v1은 원본 이미지 전체를 통합된 네트워크로 처리하기 때문에 처리 속도가 매우 빠르다는 장점을 가지고 있지만, 각 grid 별로 2개의 bounding box만 선택하여 상대적으로 적은 시각을 제공하기 때문에 정확도가 떨어지는 단점을 가지고 있습니다.
이처럼 일반적으로 정확도와 속도는 trade-off 관계에 있지만, SSD에서는 다양한 시각을 활용하면서 1 stage detector 구조를 가져 높은 정확도와 빠른 처리속도를 가진 구조를 소개합니다.
본 논문의 저자들은 자신들이 기여한 내용을 다음과 같이 정리했습니다.
- 기존 SOTA(state-of-the-art) single shot detector인 YOLO 보다 빠르고 정확한 SSD를 개발했습니다.
- SSD의 핵심은 고정된 경계 박스(anchor box)들을 활용해 클래스 레이블과 경계 박스 좌표를 예측하는 것 입니다.
- 정확도를 높이기 위해 다양한 스케일의 feature map에서 여러 스케일로 예측을 합니다.
- 이러한 설계 덕분에 end-to-end 방식으로 간단히 훈련이 가능한 구조입니다. 게다가 입력 이미지의 해상도가 낮더라도 높은 정확도를 보입니다.
Architecture
Multi-scale feature maps for detection
SSD 모델은 pretrained된 VGG16을 base network로 사용하고 보조 auxiliary network(extra feature layers)를 추가한 구조를 가지고 있습니다. VGG16 말단의 FC layer를 Conv Layer로 변환하여 연결이 가능하고, 모든 구조를 합성곱 계층으로 구성합니다.
하지만, SSD 모델의 핵심적인 아이디어는 다양한 scale의 feature map을 사용한다는 점입니다. Convolutional Network 중간의 Conv Layer에서 얻은 feature map을 포함시켜, 총 6개의 서로 다른 scale의 feature map을 예측에 사용합니다. 이를 통해 다양한 scale의 feature map을 사용하여 보다 다양한 크기의 객체를 탐지하는 것이 가능해집니다.
Default boxes
논문의 저자는 원본 이미지에서 다양한 크기의 객체를 탐지하기 위해 feature map의 각 cell 마다 서로 다른 scale과 aspect ratio(가로세로비)를 가진 Default box를 생성합니다. Faster R-CNN의 anchor box와 비슷한 개념적으로 유사하지만, 서로 다른 크기의 feature map을 적용한다는 점에서 차이가 있다고 논문의 저자는 언급합니다. SSD 모델은 38x38, 19x19, 10x10, 5x5, 3x3, 1x1 총 6개 scale을 가진 feature map의 각 cell 마다 default box를 생성합니다.
저자는 각 영역마다 가로와 세로 비율이 \(a_r \in [1, 2, 3, \frac{1}{2}, \frac{1}{3}] \)인 5개의 default box에 더하여, 비율이 1인 box의 경우 스케일이 더 작은 \(s^{'}_{k} = \sqrt{s_{k} s_{k_1}} \) box를 하나 더 추가하여 총 6개의 default box들을 적용하였습니다.
\(k\)번째 feature map에 적용될 default box의 가로 길이 \(w^{a}_{k} = s_k \sqrt{a_r}\) 와 세로 길이 \(h^{a}_{k} = s_k / \sqrt{a_r}\)를 정의하는 스케일 \(s_k\)의 공식은 다음과 같이 정의됩니다.
$$ s_k = s_{min} + \frac{{s_{max} + s_{min}}}{ {m-1} } (k-1), k \in [1,m] $$
이때, \(m\)은 사용할 feature map의 개수로 논문에서는 6이며, \(s_{min} = 0.2\), \(s_{max} = 0.9\) 입니다.
Prediction by Convolutional Predictor
첫 번째 38x38과 마지막 1x1의 feature map은 총 4개의 feault box를 적용하고, 나머지 4개의 feature map은 6개의 default box를 사용합니다. 따라서 총 feault box의 개수는 8732(=38x38x4+19x19x6+10x10x6+5x5x6+3x3x6+1x1x4)개 입니다.
최종 예측을 위해 신경망에서 추출한 \(m\)개의 feature map에 대해 3x3, stride=1, padding=1 의 합성곱 연산을 수행합니다.
이때, defalut box의 개수 \(k\)와 예측하려는 클래스 개수 \(c\)이면, output feature map의 channel 수는 \(k(4+c)\)가 되도록 합니다. 이는 각 feature map의 cell이 \(k\)개의 default box를 생성하고 각 box 마다 4개의 offset과 class score를 예측한다는 것을 의미합니다.
Matching Ground Truth box for Training
다음은 Ground Truth Box와 Predict Box를 매칭하는 작업을 수행합니다.
한 객체에 대해 여러 개의 default box가 예측 bounding box를 만들었을 것인데, 이 box들 중 GT와의 IoU가 0.5 이상인 상자들을 모두 positive로 매칭, 나머지를 negative로 매칭합니다.
일반적으로 이미지 내에서 배경에 해당하는 box가 많기 때문에 negative sample의 수가 positive sample의 수보다 훨씬 많습니다. 이로 인해 class invariance 문제가 발생합니다. 논문 저자들은 이를 해결하기 위해 confidence loss를 가진 sample을 추가하는 Hard Negative Mining을 수행합니다. 이 때 positive/negative sample의 비율은 1:3이 되도록 합니다.
Loss Function
SSD 모델의 loss function은 confidence loss인 \(L_{conf}\)와 localization loss인 \(L_{loc}\)의 합으로 구성되어 있습니다. \(\alpha\)는 두 loss 사이의 가중치를 조절하는 balancing parameter로 디폴트 값으로 1을 사용합니다. \(N\)은 ground truth box와 매칭된 defalut box의 수 입니다.
localization loss 는 Faster R-CNN 모델과 마찬가지로 default box의 중심 좌표 (cx, cy)와 너비와 높이 (w, h)를 사용하여 smooth L1 loss를 통해 구합니다. 여기서 \(l\)은 예측한 box의 파라미터(=좌표), \(g\)는 ground truth box의 파라미터(=좌표)를 의미합니다. \(x^{k}_{ij}\)는 \(i\)번째 default box와 class가 \(k\)인 \(j\)번째 ground truth box 와의 매칭 여부를 알려주는 indicator parameter로, 매칭될 경우 1, 그렇지 않을 경우 0을 가집니다.
confidence loss는 모든 class에 대한 loss를 softmax loss를 통해 계산합니다.
Training SSD
1. 전체 Network 구성하기 (base network + auxiliary network)
학습을 위해 base network와 auxiliary network를 합쳐 전체 네트워크를 구성합니다. pre-trained 된 VGG16 모델을 불러와 마지막 2개의 fc layer를 conv layer로 대체합니다. 이후 최종 output feature map의 크기가 1x1이 되도록 auxiliary network를 설계합니다.
2. 이미지 입력 및 서로 다른 scale의 feature map 얻기
SSD network에 300x300 크기의 이미지를 입력합니다. 이후 전체 network 구간 중 conv4_3, conv7, conv8_2, conv9_2, conv10_2, conv11_2 layer에서 feature를 추출합니다.
3. 서로 다른 scale의 feature map에 convolution 연산 적용하기
앞의 과정에서 얻은 서로 다른 scale의 feature map에 3x3 conv(stride=1, padding=1) 연산을 적용합니다. 이 때 각 feature map 마다 서로 다른 수의 default box를 사용함에 주의해야 합니다.
4. 전체 feature map 병합하기
3번 과정에서 얻은 모든 feature map을 8732x(21+4) 크기로 병합합니다. 이를 통해 default box 별로 bounding box offset 값과 class score를 파악할 수 있습니다.
5. loss function을 통해 SSD network 학습시키기
위에서 얻은 feature map과 ground truth 정보를 활용하여 localization loss를 계산합니다. 이후 netgative sample에 대해 Cross Entropy Loss를 구한 후 loss에 따라 내림차순으로 정렬합니다. 그 다음 negative sample에서 loss가 높은 순으로 positive sample의 3배만큼 수를 추출합니다. 이러한 hard negative mining 과정을 통해 얻은 negative sample과 positive sample을 사용하여 confidence loss를 계산합니다. 이후 localization loss와 confidence loss를 더해 최종 loss를 구한 후 역전파를 수행하여 network를 학습합니다.
Detection
SSD 모델은 detection 시, 마지막 예측에 대하여 Non Maximum Suppression(NMS)를 수행합니다. 이를 통해 겹치는 defalut box를 적절하게 제거하여 정확도를 높혔습니다.
SSD 모델은 다양한 scale의 feature map에 다양한 scale과 aspect ratio를 가진 default box를 생성하여 다양한 크기를 가진 객체를 포착했습니다. 또한 전체 network가 분리되어 있지 않아 빠른 속도의 detection이 가능합니다.
하지만 여전히 매우 작은 객체 탐지에 상대적으로 약하고, default box 설계에 따라 성능이 크게 영향을 받는다는 단점을 가지고 있습니다.
참고
[1] https://arxiv.org/pdf/1512.02325
[2] https://herbwood.tistory.com/15