원문
YOLO9000: Better, Faster, Stronger
Link : https://arxiv.org/abs/1612.08242
YOLO9000: Better, Faster, Stronger
We introduce YOLO9000, a state-of-the-art, real-time object detection system that can detect over 9000 object categories. First we propose various improvements to the YOLO detection method, both novel and drawn from prior work. The improved model, YOLOv2,
arxiv.org
Introduction
해당 논문에서는 yolov2
와 yolo9000
을 소개하고 있다. yolov2
는 yolov1
을 개선한 버전이고, yolo9000
은 9000개의 카테고리를 탐지할 수 있도록 학습된 신경망이다.
Better
해당 파트에서는 yolov1
을 개선한 방법들을 소개한다.
우선 yolov1
의 단점은 아래와 같다.
- localization error가 많다.
yolov1
은 다른 모델과 비교했을 때, localization error가 많다. localization error는 바운딩 박스 위치를 제대로 Detection하지 못하는 것이다. - recall이 낮다.
따라서 저자는 localization과 recall을 개선하는데 집중했는데, 더 나은 성능을 얻기 위해서 신경망의 크기를 키우거나 모델을 앙상블하는 기법이 주로 사용된다. 하지만 저자는 모델이 빠르게 작동하기를 원하기 때문에 신경망을 간소화하고 표현력을 쉽게 학습할 수 있도록 했다.
Batch Normalization
Batch Normalization
기법을 이용해 다른 regularization의 필용성을 없애고 신경망을 더 빠르게 수렴하도록 했다. 모든 convolutional layer에 Batch Normalization
을 이용하여 mAP를 2% 상승시켰고 dropout을 제거했다.
High Resolution Classifier
yolov1
은 VGG16을 기반으로 입력 이미지 224x224로 했습했다. 하지만 detection을 할때는 448x448 크기의 이미지를 이용했는데 이 때문에 성능이 떨어졌다.
이를 해결하기 위해 yolov2
는 ImageNet dataset에서 448x448 이미지로 fine tuning을 했다. 이렇게 고 해상도 이미지로 학습된 CNN 신경망은 mAP를 4% 증가시켰다.
Convolutional With Anchor Boxes
yolov1
에서는 FC layer를 통해서 Bounding Box를 예측했지만 yolov2
에서는 Fc layer를 제거하고 anchor box
를 통해서 예측한다. 이를 위해서 2가지 변화를 주었다.
- 한 개의 pooling layer를 제거했다.
pooling layer를 제거함으로써 convolutinal layer의 출력을 고 해상도로 만들었다. - 입력 이미지 크기를 448x448 크기로 사용한다고 했지만, 네트워크를 줄여 416x416 크기의 입력 이미지를 사용한다.
416x416 크기의 이미지를 사용하면 13x13의 feature map이 얻어지게 되는데 최종 ouput feature map의 크기를 홀수x홀수로 지정해주는 것이 좋다고 저자들이 생각했기 때문이다. 그 이유는 이미지의 중앙에 하나의 grid cell이 위치하기 때문이다.
이렇게 anchor box
를 이용하여 mAP는 감소했지만 recall이 증가했다.
Dimension Clusters
anchor box
란 사전에 크기와 비율이 모두 결정되어 있는 박스를 전제하고, 학습을 통해서 박스의 위치나 크기를 세부 조정하는 것을 말한다. 처음부터 중심점의 좌표와 너비, 높이를 결정하는 방식보다 훨씬 안정적으로 학습이 가능하다.
기존의 anchor box
는 비율을 1:2, 1:1, 2:1로 설정하는 것이 일반적이었지만 yolov2
는 여기에 learning algorithm을 적용한다.
저자는 coco 데이터 셋의 바운딩 박스에 K-means clustering
을 적용했고, 그 결과로 앵커 박스를 5개로 설정하는것이 좋다고 결론지었다.
Direct Location Prediction
anchor box
를 활용한 Bounding Box offset 예측법은 Bounding Box의 위치를 제한하지 않아서 초기 학습시 불안정하다는 단점이 있다. 이러한 문제를 해결하기 위해 저자는 grid cell에 상대적인 위치 좌표를 예측하는 방법을 선택했다. 이는 예측하는 bounding box의 좌표는 0~1 사이의 값을 가지는것을 의미한다.
Bounding Box 중심 좌표 예측값을 시그모이드 함수로 감싸 Bounding Box의 위치를 제한하여 안정적으로 학습이 가능해진다.
Fine-Grained Features
yolov2
는 위에서 말한것 처럼 13x13 feature map을 출력한다. 하지만 해당 크기는 큰 물체를 검출할 때는 충분하지만, 작은 물체를 검출할 때는 불충분하다. 이러한 문제점은 Faster R-CNN
과 SSD
는 다양한 크기의 feature map에서 영역을 제안하여 문제를 해결했다.
하지만 yolov2
는 다르게 접근했는데 바로 상위 layer의 feature map을 하위 layer feature에 합쳐주는 passthrough layer
를 도입했다.
위 그림과 같이 높은 해상도를 가진 26x26x256 feature map을 13x13x2048 크기로 rescale하여 낮은 해상도의 feature map과 합쳐 13x13x3027 크기의 feature map을 만들어 냈다. 이를 이용해 1% 정도의 성능을 향상 시켰다.
Multi-Scale Training
작은 물체들을 검출하기 위해서 yolov2
는 다양한 스케일의 이미지를 학습할 수 있도록 했다. 이러한 방법이 가능한 이유는 앞에서 FC layer를 떼어냈기 때문에 입력 이미지의 크기에서 자유로워졌기 때문이다. 따라서 입력 이미지의 크기를 32배수 중에서 선택할 수 있게 되었다.
위의 모든 방법을 이용한 결과는 아래 그림과 같다.
Faster
Faster에서는 yolov2
에서 사용하는 backbone network인 Darknet-19
를 소개하고있다. 해당 network의 전체구조는 아래와 같다.
우리가 흔히 알고있는 VGG
와 크게 다르지 않지만 MaxPooling을 줄이고 Convolution 연산을 늘린것을 알 수 있다. 또한 마지막 단계에서 FC layer를 제거하고 Convolution 연산으로 대체하여 파라미터를 줄여서 경량화 시켰다.
Stronger
Stronger에서는 yolo9000
을 소개하고 있다. yolo9000
은 9000개의 class를 검출할 수 있어서 yolo9000
으로 부른다.
Hierarchical Classification
먼저 다른 모델들과 달리 방대한 크기의 class에 대해 classification을 수행할 경우 계층 적으로 분류작업을 수행해야 한다고 제시했다. 따라서 저자는 Softmax 연산을 수행할 때 전체 클래스에 대해서 한번에 수행하지 말고, 각 대분류 별로 Softmax를 수행할 것을 제안했다.
Dataset combination with WordTree
저자는 이러한 계층 구조를 도입하여 아래와 같이 coco와 imageNet 데이터 셋의 라벨을 트리 구조를 활용해 wordtree를 만들었다.
Joint classification and detection
학습을 할때는 wordtree로 학습을 한다. 이미지넷이 coco dataset보다 많기 때문에 4:1의 비율로 oversampling한다. 그리고 출력 사이즈의 한계 때문에 5개가 아닌 3개의 prior을 사용하여 yolo9000
을 학습한다.
여기서 classification loss는 해당 클래스와 그것의 상위 클래스에 대해서만 역전파를 진행한다.