약초의 숲으로 놀러오세요

YOLO v2 논문(YOLO9000:Better, Faster, Stronger) 리뷰 본문

Computer Vision/Object Detection

YOLO v2 논문(YOLO9000:Better, Faster, Stronger) 리뷰

herbwood 2021. 1. 15. 02:30

이번 포스팅에서는 YOLO v2 논문(YOLO9000:Better, Faster, Stronger)을 읽고 리뷰해도록 하겠습니다. 입력 이미지의 크기가 300x300인 SSD300 모델은 detection 속도가 빠르지만 정확도가 낮으며, SSD512 모델은 정확도는 높지만 detection 속도가 느리다는 단점이 있습니다. YOLO v2 모델은 다양한 아이디어를 도입하여 정확도와 속도 사이의 trade-off의 균형을 잘 맞춰 좋은 성능을 보였습니다. 논문은 다음과 같이 3개의 3개의 파트로 구성되어 있습니다. 

 

  • Better : 정확도를 올리기 위한 방법
  • Faster : detection 속도를 향상시키기 위한 방법
  • Stronger : 더 많은 범위의 class를 예측하기 위한 방법

각 파트별로 논문의 저자가 도입한 아이디어를 살펴보도록 하겠습니다. 

Main Ideas

Better 

Batch Normalization

논문에서는 모든 conv layer 뒤에 batch normalization을 추가하였습니다. 이를 통해 mAP 값이 2% 정도 향상되었습니다. 또한 overfitting 없이 기타 regularization 방법이나 dropout을 제거할 수 있었습니다. 

 

High Resolution Classifier

YOLO v1 모델은 Darknet을 224x224 크기로 pre-train시켰지만 detection task 시에는 448x448 크기의 이미지를 입력으로 사용합니다. 이는 네트워크가 object detection task를 학습하면서 동시에 새로운 입력 이미지의 resolution(해상도)에 적응해야 함을 의미합니다. 

 

YOLO v2 모델은 처음부터 Darknet을 448x448 크기로 pre-train시켜 네트워크가 상대적으로 높은 해상도의 이미지에 적응할 시간을 제공합니다. 이러한 방법을 통해 mAP 값이 4% 정도 향상됩니다. 

 

Convolutional with Anchor boxes

YOLO v1은 각 grid cell의 bounding box의 좌표가 0~1 사이의 값을 가지도록 랜덤으로 설정한 뒤 학습을 통해 최적의 값을 찾아가는 과정을 거칩니다. 반면 Faster R-CNN 모델은 사전에 9개의 anchor box를 정의한 후 bounding box regression을 통해 x, y 좌표와 aspect ratio(offset)을 조정하는 과정을 거칩니다. 좌표 대신 offset을 예측하는 문제가 보다 단순하고 네트워크가 학습하기 쉽다는 장점이 있습니다.

 

YOLO v2에서는 anchor box를 도입하며, 이 과정에서 네트워크를 수정합니다. 먼저 conv layer의 output이 보다 높은 resolution을 가지도록  pooling layer를 제거했습니다. 또한 앞서 입력 이미지를 448x448 크기로 사용한다고 했지만, 네트워크를 줄여 416x416 크기의 입력 이미지를 사용합니다. 입력 이미지를 수정한 이유는 최종 output feature map의 크기가 홀수가 되도록 하여, feature map 내에 하나의 중심 cell(single center cell)이 존재할 수 있도록 하기 위함입니다. 보통 객체의 크기가 큰 경우 이미지 내에서 중심을 차지하기 때문에, 하나의 중심 cell이 있으면 이를 잘 포착할 수 있기 때문입니다. 

 

