이어서, YOLO v2 (YOLO 9000) model에 대해서 정리한다.

YOLO v2 (YOLO 9000)

Abstract & Introduction

YOLO 9000 = 9000개 이상의 object category를 탐지할 수 있는 real-time object detection system

 

- object detection과 classification을 공동으로 training시키는 방법을 제안한다.

  즉, COCO detection dataset과 ImageNet classification dataset에 동시에 훈련시킨다.

  이는 labelled detection data가 없는 object class에 대해서도 탐지할 수 있도록 한다.

 

- 정확도와 속도 사이의 trade-off의 균형을 잘 맞춰 좋은 성능을 보인다.

 

- 3개의 파트별로 다양한 아이디어를 도입한다.

  1) Better : 정확도 올리기 위한 방법

  2) Faster : 속도를 향상시키기 위한 방법

  3) Stronger : 더 많은 범위의 class를 예측하기 위한 방법

 

Part 1 : Better

  속도를 유지하면서 정확도를 향상시키는 것을 목표로, network를 깊고 복잡하게 만들기보다는 단순화시켜서 training을 용이하게 하고자 한다. 

 

7개의 ideas를 제시한다.

1) Batch Normalization

  모든 convolution layer 뒤에 batch normalization을 추가한다. 이를 통해 mAP가 2% 정도 향상되었고, overfitting 없이 regularization 기법이나 drop out의 제거가 가능하다.

 

2) High Resolution Classifier

- SOTA model : ImageNet에 pre-train된 classifier를 사용하는데, 대부분의 classifier는 256*256보다 작은 이미지에서 작동한다.

- original YOLO (YOLO v1) : 224*224에 training시키고, detection할 때는 448*448로 resolution을 높인다.

이는 network가 object detection task를 학습하면서, 동시에 새로운 입력 이미지의 resolution에 적응해야 함을 의미한다.

→ YOLO v2에서는 처음부터 high resolution(448*448)에 training시킴으로써 상대적으로 높은 resolution의 이미지에 적응할 시간을 제공한다.

 

3) Convolutional with Anchor Boxes

  anchor box를 도입하여 다음과 같이 모델을 수정한다.

  1. output이 높은 해상도를 가지도록 pooling layer를 제거한다.

  2. 입력 이미지를 416*416으로 수정함으로써, 최종 output feature map의 크기가 홀수가 되도록 한다.

  → 더 많은 수의 bounding box를 예측하면서 실제 object의 위치를 보다 잘 포착하게 된다.

 

* 추가 설명

  (기존) 각각의 object의 center를 포함하는 grid에 object를 할당

  (Anchor Box) 각각의 object의 center를 포함하는 grid 중 여러 형태의 anchor box와의 IoU가 가장 큰 grid에 object를 할당 → 각 grid에서 여러 개의 object 검출 가능하도록 함.

 

4) Dimension Clusters

  anchor box를 YOLO와 함께 사용할 때 anchor box의 크기와 종횡비를 사전에 정의하는데, 더 나은 prior를 선택한다면 detection의 성능이 향상될 것이다. 이를 위해 trianing set bounding box에 k-means clustering을 적용한다.

  추가로, Euclidean distance 기반의 standard k-means를 사용하면, 큰 box가 작은 box보다 더 많은 오류를 만들어낸다는 문제가 있다. box의 크기와 무관한 좋은 IoU로 이어지는 prior를 원하기에 새로운 distance metric을 사용한다.

$$ d(box, centroid) = 1 - IOU(box, centroid) $$

위 식은 box와 centroid의 IoU 값이 클수록 겹치는 영역이 크기에 거리가 가까움을 나타낸다.

 

k를 다양하게 해서 k-means clustering에 대한 실험을 진행했을 때, k=5가 적정함을 알 수 있다.

 

5) Direct Location Prediction

  YOLO와 anchor box를 함께 사용했을 때의 또 다른 문제점이 존재한다. 초기 iteration 시, bounding box의 위치를 조정하는 계수에는 제한된 범위가 없어서 최적화된 값을 찾는데 오래 걸린다는 문제(모델의 불안정성 문제)이다.

  이를 해결하기 위해, gird cell에 상대적인 위치 좌표 (0~1의 값)를 예측하도록 함으로써 예측하는 위치의 범위가 정해짐에 따라 network아 안정적으로 학습 가능하도록 한다. 

 

→ (4)의 dimension clustering을 통해 최적의 prior를 선택하고, (5)의 anchor box의 center의 좌표 예측을 통해 성능을 향상시킨다.

 

