약초의 숲으로 놀러오세요

YOLO v3 논문(YOLOv3: An Incremental Improvement) 리뷰 본문

Computer Vision/Object Detection

YOLO v3 논문(YOLOv3: An Incremental Improvement) 리뷰

herbwood 2021. 2. 15. 23:46

이번 포스팅에서는 YOLO v3논문(YOLOv3: An Incremental Improvement)을 읽고 리뷰해보도록 하겠습니다. YOLO v3는 당시 유행하던 새로운 기법들을 도입하여 성능을 향상시켰습니다. YOLO v2 논문과 비슷하게 새로 도입한 아이디어를 중심으로 설명합니다. 


Main Ideas

Bounding box Prediction

Bounding boxes with dimension priors and location

$$b_* = \sigma(t_*) + c_x \\ \sigma(t_*) = b_* - c_* \\ t_* = log(b_* - c_*)$$

 

YOLO v2는 bounding box를 예측할 때 $t_x, t_y, t_w, t_h$를 구한 후 위의 그림과 $b_x, b_y, b_w, b_h$로 변형한 후 L2 loss를 통해 학습시켰습니다. 여기서 $c_x, c_y$는 grid cell의 좌상단 offset입니다. 하지만 YOLO v3는 ground truth 좌표를 위의 공식을 거꾸로 적용시켜 $t_*$로 변형시킨 후 $t_x$와 직접 L1 loss를 통해 학습시키는 방식을 선택합니다. 가령 ground truth box의 x 좌표는 위의 공식을 통해 $t_*$로 변환됩니다. 

 

예측한 bounding box마다 objectness score를 logistic 함수를 적용하여 구합니다. 또한 prior box(anchor box)와 ground truth box와의 IoU 값이 가장 높은 box만 매칭시킵니다. ground truth box에 할당되지 못한 bounding box는 bounding box regression loss를 유발하지 않고, 오직 objectness score에 대한 loss만 발생시킵니다. 

Class Prediction 

 

Multi-label classification

각각의 bounding box는 multi-label classification을 수행합니다. 여기서 softmax 함수를 사용하여 class를 예측할 경우 성능 면에서 좋지 않기 때문에 binary cross-entropy를 사용합니다. 이러한 방식은 더 복잡한 데이터셋이 있을 때 유의미한 결과를 보여줍니다. 가령 하나의 box 안에 복수의 객체가 존재하는 경우 softmax 함수를 사용하여 class를 예측하면 적절하게 객체를 포착하지 못한다는 문제가 있습니다. 따라서 box에서 각 class가 존재하는 여부를 확인하는 binary-cross entropy가 보다 적절하다고 할 수 있습니다. 

Prediction across scales

Multi-scale feature map in YOLO v3

YOLO v3는 서로 다른 3개의 scale을 사용하여 최종 결과를 예측합니다. 여기서 multi-scale feature map을 얻는 방법은 FPN과 유사합니다. 먼저 416x416 크기의 이미지를 네트워크에 입력하여 feature map이 크기가 52x52, 26x26, 13x13이 되는 layer에서 feature map을 추출합니다.  

그 다음 가장 높은 level, 즉 해상도가 가장 낮은 feature map을 1x1, 3x3 conv layer로 구성된 작은 FCN(Fully Convolutional Network)에 입력합니다. 이후 FCN의 output channel이 512가 되는 지점에서 feature map을 추출한 뒤 2배로 upsampling을 수행합니다. 이후 바로 아래 level에 있는 feature map과 concatenate해줍니다. 이후 merged feature map을 FCN에 입력합니다. 이 과정을 다음 level에 있는 feature map에도 똑같이 수행합니다. 이를 통해 3개의 scale을 가진 feature map을 얻을 수 있습니다. 

 

이 때 각 scale의 feature map의 output channel 수가 [3 x (4 + 1 + 80)](=255)이 되도록 마지막 1x1 conv layer의 channel 수를 조정합니다. 여기서 3은 grid cell당 예측하는 anchor box의 수를, 4는 bounding box offset, 1은 objectness score, 80은 COCO 데이터셋을 사용했을 때의 class 수입니다. 즉, 최종적으로 52x52(x255), 26x26(x255), 13x13(x255) 크기의 feature map을 얻을 수 있습니다. 

 