416x416 크기의 입력 이미지를 네트워크에 입력할 경우 최종적으로 13x13 크기의 feature map을 얻을 수 있습니다(downsample ratio = 1/32). YOLO v1은 각 cell별로 2개의 bounding box를 예측하여 총 98(=7x7x2)개의 bounding box를 예측하지만, YOLO v2는 anchor box를 사용하여 보다 많은 수의 bounding box를 예측합니다. anchor box를 사용하지 않은 경우 mAP 값이 69.5%, recall값은 81%인 반면, anchor box를 사용한 경우 mAP 값은 69.2%, recall 값은 88%로 나왔습니다. anchor box를 사용하면 mAP 값이 감소하지만 recall 값이 상승하고, 이는 모델이 더 향상될 여지가 있음을 나타낸다고 합니다.

 

Object detection task에서 recall 값이 높다는 것은 모델이 실제 객체의 위치를 예측한 비율이 높음을 의미합니다. YOLO v1이 recall 값이 낮은 이유는 region proposal 기반의 모델에 비해 이미지 당 상대적으로 적은 수의 bounding box를 예측하기 때문입니다. 하지만 YOLO v2에서 anchor box를 통해 더 많은 수의 bounding box를 예측하면서 실제 객체의 위치를 보다 잘 포착하게 됩고, 이를 통해 recall 값이 상승하게 됩니다. 

 

Dimension Clusters

기존에는 anchor box의 크기와 aspect ratio를 사전에 미리 정의(hand-picked)했습니다. 하지만 논문의 저자는 만약 네트워크가 더 좋은 조건으로 학습을 시작하기 위해 더 나은 사전 조건(prior)을 선택한다면 detection 성능이 향상될 것이라고 보았습니다. 이를 위해 k-means clustering을 통해 최적의 prior를 탐색하는 방법을 제시합니다. 이 때 데이터셋에 있는 모든 ground truth box의 width, height 값을 사용하여, k-means clustering 수행합니다. 

 

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

 

일반적인 k-means clustering의 경우 유클리안 거리(Euclidean distance)를 통해 centroid와 sample간의 거리를 계산합니다. 하지만 이러한 distance metric을 사용할 경우 큰 bounding box는 작은 box에 비해 큰 error를 발생시키는 문제가 있습니다. 하지만 box의 크기와 무관하게 선택한 prior이 좋은 IoU 값을 가지도록 하기 위해서 논문의 저자는 위와 같은 새로운 distance metric을 사용합니다. 이는 box와 centroid의 IoU값이 클수록 겹치는 영역이 크기 때문에 거리가 가깝다는 점을 나타냅니다. 

 

Cluster 수와 평균 IoU 값

논문의 저자는 다양한 수의 $k$(centroid의 수이자 anchor box의 수)에 대하여 k-means clustering을 진행하였고, $k=5$일 때 모델의 복잡도와 recall 값이 적절한 trade-off를 보여주었습니다. hand-picked anchor box 9개를 사용할 경우 평균 IoU값이 61.0이며, lustering 전략을 사용하여 뽑은 prior 5개를 사용할 경우 평균 IoU 값은 60.09로 나타났습니다. 이는 5개의 anchor box만으로도 최적의 prior를 선택하면 네트워크가 detection task를 보다 쉽게 학습함을 의미합니다. 

 

Direct location prediction

 

$$x = (t_x * w_a) - x_a \\ y = (t_y * h_a) - y_a$$

 

YOLO와 anchor box를 함께 사용했을 때 문제점은 초기 iteration 시, 모델이 불안정하다는 것입니다. anchor box는 bounding box regressor 계수(coefficient)를 통해 위의 공식과 같이 bounding box의 위치를 조정합니다. 하지만 $t_x, t_y$와 같은 계수는 제한된 범위가 없기 때문에 anchor box는 이미지 내의 임의의 지점에 위치할 수 있다는 문제가 있습니다. 이로 인해 최적화된 값을 찾기 까지 오랜 시간이 걸려 모델은 초기에 불안정하게 됩니다. 

 

Direct location prediction