6) Fine-Graiend Features

  network의 최종 output은 13*13의 feature map이다. 그러나, feature map의 크기가 작은 경우에 큰 object를 예측하기에는 용이하지만, 작은 object를 예측하기 어렵다.

  이를 해결하기 위해,

  1. 마지막 pooling을 수행하기 전에 feature map을 추출하여 26*26의 feature map을 얻는다. 

  2. feature map의 channel은 유지하면서 4개로 분할한 후 결합하여 13*13의 feature map을 얻는다.

  → 이러한 feature map은 보다 작은 object에 대한 정보를 함축하고 있다.

출처 " https://wikidocs.net/167664 "

7) Multi-Sclae Training

  다양한 input image의 크기를 사용하여 network를 학습시켜 본다. 아래 표에서 알 수 있듯이, 속도와 정확도 사이에는 trade-off가 존재하며, input image의 크기가 작은 경우 높은 fps를 가지고, 크기가 큰 경우 높은 mAP 값을 가지게 된다.

 

Part 2 : Faster

 YOLO v2의 backbone은 아래 표와 같은 구조를 가지는 Darknet-19이다. 

+ GAP (Global Average Pooling)

  YOLO v1은 network 마지막에 fully connected layer를 통해 predection을 수행하기에 parameter의 수는 증가하고, detection 속도는 감소한다는 단점을 가진다.

  이에 반해 YOLO v2의 Darknet-19는 마지막 layer에 GAP 사용하여 fully connected layer를 제거함으로써, paramter의 수는 감소시키고 detection 속도를 향상시킨다.

 

* GAP  추가 설명

  : 같은 channel의 feature를 평균내는 것으로, (h, w, channel)의 형태를 (channel,)의 형태로 바꾸어준다.

    최종 output이 1차원 벡터이므로 fully connected layer 대신 사용 가능하다.

 

 

Part 3 : Stronger

  앞서 언급했듯이 model을 더 강건하게 만들기 위해서 classification dataset과 detection dataset을 함께 학습시켜 보다 많은 class를 예측하려고 합니다. 이를 위해 주목해야 할 점은 두 데이터셋을 섞는 방법입니다. classification dataset은 보다 세부적인 object에 대한 정보를 가지고 있습니다. 예를 들면, '요크셔테리어', '불독' 등. 그러나, detection dataset은 일반적으로 범용적인 object에 대한 정보를 가지고 있습니다 .예를 들자면, '개' 등이 있다. 이때, 발생할 수 있는 문제점은 '개'와 요크셔테리어'를 별개의 class로 분류할 수도 있다는 입니다.

 

  이를 해결하기 위해서 ImageNet label로부터 hierarchical tree인 WordTree를 구성하는 'Hierarchical classification' 방법을 제안합니다. 

  ImageNet label은 concept과 concept 간의 관계를 구조화하는 language database인 WordNet으로부터 가져옵니다. WordNet은 언어가 복잡하기 때문에 tree가 아닌 directed graph로 구성됩니다. 예를 들자면, '개'는 'canine(개)' 유형과 'domestic animal (가축 동물)' 유형 둘 다에 포함됩니다. 본 논문에서는 전체 그래프 구조를 사용하는 대신 ImageNet의 concept에서 hierarchical tree를 구축하여 문제를 단순화합니다.
  최종적으로 생성된 WordTree는 physical object를 루트 노드로 두고, 하위 범주는 자식 노드가 되도록 하여 점차 뻗어나갑니다. 


  WordTree로 classification을 수행하려는 경우, 해당 synset이 각 하위 확률에 대해 모든 노드에서 조건부 확률을 예측합니다. 예를 들어, "terrier" 노드에서는 다음의 확률값을 예측합니다.

$$ Pr(Norfolk terrier|terrier) $$

$$ Pr(Yorkshire terrier|terrier) $$

$$ Pr(Bedlington terrier|terrier) $$

 

  만약 특정 노드에 대한 absolute probability를 계산하려면, tree를 통해 루트 노드까지의 path를 따라서 조건부 확률을 곱하면 됩니다. 예를 들어, 입력 이미지가 'Norfolk terrier'인지 알고싶다면, 다음을 계산합니다.

 

  이러한 방식을 통해 ImageNet dataset과 COCO dataset을 4:1의 비율로 합친 9418개의 class를 가지는 WordTree를 구성합니다. 

 

Experiments

 


 

Redmon, J., & Farhadi, A. (2017). YOLO9000: better, faster, stronger. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 7263-7271).

+ Recent posts