이러한 방법을 통해 더 높은 level의 feature map으로부터 fine-grained 정보를 얻을 수 있으며, 더 낮은 level의 feature map으로부터 더 유용한 semantic 정보를 얻을 수 있습니다. 

Feature Extractor

Darknet-53

YOLO v3에서는 shortcut connection이 추가되어 53개의 layer를 가지는 Darknet-53을 backbone network로 사용합니다. Darkenet-53은 ResNet-101보다 1.5배 빠르며, ResNet-152와 비슷한 성능을 보이지만 2배 이상 빠릅니다. 또한 당시 초당 가장 높은 floating point operation 속도를 보여주었으며, 이는 GPU를 효율적으로 사용함을 의미합니다. 

Training YOLO v3

YOLO v3 architecture

1) feature map by Darknet-53

먼저 이미지를 입력하여 지정한 layer에서 52x52, 26x26, 13x13 크기의 feature map을 추출합니다. 

 

  • Input : 416x416 sized imaeg
  • Process : extract feature maps
  • Output : 52x52, 26x26, 13x13 sized feature maps

2) Building feature pyramid by FCN

YOLO v3 architecture

앞서 얻은 3개의 서로 다른 scale을 가진 feature map을 1x1, 3x3 conv로 구성된 FCN에 입력하여 feature pyramid를 설계합니다. 위에서 언급한 순서에 따라 진행되어 52x52(x255), 26x26(x255), 13x13(x255) 크기의 feature map을 얻습니다. 

 

  • Input : 52x52, 26x26, 13x13 sized feature maps
  • Process : building feature pyramid by FCN
  • Output : 52x52(x255), 26x26(x255), 13x13(x255) sized feature maps

3) Train YOLO v3 by loss function 

앞서 얻은 multi-scale feature maps를 loss function을 통해 학습시킵니다. 논문에서는 구체적으로 언급되지 않지만 YOLO v3의 loss function은 4개의 항으로 구성되어 있습니다. 

 

1) bounding box offset의 MSE(Mean Squared Error)

2) 객체를 예측하도록 할당된(responsible for) bounding box의 objectness score의 BCE(Binary Cross Entropy)

3) 객체를 예측하도록 할당되지 않은 bounding box의 no objectness score의 BCE

4) bounding box의 multi-class BCE

 

YOLO v2가 모든 예측 결과에 대하여 MSE를 적용한 반면 YOLO v3는 BCE를 주로 사용했습니다. 

Inference

Inference 시에는 마지막 예측 결과에 NMS(Non Maximum Suppression)을 적용합니다. 


YOLO v3 performance graph

YOLO v3는 RetinaNet에 비해서는 다소 낮은 성능을 보였지만, SSD와 성능이 비슷하지만 3배 이상 빠른 속도를 보였습니다. 위의 그래프에서 볼 수 있듯이 inference 속도 면에서 혁신적인 성과를 보여주었습니다. x,y축을 뚫고 가버리는 YOLO v3의 그래프가 인상적입니다🤣. 

 

여러 모로 흥미로웠던 논문이었습니다. 먼저 논문이 짧아서 좋았습니다😁. 그리고 논문에서 성공적으로 적용한 아이디어 외에도 Focal loss, linear x, y prediction 등 적용했다가 실패한 아이디어에 대해서도 언급했다는 점에서 상당히 흥미로웠습니다. 가장 인상 깊었던 점은 저자가 논문 말미에서는 컴퓨터 비전 연구원으로서 가지는 고찰을 표현한 부분입니다. 컴퓨터 비전 연구가 전쟁에 사용된다는 점을 안타까워하며, 컴퓨터 비전 연구 결과가 세상에 미칠 수 있는 부정적 영향을 깊이 고려하고 그 영향을 줄일 수 있는 방식을 연구자들이 찾아야한다고 촉구했습니다. 컴퓨터 비전 분야를 공부하는 입장에서 여러 가지 생각이 들었습니다. 다음 포스팅에서는 RefineDet 논문을 읽고 리뷰해도록 하겠습니다. 

 

Reference

YOLO v3 논문(YOLOv3: An Incremental Improvement)

Martin님의 YOLO v3 논문 리뷰

Hugegene님의 YOLO v3 loss function 설명

YOLO v3 구조 설명

Ethan Yanjia Li님의 YOLO v3 상세 설명

YOLO v2 논문 리뷰

Comments