논문의 저자는 이러한 문제를 해결하기 위해 YOLO의 방식을 사용하여 grid cell에 상대적인 위치 좌표를 예측하는 방법을 선택했습니다. 이는 예측하는 bounding box의 좌표는 0~1 사이의 값을 가짐을 의미합니다. 위의 그림에서 $c_x, c_y$는 grid cell의 좌상단 offset입니다. bounding box regression을 통해 얻은 $t_x$, $t_y$ 값에 logistic regression 함수($\sigma$)를 적용하여 0~1 사이의 값을 가지도록 조정했습니다. 

 

예측하는 위치의 범위가 정해짐으로써 네트워크는 안정적으로 학습을 진행하는 것이 가능해집니다. Dimension clustering을 통해 최적의 prior를 선택하고, anchor box 중심부 좌표를 직접 예측함으로서 recall값이 5% 정도 향상된다고 합니다. 

 

Fine-Grained Features

 

Fine-grained features

 

YOLO v2는 최종적으로 13x13 크기의 feature map 출력합니다. 이처럼 feature map의 크기가 작은 경우 큰 객체를 예측하기 용이한 반면 작은 객체는 예측하기 어렵다는 문제가 있습니다.

 

이러한 문제를 해결하기 위해 마지막 pooling을 수행하기 전에 feature map을 추출하여 26x26(x512) 크기의 feature map을 얻습니다. 그 다음 위의 그림과 같이 feature map을 channel은 유지하면서 4개로 분할한 후 결합(concat)하여 13x13(x2048)크기의 feature map을 얻습니다. 이러한 feature map은 보다 작은 객체에 대한 정보를 함축하고 있다고 합니다. 이를 13x13(x1024) feature map에 추가하여 13x13(x3072) 크기의 feature map을 얻습니다.

 

YOLO v2 architecture

최종적으로 3x3 conv와 1x1 conv를 적용하여 13x13(x125) 크기의 feature map을 얻습니다. 여기서 channel 수가 125인 이유는 각 grid cell별로 5개의 bounding box가 20개의 class score와 (confidence, x, y, w, h)를 예측하기 때문입니다(=5개의 bounding box x (20개의 class score + (conf, x, y, w, h))). 이처럼 fine-grained feature를 사용함으로써 1% 정도의 성능을 향상시켰다고 합니다. 

 

Multi-Scale Training

YOLO v2 performance table

논문의 저자는 YOLO v2 모델을 보다 강건하게 만들기 위해 다양한 입력 이미지를 사용하여 네트워크를 학습시킵니다. 논문에서는 10 batch마다 입력 이미지의 크기를 랜덤하게 선택하여 학습하도록 설계했습니다. 모델은 이미지를 1/32배로 downsample시키기 때문에 입력 이미지 크기를 32배수 {320, 352, ..., 608} 중에서 선택하도록 했습니다. 320x320 크기의 이미지가 가장 작은 입력 이미지이며, 608x608 크기의 이미지가 입력될 수 있는 가장 큰 이미지입니다.  

 

이를 통해 네트워크는 다양한 크기의 이미지를 입력받을 수 있고, 속도와 정확도 사이의 trade-off를 제공합니다. 위의 표에서 확인할 수 있듯이 입력 이미지의 크기가 작은 경우 더 높은 FPS를 가지며, 입력 이미지의 크기가 큰 경우 더 높은 mAP 값을 가지게 됩니다. 

Faster

Darknet-19

Darknet-19 architecture

YOLO v2는 Darknet-19라는 독자적인 classification 모델을 backbone network로 사용합니다. 전체 구조는 위의 표와 같습니다.

 

Global average pooling

 

YOLO v1 모델은 네트워크 마지막에 fc layer를 통해 예측을 수행합니다. 하지만 fc layer로 인해 파라미터 수가 증가하고 detection 속도가 느려진다는 단점이 있습니다. YOLO v2의 Darknet-19는 마지막 layer에 global average pooling을 사용하여 fc layer를 제거하여 파라미터 수를 감소시키고, detection 속도를 향상시켰습니다. 

 

Training for classification

 

