Slow is better than NOTHING

Computer Science/5. Deep learning

[Object Detection] Object Detection 튜토리얼 - SSD300 part 2

Jeff_Kang 2021. 1. 11. 00:00
반응형

이전 포스트에서는 기본적인 용어, 개념 등을 위주로 Object Detection에 대해 알아보았습니다. 
다음으로 SSD300 을 Training시키기 위한 Loss등을 포함한 방법론에 대해서 알아보도록 하겠습니다. 

 

[Object Detection] Object Detection 튜토리얼 - part 1

Object Detection(객체 탐지) 는 딥러닝 중 컴퓨터 비전 분야에서 가장 어플리케이션 단에서 인기있게 연구되고 있는 분야입니다. 실생활 어플리케이션에도 많이 적용되는 만큼 이 기술의 발전 속도

rain-bow.tistory.com


Loss Functions

Supervised Learning은 주어진 ground truth data에 predicted된 내용을 매칭시키면서 학습합니다. SSD300 을 훈련시키기 위한 Loss function을 선택하기 위해 다음을 고려해야합니다. 

  1. bounding box regression 을 위해 어떤 Loss function을 사용해야하는가?
  2. multi class cross entropy 를 사용해야하는가?
  3. 어떤 비율로 Loc 와 Cls 를 학습시켜야하는가?
  4. ground truth box와 predicted box를 어떻게 Matching 시키는가?
  5. 8732개의 box 에서 객체를 포함하지 않는 Box는 어떻게 처리해야하는가?

Matching predictions to ground truths

모델이 학습을 하기위해서는 prediction과 실제 이미지의 object와의 차이를 학습할 수 있는 방법을 알아야합니다.

  • 8732 priors 와 N 개의 ground truth object 사이에 Overlap 된 Jaccard를 찾습니다. 이 tensor 는 (8732, N) 의 모양을 갖습니다.
  • 8732 prior 를 각각 object와 매칭시킵니다. 단, 이때 가장 많이 overlap 된 object와 매칭합니다.
  • 만약에, prior 와 ground truth object와 overlap된 부분이 0.5 보다 작다면, 이는 object를 포함하고 있다고 볼 수 없습니다. 여기서 0.5는 일종의 Threshold로 그려진 prior 내에 object가 있는지 없는지를 판별합니다. 이것을 "negative match" 라고 합니다. 이미지에서 대부분이 객체를 포함하지 않는 배경이라는 점을 생각했을 때, 대부분의 priors가 이러한 negative 상태일 것입니다.
  • 반면에, prior와 ground truth object가 가 넘는 overlap point를 갖는다면, 객체를 포함하고 있다고 하며 이를 "positive match" 라고합니다.

Fig 1. Matching the object 

쉽게 설명하기 위해, 위 Fig 1처럼 1개의 image에 7개의 빨간색 prior 가 있다고 가정해보겠습니다. Class는 (Dog, Cat) 두 개를 분류하기 위한 Task라고 가정합니다. 

Fig 2. Matching priors with ground truths

Classification Purpose : 각 Prior들은 ground truth object와 가장 많이 "Overlap" 된 bounding box를 Localize합니다. bounding box 를 기준으로 overlap된 내용을 classification을 하게되면, 각 Label값에 대한 score를 계산하게 됩니다. (Fig 2. 왼쪽)
이 score는 각 Class에 대한 Probability형태로 표현되며, score중 가장 높을 값을 갖는 label을 class로 분류하게 됩니다. 
또한, Overlap된 IoU가 0.5 미만인 경우 negative match, 0.5 이상인 경우 positive match로 labeling을 해줍니다. 
Positive match인 경우, ground truth label과 cross entropy 계산을 해줄 수 있고, negative match인 경우 "background(bgd)" 와 cross entropy를 계산해줄 수 있습니다. 


Localization Purpose :  negative match에 대한 ground truth coordinate는 없습니다. 따라서, Localization loss는 얼마나 predicted box와 ground truth box가 얼마나 matching 되어 있는지를 회귀(regression)문제로 접근합니다. $(g^c_x, g^c_y, g_w, g_h)$ 형태로 Localization box를 예측하므로, Loss를 계산하기 위해 ground truth 좌표도 역시 이와같은 형태로 변환되어야 합니다. Localization Loss는 다음과 같이 averaged Smooth L1 Loss를 사용합니다.

Fig 3. Averaged smooth L1 loss

단, 여기서 주목할 점은 앞서 말씀드렸듯, positive sample에 대해서만 smooth L1 loss를 적용하여 계산합니다. Background object인 negative sample에 대해서는 Localization Loss를 계산하지 않습니다.


Confidence for Object : positive 던 negative 던 모든 예측값에는 ground truth label에 대한 score가 포함되어있습니다. 한 이미지에는 대부분이 객체를 포함하지 않고 있기 때문에, negative와 positive를 신경쓰지 않고 학습을 시키게 된다면 모델은 negative sample에 대해 압도될지도 모릅니다. 이는 즉, 모델이 배경을 탐지 하기 위해서 학습하게 됩니다. 
이러한 단점을 보완하기 위해서는, Loss에 계산되는 negative sample에 대한 숫자를 줄여주면 됩니다.

