YOLO v2 논문 리뷰

김상현·2021년 6월 28일
3

논문 제목: YOLO9000: Better, Faster, Stronger

개요

9000종류의 객체를 탐지할 수 있는 최신의 실시간 object detection system YOLO9000을 소개한다.

먼저 기존 YOLO 모델을 개선시킨 YOLO v2를 제안한다. YOLO v2는 PASCAL VOC, COCO detection data에 대해 당시 최신의 성능을 보여줬다. VOC 2007 data에서 67fps로 76.8mAP를 달성했으며, 40 fps로 78.6mAP를 달성했다. 이는 당시 최신 모델들인 Faster R-CNN과 SSD를 능가하는 수치인 것과 함께 YOLO의 장점인 빠른 실행 속도를 유지한다.

또한 object detection과 classification을 함께 학습시키는 방법을 제안한다. 이 방법을 이용해 YOLO9000을 COCO detection dataset과 ImageNet classification dataset을 이용해 동시에 학습시킨다. 이를 통해 detection dataset에 존재하지 않는 label들에 대해 예측이 가능하며 여전히 빠른 실행 속도를 유지하며 9000개 이상의 object category에 대해 예측한다.


Better

기존 YOLO 모델에서 분류 정확도를 유지하면서 recall과 localization을 향상시키는 것에 집중했다. 성능 향상을 위해 다양한 아이디어를 기존 모델에 적용했다.

Batch Normalization

YOLO의 모든 convolution layer들에 batch normalization을 추가해서 mAP를 2% 향상시켰다. 또한 모델의 정규화를 도와 overfitting 없이 dropout을 제거할 수 있었다.


High Resolution Classifier

기존의 YOLO는 224x224 해상도의 입력으로 classifier network를 학습한 후 448x448 해상도의 입력으로 detection network를 학습했다. 이는 object detection을 학습하면서 동시에 새로운 해상도에 적응해야 하는 것을 의미한다.
이를 해결하기 위해 448x448 해상도의 입력으로 10epoch fine-tune을 진행한 후 448x448 해상도의 입력으로 detection network 학습을 진행한다. 이를 통해서 mAP를 대략 4%정도 향상시켰다.


Convolutional With Anchor Boxes

기존의 YOLO는 fully-connected layer를 통해 bounding box들의 좌표를 직접 예측한다. 이러한 방식보다 anchor box를 이용해 offset을 예측하는 방식이 해결해야할 문제를 단순화하고, network의 학습을 쉽게 한다. 따라서 YOLO의 fully-connected layer를 제거하고 bounding box 예측을 위해 anchor box를 이용한다.

하나의 가운데 cell을 갖는 feature map을 위해 홀수 개의 위치를 갖는 feature map을 생성하기 위해 입력의 해상도를 416x416으로 축소시켰다. 이는 큰 객체가 보통 이미지의 중앙을 차지하는 경우가 많아서 가운데 cell이 하나인 feature map이 예측을 더 잘 수행하기 때문이다. YOLO의 downsampling 비율은 1/32이므로 13x13의 feature map을 얻게 된다.

Anchor box를 이용한 경우 정확도의 감소가 있었다. 수치상으로 보면 anchor box를 이용하지 않은 경우 mAP는 69.5이고, recall은 81%이다. Anchor box를 이용한 경우 mAP는 69.2이고, recall은 88%이다. 이와 같은 수치는 비록 mAP는 감소했지만 recall이 높아졌으므로 모델의 성능 향상의 여지를 말해준다.


Dimension Clusters

기존 모델들에서는 anchor box의 크기와 aspect ratio를 사전에 수작업(hyperparameter)으로 정의해서 사용한다. 논문의 저자들은 수작업으로 정의하는 방법보다 더 좋은 사전 anchor box들을 이용하면 더 좋은 detection 성능을 보여줄 것이라 생각했다.

이를 위해 k-means clustering 방법을 통해 자동으로 training dataset의 ground truth를 clustering해서 anchor box의 크기와 aspect ratio를 정의한다.

기존의 k-means clustering에서 Euclidean distance를 이용할 경우 큰 bounding box가 작은 bounding box에 비해 큰 error를 발생시키는 문제가 있다. 따라서 저자들은 box 크기에 무관하게 좋은 IoU 값을 갖게 하는 새로운 distance를 사용한다.

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

다음 사진 1을 통해 cluster 개수별 avg IOU와 computation을 고려해 YOLO v2에서 k=5를 활용한다.

사진 1. dimension cluster

사진 2. prior by hand vs k-means