Darknet-19는 class의 수가 1000개인 ImageNet 데이터셋을 통해 학습시킵니다. 위의 Darknet-19 네트워크에서 global average pooling 후 ouput의 수가 1000개인 이유입니다. 학습 결과 top-1 정확도는 76.5%, top-5 정확도는 93.3%의 성능을 보였습니다.

 

Training for detection

 

Darknet-19를 detection task로 사용하기 위해 마지막 conv layer를 제거하고 3x3(x1024) conv layer로 대체하고, 이후 1x1 conv layer를 추가합니다. 이 때 1x1 conv layer의 channel 수는 예측할 때 필요한 수로, 앞서 살펴보았듯이, 각 grid cell마다 5개의 bounding box가 5개의 값(confidence score, x, y, w, h)과, PASCAL VOC 데이터셋을 사용하여 학습하기 때문에 20개의 class score를 예측합니다. 따라서 1x1 conv layer에서 channel 수를 125(=5x(5+20))개로 지정합니다. 

Stronger

논문에서는 YOLO v2를 classification 데이터와 detection 데이터를 함께 사용하여 학습시킴으로써 보다 많은 class를 예측하는 YOLO 9000을 소개합니다. 이를 위해 학습 시 classification 데이터와 detection 데이터를 섞어 학습시키는 방법을 생각해볼 수 있습니다. 하지만 detection 데이터셋은 일반적이고 범용적인 객체에 대한 정보를 가지고 있는 반면, classification 데이터셋은 보다 세부적인 객체에 대한 정보를 가지고 있습니다. 예를 들어 detection 데이터셋은 모든 개 이미지를 "개"라는 하나의 class로 분류하는 반면, classification 데이터셋은 "요크셔 테리어", "불독" 등 개를 종류별로 세부적인 class로 분류합니다. 이처럼 두 데이터를 섞어 학습시킬 경우 모델이 "개"와 "요크셔 테리어"를 별개의 배타적인 class로 분류할 가능성이 있습니다. 

 

Hierarchical classification

 

WordTree

논문에서는 이러한 문제를 해결하기 위해 ImageNet label로부터 계층적인 트리(Hierarchical tree)인 WordTree를 구성하는 방법을 제안합니다. WordTree에서 각 노드는 범주를 의미하고 하위 범주는 자식 노드가 되는 구조가 가지고 있습니다. 먼저 물리적 객체(physical object)를 루트 노드로 두고, 하위 범주는 자식 노드가 되고, 자식 노드의 하위 범주는 자식 노드가 되어 점차 뻗어나갑니다. 가령 "요크셔 테리어"라는 범주 혹은 노드는 "물리적 객체 - 동물 - 포유류 - 사냥개 - 테리어" 노드를 거쳐 도달할 수 있습니다. ImageNet 데이터셋을 통해 WordTree를 구성할 경우, 최상위 노드부터 최하위 노드까지 총 범주를 합치면 1369개의 범주가 존재합니다. 

 

$$Pr(Yorkshire terrier) = Pr(Yorkshier terrier | terrier) \\ * Pr(terrier | hunting dog) \\ *...* \\ * Pr(mammal | animal) \\ * Pr(animal | physical object)$$

 

이러한 트리에서 특정 범주에 속할 확률은 루트 노드로부터 해당 범주의 노드까지의 조건부 확률의 곱으로 표현할 수 있다. 가령 입력으로 들어온 이미지가 요크셔 테리어일 확률은 위와 같이 계산할 수 있습니다. 

 

Dataset combination with WordTree

 

이같은 방법을 통해 ImageNet 데이터와 COCO 데이터를 합쳐 WordTree를 구성할 수 있습니다. 

 

Joint classification and detection

 

논문에서는 COCO 데이터셋과 ImageNet 데이터셋을 합쳐 9418개의 범주를 가지는 WordTree를 구성합니다. 이 때 ImageNet과 COCO 데이터셋의 비율이 4:1이 되도록 조정합니다. YOLO v2 모델을 grid cell별로 3개의 anchor box를 사용하여 학습시킵니다. 

 

Combining ImageNet and COCO dataset

