이번 포스트에서는 YOLO와 비슷한 계열이며, 많이 활용되는 모델 중 하나인 SSD에 대해 다뤄보고자 합니다.
우선, SSD에 대한 논문은 다음과 같습니다.
SSD는 Single Shot Detector를 의미하며, 1-stage Detector 중 하나로, 빠른 속도와 비교적 높은 정확도를 장점으로 갖는 YOLO와 비슷하게 많이 사용되는 Model입니다. SSD의 알고리즘을 한 문장으로 정리하면 다음과 같습니다.
Multiple Featrue Map ⇒ 각 Feature Map(Output Map)에서 다른 비율과 스케일로 Default box를 생성하고 모델을 통해 계산된 좌표와 Class 값에 Default box를 활용해 최종 Bounding box를 생성한다.
이제 이러한 SSD에 대해 자세히 알아보도록 하겠습니다.
Model
Image Detection의 목적은 어떤 Image 자료가 있으면 그 이미지 안에 들어 있는 Object들을 Detect 한다는 것입니다. Detect 한다는 의미는 사물들의 위치와 사물이 이미지 내, 어디 있는지 나타내는 것을 의미하기에 그 사물이 어떤 사물 인지에 대한 정보와 더불어 사물들의 위치 정보, 사물의 크기까지 예측해야 합니다. 따라서 Image Detection의 기본적인 Input은 Image, Output은 이미지 안에 있는 사물들이 어떤 Class인지 나타내는 Class 점수와 그 사물의 Offset(= x, y, w, h)입니다. SSD Model의 전반적인 구조는 다음과 같습니다.
이를 좀 더 세분화하여 설명해보도록 하겠습니다. 우선, SSD는 저해상도에서도 잘 동작되기에 300x300의 Input Image를 기준으로 설명하도록 하겠습니다.
Input Image를 기본적으로 처리할 때는 VGG-16 Model을 가져와 Conv4_3까지 적용하는 것을 Base Network로 두고 처리하면 300x300x3이 38x38x512로 바뀌게 됩니다.
이후, 다음과 같은 과정을 수행합니다.
Multiple Feature Maps에 해당하는 부분으로, 38x37, 19x19, 10x10, 3x3, 1x1에 해당되는 Feature Map은 Output과 직결된 Feature Map입니다. 각 Feature Map에서 적절한 Conv 연산을 통해 우리가 예측하고자 하는 Bounding Box의 Class 점수와 Offset을 얻게 됩니다. 이때 Conv Filter Size는 3x3x3x((Bounding Box 개수) x (Class Score + Offset))이고 자세히 나와 있진 않지만 Stride=1, Padding은 1일 것으로 추정됩니다. 이 6개의 Feature Map 각각에서 예측된 Bounding Box의 총합은 8732입니다.
8732개의 Bounding Box의 Output이 나온다고 해서 이를 전부 고려하진 않습니다. 각 Feature Map당 다른 Scale을 적용해 Default Box간의 IOU를 계산한 다음 미리 0.5 이상이 되는 Box들만 1로 고려 대상에 포함시키고 나머지는 0으로 만들어 위와 같이 3개의 Feature Map에서만 Box가 Detect 될 수 있습니다. 그리고 NMS를 통해 최종 Detect 된 결과를 산출하며 해당 부분은 위 이미지의 오른쪽 위 그림과 같습니다.
키워드 별로 정리한 내용은 다음과 같습니다.
- Multi-scale Feature Maps for Detection
38x38, 19x19, 10x10, 5x5, 3x3, 1x1 의 Feature Map들을 의미합니다. Yolo는 7x7 Grid 하나뿐이지만 SSD는 전체 이미지를 38x38, 19x19, 10x10, 5x5, 3x3, 1x1의 Grid로 나누고 Output과 연결합니다. 또한 큰 Feature Map에서는 작은 물체를 탐지, 작은 Feature Map에서는 큰 물체 탐지합니다.
- Convolutional Predictiors for Detection
이미지부터 최종 Feature Map까지는 Conv(3x3, s=2)로 연결합니다. Output과 연결된 Feature Map은 3 x 3 x p 사이즈의 필터로 Convolution 연산을 수행합니다. (Yolo v1은 Output과 Fully-Connected로 구성되는데 SSD는 여기서 시간을 많이 단축시켰습니다.) 예측된 Output은 Class, Category 점수와 Default box에 대응되는 Offset을 구합니다.
- Default Boxes and Aspect Ratios
각 Feature Map의 Cell(5x5일 경우 총 25개의 셀이 있음)에서 Default Bounding Box라는 것을 만들고 그 Default Box와 대응되는 자리에서 예측되는 박스의 Offset과 Per-Class Scores를 예측합니다. 이때 Per-Class Scores는 Class 확률이 아닌, 박스에 사물이 있는지 없는지 나타내는 값입니다.
간단히 정리하면, Output과 직결된 마지막 6개의 Feature Map은 각각 Conv(3x3x(#bb x (c + offset))) 연산을 통해 Output 형성하며, Output은 각 Cell당 #bb개의 Bounding Box를 예측합니다.
Training
Training의 Process에 대해 정리해보도록 하겠습니다.
우선, 앞서 다루었던 부분에서 5x5 Feature Map 부분만 고려해 보면 다음과 같습니다.
Ground Truth Box는 예측 해야 하는 정답 박스이고 Predicted Box는 Extra Network의 5 x 5 Feature Map의 Output이며, 이를 위해 conv 연산을 수행하면 총 5 x 5 x (6 x (21 + 4))의 값이 형성됩니다. (= Grid Cell x Grid Cell x (# of bb x ( Class + Offset)))
5x5 Feature Map은 각 Cell당 6개의 Default box를 가지고 있는데, 이때 Default box의 w, h는 Feature Map의 Scale에 따라 서로 다른 s 값과 서로 다른 aspect ratio인 a 값을 이용해 도출됩니다. 또한 Default box의 cx와 cy는 Feature Map Size와 Index에 따라 결정됩니다.
먼저 Default box와 Ground Truth box 간의 IOU를 계산해 0.5 이상인 값들은 1(positive), 아닌 값들은 0으로 할당합니다. 예를 들어, 그림과 같이 5x5의 Feature Map의 13번째 Cell(→ 가운데 부분)에서 총 6개의 Default box와 Predicted Bounding box가 있는데, 같은 순서로 Matching 되어 Loss를 계산합니다. Matching 된(x=1, positive) Default box와 같은 순서의 Predicted Bounding box에 대해서만 Offset에 대한 Loss를 고려합니다.
위 이미지에서 빨간색 점선이 Matching된 Default Box라고 한다면 거기에 해당하는 Cell의 같은 순서의 Predicted Bounding Box의 Offset만 Update 되고 최종적으로는 아래와 같이 Predict 됩니다.
위 내용을 간단히 정리하면 다음과 같습니다.
Matching Strategy ⇒ Ground Truth와 Default Box를 미리 Matching 시키고 두 영역의 IOU가 0.5 이상인 것들을 Matching 한다.
Training Objective
Training의 과정을 식으로 표현하면 다음과 같습니다.
우선, 위 식에서 사용되는 기호들에 대한 정리는 다음과 같습니다.
- $x^{p}_{ij} = \{1, 0\}$은 i번째 Default Box와 j번째 Ground Truth Box의 Category p의 물체 인식 지표로 p라는 물체의 j번째 Ground Truth와 i번째 Default Box 간의 IOU 가 0.5 이상이면 1 아니면 0으로 정의합니다.
- N은 # of matched default boxes입니다.
- l은 predicted box입니다.
- g는 ground truth box입니다.
- d는 default box입니다.
- cx, cy는 그 Box의 x, y좌표입니다.
- w, h는 그 Box의 width, heigth입니다.
- $\alpha$는 교차 검증으로부터 얻어진 1 값입니다.
- Loss Fucntion은 크게 두 부분이며, Class 점수에 대한 Loss와 Bounding Box의 Offset에 대한 Loss로 나뉩니다.
위 이미지에서 초록색 부분에 대한 내용은 다음과 같습니다. (→ Bounding Box Regression 예측 값과 실제 값 사이의 차이)
예측해야 할 Predicted Box의 $l^{m}_{i}(cx, cy, w, h)$값들은 특이한 $\hat{g}$값들을 예측합니다. 이때 $\hat{g}$의 cx, cy는 Default box의 cx와 w, h로 normalize 된 것을 볼 수 있습니다.
이미 IOU가 0.5 이상만 된 것들만 고려하므로, 상대적으로 크지 않은 값들을 예측해야 하고 더불어 이미 0.5 이상 고려된 부분에서 출발하므로 비교적 빨리 수렴할 수 있습니다.
초기 값 및 $\hat{g}$의 w, h는 default box에서 시작하며 예측된 l값들을 box를 표현할 때(마지막 Test Output) Default box의 Offset 정보가 필요합니다.
전반적인 내용을 정리해보면, 물체가 있다고 판별한 Default Box들 사이에서 해당 Box의 Ground Truth Box로만 Cross Entrophy Loss를 계산하겠다는 것이며, 뒷 부분은 물체가 없다고 판별한 Default Box들 중에서 물체가 있을 경우의 Loss값을 계산하는 부분이라고 보시면 됩니다.
위 이미지에서 노란색 부분에 대한 내용은 다음과 같습니다. (→ 각 Class별로 예측한 값과 실제 값 사이의 차이)
Positive(매칭된) Class에 대해서는 Softmax 연산을 수행하며, Negative(매칭되지 않은, 배경) Class를 예측하는 값은 ${\hat{c}}_{i}^{0}$ 값이고 Background이면 1, 아니면 0의 값을 가져야 합니다.
최종적인 Predicted Class Scores는 예측할 Class + 배경 Class를 나타내는 지표입니다.
Choosing Scales And Aspect Ratios for Default Boxes
Default Box를 위한 Scale로 여러 크기의 Default Box 생성을 위해 다음과 같은 식을 만들었습니다.
- m : Object Detection을 수행할 Feature Map의 개수입니다.
- k : Feature Map의 Index입니다.
- Smin = 0.2, Smax = 0.9 (→ m 값에 따라 적당히 구간을 나눠주게 됩니다.)
- m = 6일 때, 위 식에 넣으면 각 feature map당 서로 다른 6개의 Scale 값들이 나옵니다. 이때 이 값들은 각각의 Feature Map에서 Input Image의 $s_k$ 비율을 가진 박스를 Default Box로 사용하겠다는 것을 의미합니다.
- Aspect Ratio = {1, 2, 3, 1/2, 1/3}이며, 이를 수식에 넣어 각각의 Default Box의 크기를 계산합니다.
- Default Box의 Width는 $w_{k}^{a}$이고 Height는 $h_{k}^{a}$입니다.
- $f_{k}$는 Feature Map의 가로, 세로 크기이며 이를 통해 Feature Map의 중심점을 구할 수 있습니다.
Hard Negative Mining
대부분의 Default box가 배경이므로 $x^{p}_{ij} = 0$인 것이 많습니다. 따라서 마지막 Class Loss 부분에서 Positive : Negative 비율을 High Confidence로 정렬해서 1:3으로 추출합니다.
Data Augmentation
전체 이미지를 사용하였으며 물체와 최소 IOU가 0.1, 0.3, 0.5, 0.7, 0.9가 되도록 Fetch Sample 하였습니다. 이때 Random Sampling 하여 Fetch를 구하였습니다.
결과적으로 SSD는 PASCAL VOC, COCO Dataset에서 속도, 정확도 성능 SOTA. (TOP 1)의 결과를 얻었다고 합니다. 속도, 정확도 면에서 성능 SOTA가 된 이유로는, Output layer와 Fully-Connected 하지 않고 Conv를 이용한 부분(→ Weight 수 급감, 속도 증가), 여러 Feature Map은 한 이미지를 다양한 Grid로 접근하고 다양한 크기의 물체들을 Detect 할 수 있게 한 부분, Default box 사용으로 Weight Initialize와 Normalize 효과를 동시에 가져올 수 있었던 부분, 그리고 6개의 Bounding box를 통해 겹치는 좌표의 다양한 물체 Detect이 가능했던 부분에 있지 않을까 싶습니다.
하지만 여러 개의 Feature Map의 Detection을 전부 계산하므로 Computation Cost가 증가된다는 점과 Default Box의 Scale이나 Aspect Ratio는 비과학적(→ 비교적 쉽게 예측되는 Ratio 외에 특이한 Ratio를 가진 물체는 예측할 수 없습니다.)이기에 갖는 한계점도 있다고 생각합니다.
이렇게 SSD에 대해 알아보았습니다.
속도가 빠른 모델인 만큼, MobileNet과 SSD를 합쳐서 사용하는 경우가 많은 것 같더라고요.
단독보다는 다른 모델들과 섞어 사용하는 경우가 많은 것 같아 알아두면 좋을 것 같습니다.
이번 포스트는 여기서 마무리하도록 하겠습니다.
'Programming > Deep Learning Network' 카테고리의 다른 글
[Code] MobileNet v1 (0) | 2023.03.08 |
---|---|
[Model] RefineDet (0) | 2023.03.06 |
[Model] YOLO v1 (0) | 2023.02.23 |
[Model] R-CNN (0) | 2023.02.23 |
[Model] FPN (0) | 2023.02.22 |
댓글