위의 사진 2를 통해 사전에 hyperparameter로 정의한 9개의 anchor box들 보다 k-means를 활용해 정읜된 5개의 anchor box들의 IoU가 높은 것을 확인할 수 있다. 이는 학습을 더 쉽게 할 수 있다는 것을 나타낸다.


Direct location prediction

사진 3. YOLOv2 box

x=(txwa)xax = (t_x * w_a) - x_a
y=(tyha)yay = (t_y * h_a) - y_a

기존의 방법들은 위의 수식과 같이 tx,tyt_x, t_y를 이용해 bounding box의 x,y 좌표를 예측한다. 이러한 경우 tx,tyt_x, t_y가 유계되지 않아서 anchor box 외부의 좌표로 예측하는 경우가 발생하고 이는 초반의 학습을 어렵게 만든다.

YOLO v2는 각 cell에 대해 5개의 bounding box를 예측하고, 각 bounding box마다 5개의 값을 예측한다. 예측되는 값 5개는 tx,ty,tw,th,tot_x, t_y, t_w, t_h, t_o 이다. 예측된 5개의 값을 이용해 bounding box의 위치 정보와 그에 해당하는 confidence score를 예측한다. 수식으로는 다음과 같다.

bx=σ(tx)+cxb_x = \sigma(t_x) + c_x
by=σ(ty)+cyb_y = \sigma(t_y) + c_y
bw=pwetwb_w = p_w e^{t_w}
bh=phethb_h = p_h e^{t_h}
Pr(object)IOU(b,object)=σ(to)Pr(object)*IOU(b, object) = \sigma(t_o)

bx,by,bw,bhb_x, b_y, b_w, b_h: bounding box의 (x,y)좌표와 width,height
cx,cyc_x, c_y: cell의 좌측 상단 (x,y) 좌표 값
pw,php_w, p_h: anchor box의 width, height
σ\sigma: logistic activate function(sigmoid)

위에서 언급한 기존의 문제를 해결하기 위해 위의 수식과 같이 sigmoid를 활용해 x,y 좌표를 예측해 각 cell안에 x,y 좌표가 유계되게 학습을 시킨다. 이를 통해 학습을 쉽게 만들고, network를 안정시킨다.

Dimension clustering과 direct predicting을 통해 5%의 성능 향상시켰다.


Fine-Grained Features

YOLO v2의 13x13 feature map은 큰 물체를 탐지하는데 충분할 수 있으나 작은 물체를 잘 탐지하지 못 할 수 있다. 이를 해결하기 위해 13x13 feature map을 얻기 전의 앞 쪽의 layer에서 26x26 해상도의 feature map을 passthrough layer를 통해 얻는다.

사진 4. fine-grained features

위의 사진 4와 같이 26x26x512 -> 13x13x2048로 분해한 후 기존의 output인 13x13 feature map과 concatenate를 수행한다. 이러한 방법으로 1%의 성능을 향상시켰다.


Multi-scale Training

기존의 YOLO와 다르게 다양한 입력 차원에 robust한 YOLO v2를 위해 학습시 multi-scale training을 수행한다.

multi-scale training

  • 10개의 batch들 마다 새로운 이미지 차원을 적용해서 학습한다.
  • YOLO v2가 1/32배의 downsample을 진행하므로 학습시 사용되는 이미지 차원들은 32의 배수가 되게 한다. ex){320, 352, ..., 608}

이러한 multi-scale training이 가능한 이유는 YOLO v2가 fully convloution network의 구조를 갖고 있기 때문이다. 따라서 YOLO v2는 다양한 입력 차원에 적용이 가능하고, 이에 대한 실험 결과는 다음 사진 5와 같다.

사진 5. multi-scale performance

위의 실험 결과를 통해 mAP와 FPS의 trade off 관계를 알 수 있다.


Faster

논문의 저자들은 높은 정확도를 갖으면서 기존의 YOLO와 같은 빠른 속도의 모델을 개발하기 원했다. 이를 위해 자체적으로 개발한 Darknet-19을 backbone network로 사용한다. 이는 기존에 다른 모델들이 주로 사용하는 VGG보다 빠르면서 유사한 성능을 보여준다.

Darknet-19

사진 6. darknet-19

Darknet-19의 특징

  • vgg와 같은 3x3 filters 사용
  • Network In Network 구조 사용
  • Global average pooling

Darknet-19의 전체 구조는 사진 6과 같다.


Training for classification

먼저 ImageNet dataset을 이용해서 classification task에 대해 학습을 진행한다. 위에서 언급한 것과 같이 224x224 해상도로 학습을 한 후 detection training 이전에 448x448 해상도로 fine-tuning을 진행한다.