네트워크가 detection 데이터셋의 이미지를 보면 detection loss는 평소와 같이 loss를 backward pass하며, classification loss의 경우에는 특정 범주와 상위 범주에 대해서만 loss를 계산합니다. 가령 "개"라는 범주에 대하여 detection 데이터셋은 하위 범주를 포함하고 있지 않기 때문에 "물리적 객체 - 동물 - 포유류  - 개"에 대한 조건부 확률을 사용하여 loss를 구합니다. 

 

만약 네트워크가 classification 데이터셋의 이미지를 보면 오직 classification loss에 대하여 backward pass를 수행합니다. 이 때 ground truth box와의 IoU 값이 0.3 이상인 경우에만 역전파를 수행합니다. 

 

이같은 Joint training 방식을 통해 YOLO 9000 모델은 COCO 데이터셋을 활용하여 이미지 내에서 객체를 찾는 detection task와 ImageNet 데이터셋을 통해 보다 넓은 범주의 객체를 분류할 수 있도록 학습됩니다. 

Training

YOLO v2 architecture

1) Feature extraction by Darknet-19

YOLO v2는 다양한 아이디어를 도입했지만 네트워크의 구조는 상대적으로 단순합니다. 416x416 크기의 이미지를 Darknet-19에 입력하여 여러 conv layer를 거쳐 13x13x1024 크기의 feature map을 얻습니다. 

 

  • Input : 416x416 sized image
  • Process : feature extraction
  • Output : 13x13(x1024) sized feature map

2) Reorganize feature map

앞서 언급했듯이 13x13 크기의 feature map을 예측 시 사용할 경우, 작은 객체에 대해서 detect하기 어렵다는 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 마지막 pooling을 수행하기 전(위의 YOLO v2 architecture 그림에서 마지막 빨간색 block 전)에 feature map을 추출하여 26x26(x512) 크기의 feature map을 얻습니다. 그 다음 channel은 유지한 채로 feature map을 4개로 분할한 후 결합(concat)하여 13x13(x2048)크기의 feature map을 얻습니다. 이러한 feature map은 보다 작은 객체에 대한 정보(fine-grained)를 함축하고 있습니다. 

 

  • Input : 26x26(x512) sized feature map
  • Process : Reorganize feature map
  • Output : 13x13(x2048) sized feature map

3) Concat feature maps

Concat feature maps

1)번 과정에서 얻은 feature map과 2)번 과정에서 얻은 feature map을 channel에 따라 결합(concat)하여 13x13(x3072) 크기의 feature map을 얻습니다. 

 

  • Input : 13x13(x1024) sized feature map, 13x13(x2048) sized feature map
  • Process : concat feature maps
  • Output : 13x13(x3072) sized feature map

4) Prediction by applying conv layers

앞서 과정에서 얻은 feature map에 3x3 conv와 1x1 conv 연산을 적용하여 최종적으로 13x13(x125) 크기의 feature map을 얻습니다. channel의 수는 5개 bounding box별로 20개의 class score과 5개의 값(confidence score, x, y, w, h)를 예측하여 gird cell별로 125개의 값을 가지기 때문입니다. 

 

  • Input : 13x13(x3072) sized feature map
  • Process : applying conv layers
  • Output : 13x13(x125) sized feature map

5) Train YOLO v2 by loss function

YOLO v1과 다르게 YOLO v2는 논문에서 loss function에 대한 언급이 없습니다. 그래서 여러 코드 구현체를 찾다가 우연히 YOLO v2 loss function에 대해 잘 설명한 글을 찾게 되었습니다. YOLO v2의 전체 loss function은 다음과 같습니다. YOLO v1과 같이 Localization loss, Confidence loss, Classification loss로 구성되어 있습니다. 또한 v1과 같이 전체 loss가 SSE(Sum of Squared Error)입니다. 전체 loss function은 살짝 복잡하기 때문에 YOLO v1 포스팅을 참고하시면 좋을 것 같습니다. 

 

YOLO v2 loss function