Hard Negative Mining : negative sample에 대한 숫자를 줄이기 위한 방법으로, 모델이 Object가 없다고 식별하기 가장 어려운 Prediction만을 사용하는 것입니다. 예를 들어, N_hn(Number of hard negative) 개의 hard negative sample 을 사용한다고 가정하겠습니다. SSD author는 N_hnN_p(Number of positive) 의 3배로 설정하였습니다. 즉, N_hn = 3* N_p 입니다. hardest sample 은 각 negative prediction에 대한 Cross entropy loss 중 top most를 선택하면 알 수 있습니다. 

Confidence loss 는 단순히 positive 와 hard negative matches 들의 Cross entropy의 평균 합으로 표현할 수 있습니다.

Fig 4. Confidence loss for SSD

따라서, Multi Box loss는 Localization 과 Confidence에 대한 loss의 합으로 표현될 수 있고, $L = L_{conf} + \alpha \cdot L_{loc}$/ 이를 조정하는 Balancing weight parameter $\alpha$ 에 의해 조정됩니다. 하지만, SSD 논문에서 author는 단순히 $\alpha=1$ 로 설정하였습니다. 


Predictions

모델이 훈련이 된 후, 이 모델의 weight값을 이용해 이미지가 주어졌을 때 객체가 어디있는지(Localization)와 그 객체가 무엇인지를 분류(Classification) 할 수 있게 됩니다. 하지만 지금까지 살펴본 바로는 해당 객체가 어디있는지에 대한 Regression Task를 살펴보았고, Classification purpose 에서는 8732 개의 class score list를 구하였습니다. 이제 이 부분을 Human-interpretable(인간이 해석가능한) 언어로 Label과 매칭 시켜줄 것입니다. 예, class label 2 : bird

  • Prior 로부터 prediction task를 통해 8732개의 $(g^c_x, g^c_y, g_w, g_h)$ predicted box를 가지고 있습니다. 이를 경계좌표(Boundary Coordinates)로 변환시켜 해석 가능하도록 해줍니다. (x_min, y_min, x_max, y_max)
  • 배경이 아닌 모든 객체에 대해서, 8732개의 박스로부터 class별 score를 뽑아냅니다. 이후, threshold에 만족하지 않는 score들은 제거해줍니다. 이 후 남아있는 박스들은 특정 Class에 대한 Object 후보군이 됩니다. 

위와 같은 작업을 통해 Prediction을 진행하면 아래의 그림과 같이 많은 수의 Bounding Box들이 겹쳐있는 것을 볼 수 있습니다. threshold 이상 값의 bounding box는 여러개일 수 있습니다. 예, cat A, 0.88 과 cat B, 0.74

FIg 5. Example of Non-Maximum Supression(NMS)

Fig 5. 에서는 2마리의 Dog 와 1마리의 Cat이 있지만, predicted box에 의하면 3마리의 Dog와 2마리의 Cat이 있는 것으로 나타납니다. 이것은 단순한 예제일 뿐이지만, 실제 Object Detection model에서는 더욱 많은 overlapping bbox가 생기고 이는 실제 탐지모델 성능에 영향을 주기도 합니다. 

이제, 이 중복된 prediction에 대해 어떤 박스가 적절한지를 판단해야합니다.
1. 먼저, 각 클래스 별 후보군들을 확률 순으로 정렬합니다. 

Fig 6. List up the proposals

2. 어떤 후보군이 중복되어있는지 찾습니다.
이를 위해선, 앞서 IoU를 계산할 때 사용했던 Jaccard overlap을 이용해 두 이미지 간의 Overlap 된 영역을 통해 유사성을 계산합니다. 만약, 많은 부분이 겹쳐있다면 score가 높은 후보군만을 유지합니다. 이를 통해, 각 클래스 별 score가 낮은 후보군을 제거할 수 있습니다. 이 과정을 Non-Maximum Suprression(NMS) 라고 하는데 많은 후보군들이 하나의 객체에 대해 많이 겹쳐있을 때 maximum score를 가지는 한 개의 후보군으로 압축할 수 있습니다. 
알고리즘 적으로는 다음과 같이 동작합니다.

  1. Background 가 아닌 "객체들에 대해서 bbox"를 선택
  2. 후보군들을 Class별 score를 기준으로 내림차순 정렬(예, 0.88->0.74->0.52)
  3. 가장 높은 score를 가지는 후보군(cat A, 0.88) 을 기준으로 이보다 작은 score를 갖고 IoU가 0.5 이상인 후보군은 모두 제거
  4. 모든 후보군에 대해서 위 1-3 process를 진행

Fig 7. Prediction result after applying NMS

NMS를 적용하게 되면, 위와같이 중복된 후보군들이 모두 제거되고 각 객체를 나타낼 수 있는 가장 대표 bbox만 남게 됩니다. NMS는 좋은 퀄리티의 detection을 위해서 아주 중요한 역할을 하기 때문에 NMS의 threshold를 잘 설정하는 것도 일종의 hyper-parameter가 될 수 도 있습니다.

다음 포스트에서는 실제 Implementation을 통해 SSD가 어떻게 돌아가고, 지금까지 설명해온 이론들이 코드로는 어떻게


Reference

본 포스트는 개인 공부를 위해 https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection을 옮겨 일부 수정한 것입니다. 

 

반응형