Training for detection

Detection을 수행하기 위해 classification때 사용한 network을 수정한다. 마지막의 convolution layer를 제거하고, 이에 3x3 convolution을 적용한다. 이후 1x1 convolution을 적용한다. 이때 1x1 convolution filter의 개수는 원하는 output의 차원과 같다.

YOLO v2의 VOC dataset의 경우 5개의 anchor box에 대해 각각 5개의 coordinates 예측과 category 20개의 예측을 수행하므로 5x(5+25)=125의 output 차원을 갖는다.


Stronger

YOLO v2는 classification과 detection dataset을 함께 학습시키는 방법을 제안한다. Detection data에 대해서는 YOLO v2의 full loss를 역전파한다. Classification data에 대해서는 classification 부분에 해당하는 loss들만 역전파한다.

이때 각 dataset의 label이 다르다는 문제가 존재한다. 예를 들면, detection data의 경우 "dog"와 "boat"와 같은 label이 있는 반면 classification data의 경우 더 세세한 분류인 "Norfolk terrier", "Yorkshire terrier", "Bedlington terrior"와 같은 label이 있다. 이는 softmax의 mutually exclusive 가정을 위배한다. 이러한 문제를 해결하기 위해 multi-label model을 사용한다.

Hierarchical classification

ImageNet의 label들은 WordNet data로 부터 구성된다. WordNet은 자연어의 복잡한 관계에 의해 directed graph로 되어 있다. 논문의 저자들은 이들의 가장 짧은 path를 이용해 계층적 tree 구조인 WordTree를 만든다.

사진 7. WordTree

WordTree의 계층적 구조를 이용해 각 label에 대한 조건부 확률을 구한다. 조건부 확률의 예시는 다음과 같다.

Pr(Norfolk terrierterrier)Pr(Norfolk\ terrier|terrier)
Pr(Yorkshire terrierterrier)Pr(Yorkshire\ terrier|terrier)
Pr(Bedlington terrierterrier)Pr(Bedlington\ terrier|terrier)

특정한 노드의 absolute probability를 계산하고 싶다면 root node부터 tree 구조를 따라 조건부 확률들을 곱해나가면 된다. 예시는 다음과 같다.

사진 8. Probability example

사진 9. ImageNet vs WordTree

학습을 진행할 때 사진 9의 WordTree1k와 같은 multi-label을 이용한다. 같은 색깔을 갖는 부분들이 각각의 softmax에 적용되는 mutually exclusive한 부분으로 WordTree에서 같은 단계에 존재하는 노드들 이다. 이를 이용해 위에 나온 조건부 확률들의 곱을 이용해 확률을 구해 학습을 수행한다.


Dataset combination with WordTree

WordTree를 이용한 방법은 ImageNet데이터 뿐만 아니라 COCO와 같은 다른 데이터들과 결합할 때에도 사용가능하다.


Joint classification and detection

WordTree를 이용해 COCO detection set과 ImageNet의 top 9000개의 범주를 포함한 data set을 결합시킨다. 이를 통해 9418개의 범주를 갖는 dataset을 사용한다. 이 때 ImageNet과 COCO의 데이터양을 고려해서 학습시 비율을 4:1이 되게 조정한다.

학습 시, 위에서 언급한 것과 같이 detection data의 경우 full loss를 역전파하고, classification data의 경우 classification loss 부분만 역전파 한다. 또한 classification에서 label의 하위 범주(node)들은 학습에 고려하지 않고, 상위 범주(node)들만 고려한다. 예를 들면, 범주가 "dog"인 경우 상위 범주인 "animal"은 고려해서 학습하지만 하위 범주인 "terrier"는 고려하지 않는다.

이러한 학습 방법을 통해 YOLO v2는 9000개 이상의 범주를 detection할 수 있는 YOLO9000이 된다. 이를 따서 논문의 제목이 "YOLO9000"이 되었다.


Conclusion

본 논문에서는 당시 SOTA의 성능을 보이며 다른 detection model들에 비해 빠른 YOLO v2를 제안했고, classification과 detection을 함께 수행해 9000개 이상의 범주를 detection하는 YOLO9000을 제안했다.


References

YOLO v2 논문: YOLO9000: Better, Faster, Stronger

https://herbwood.tistory.com/17?category=856250

https://m.blog.naver.com/sogangori/221011203855

https://www.youtube.com/watch?v=6fdclSGgeio

profile
Mucha Suerte

0개의 댓글