Localization loss

 

Localization loss

이미지 내 특정 객체의 중심이 특정 grid cell에 있는 경우, 해당 grid cell은 객체를 예측하도록 할당(responsible for)받습니다. 자세한 내용은 YOLO v1 포스팅을 참고하시기 바랍니다. Localization loss는 객체의 중심이 존재하는 grid cell의 bounding box loss와 존재하지 않는 grid cell의 bounding box loss를 각각 구한 후 더했습니다.

 

  • $\lambda_{obj}^{coord}$ : 객체를 포함하고 있는 grid cell에 가중치를 주는 하이퍼 파라미터입니다. $\lambda_{obj}^{coord}=1$로 지정합니다. 
  • $S^2$ : grid cell의 수(=13x13=169)
  • $B$ : grid cell별 anchor box의 수(=5)
  • $1_{ij}^{responsible_obj}$ : $i$번째 grid cell의 $j$번째 anchor box가 객체를 예측하도록 할당(responsible for)받았을 경우 1, 그렇지 않은 경우 0인 index parameter입니다. 
  • $x_{ij}^{pred}, y_{ij}^{pred}, w_{ij}^{pred}, h_{ij}^{pred}$ : 예측한 anchor box의 x, y, w, h 값
  • $x_{ij}^{obj}, y_{ij}^{obj}, w_{ij}^{obj}, h_{ij}^{obj}$ : 실제 ground truth box의 x, y, w, h

두 번째 항은 객체를 예측하도록 할당되지 않은 grid cell의 bounding box loss입니다. 그렇다면 객체를 예측하지 않아도 되는 grid cell에 대해서 loss를 구해주는 이유는 무엇일까요? 바로 해당 grid cell이 객체를 예측하지 않도록 학습시키기 위함입니다. 이는 오직 객체를 예측하도록 할당 받은 grid cell만이 객체를 예측하도록 학습시킨다는 것을 의미합니다. 예시를 보며 설명하도록 하겠습니다. 

Grid cell not responsible for

위의 이미지에서 객체인 스마일 마크를 detect하는 것이 목적입니다. 이를 위해 전체 이미지를 13x13 grid로 분할했습니다. 그 중 빨간색 네모에 해당하는 grid cell은 객체의 중심이 위치하였으며, 스마일 마크를 찾도록 할당(responsible for)됩니다. 반면 하늘색 네모에 해당하는 grid cell은 객체를 찾도록 할당되지 않았습니다. YOLO v2에서 모든 grid cell은 5개의 anchor box를 예측하고, 이는 객체를 예측하도록 할당받지 않은 grid cell도 마찬가지입니다.

 

하지만 객체를 예측하도록 할당받지 않은 grid cell이 넓은 크기의 anchor box를 예측하는 것은 불필요한 일입니다. 그럼에도 not responsible for한 grid cell을 학습에 포함시키는 이유는 모델이 불필요한 시도를 하지 않게끔 유도하기 위함입니다. 즉, responsible for한 grid cell이 정확하게 객체를 detect하는 것만큼이나 not responsible for한 grid cell이 객체를 detect하지 않도록 완전히 배제하는 과정도 필요한 것입니다. 이를 위해 객체를 detect하지 못하도록 anchor box의 위치와 범위를 grid cell과 같게 줄여버리는 방법이 있습니다. 이는 anchor box의 위치를 grid cell의 정가운데가 되도록, anchor box의 width, height가 grid cell과 같아지도록 학습시키면 됩니다. 이제 grid cell의 loss를 구하는 부분을 살펴보도록 하겠습니다. 

 

Localization loss

  • $\lambda_{noobj}^{coord}$ : 이미지 내에서 객체를 예측하도록 할당받은 grid cell의 수는 매우 많지만 객체의 중심을 포함한 grid cell에 비해 중요도가 떨어집니다. 이를 조정하기 위해 not responsible for한 grid cell에 대한 가중치값입니다. $\lambda_{noobj}^{coord}=0.1$로 지정합니다.
  • $x_{ij}^{anchor\_center}, y_{ij}^{anchor\_center}$ : 예측한 anchor box의 위치의 학습 목표로, grid cell 내의 중심 위치가 되도록, 0.5로 지정합니다. 이는 앞서 언급했듯이 예측한 anchor box를 grid cell 내 중심에 위치시키기 위함입니다. x, y 좌표가 grid cell 내 (0.5, 0.5)에 위치한 경우 grid cell의 중심입니다. 
  • $w_{ij}^{anchor\_default}, h_{ij}^{anchor\_default}$ : 예측한 anchor box의 크기의 학습 목표로, grid cell 전체 크기가 되도록 1로 지정합니다. 

Confidence loss

Confidence loss

  • $\lambda_{obj}^{conf}$ : 객체를 예측하도록 grid cell에 대한 가중치 파라미터입니다. $\lambda_{obj}^{conf}=5$로 지정합니다. 
  • $conf_{ij}^{pred}$ : $i$번째 grid cell의 $j$번째 anchor box의 confidence score를 의미합니다. 실제 객체를 포함하고 있다고 판단한 경우 1, 그렇지 않을 경우 0입니다. 
  • $iou(box_{ij}^{pred}, box_{ij}^{truth})$ : 예측한 anchor box와 ground truth box와의 IoU 값입니다. 
  • $\lambda_{noobj}^{conf}$ : 객체를 예측하도록 할당되지 않은 grid cell에 대한 가중치 파라미터입니다. $\lambda_{noobj}^{conf}=0.5$로 지정합니다. 

첫 항은 $conf_{ij}^{pred}$이 1이 되고, IoU 값이 1이 될 경우 loss가 가장 적어집니다. 반대로 두 번째 항은  $conf_{ij}^{pred}$가 1이 되면 loss가 가장 커집니다. 이는 not responsible for한 grid cell은 $conf_{ij}^{pred}$이

0이 될 경우, 즉 confidence score가 낮을수록 loss가 낮아짐을 의미합니다. 

 

Classification loss

 

Classification loss

  • $p_{ij}^{pred}(c)$ : 예측한 class probabilities입니다
  • $p_{ij}^{truth}(c)$ : 실제 class probabilities입니다

지금까지 살펴본 loss function에 따라 YOLO v2 네트워크를 학습시킵니다. 

 


YOLO v2 performance

YOLO v2는 mAP 값이 73.4%로, 당시 state-of-the-art 모델인 ResNet, Faster R-CNN과 비슷한 성능을 보였습니다. 하지만 detection 속도 측면에서 크게 앞섰습니다. 위의 그래프를 통해 YOLO v2가 사용하는 입력 이미지의 크기에 따라 정확도와 detection 속도의 trade-off가 발생한 다양한 선택지를 보여줍니다. 입력 이미지의 크기가 클 경우 정확도가 높아지지만 detection 속도가 느려지고, 입력 이미지가 작을 경우 정확도는 낮지만 detection 속도가 빨라집니다. 이는 상황에 맞게 YOLO v2 모델을 선택하여 문제를 보다 적합하게 해결할 수 있다는 점에서 의의가 있습니다. 

 

본 논문은 batch normalization, anchor box 등 최신 논문의 아이디어를 적극적으로 도입했던 점과, 네트워크 설계 과정에서 k-means clustering을 활용한 점이 상당히 흥미로웠습니다. 그리고 세 파트(better, faster, stronger)로 나눠 설명한 논문의 구성이 해당 논문을 읽고 생각을 정리하는데 도움이 되었던 것 같습니다. 다음 포스팅에서는 FPN 논문을 읽고 리뷰해보도록 하겠습니다. 

 

Reference

YOLO v2 논문(Better, Faster, Stronger)

pulluper님의 YOLO v2 논문 설명

89douner님의 YOLO v2 논문 설명

YOLO v2 architecture 그림

YOLO v2 loss function에 대한 글

One-stage-detector에 대한 좋은 글

Comments