개요
논문 링크: https://arxiv.org/abs/1612.08242
이전 글: 2023.01.24 - [paper review] - [논문 리뷰] YOLO-v1
- YOLO-V1은 빠르지만 성능이 뛰어난 편은 아니었다. 본 논문에서는 YOLO-v1의 성능을 어떻게 높이는 방안들을 제시한다.
- Detection dataset은 classification dataset에 비해서 dataset 사이즈도 작고, class label도 적다는 문제가 있다. 본 논문에서는 detection 문제를 해결하기 위해 classification dataset을 사용하는 방법을 제시한다.
방법
YOLO-v1의 문제점: low recall, large localization error.
1. Batch Normalization
모든 convolutional layer 뒤에 batch normalization 추가 (mAP: 63.4 -> 65.8)
Batch normalization이 regularization 효과가 있기 때문에 dropout 제거
2. Classification 학습을 448 resolution에서 실행
YOLO-v1에서는 ImageNet에 대해서 224 x 224 resolution으로 학습을 하고, detection에 대해서 448 x 448 resolution으로 학습했습니다. 이렇게 하면 이렇게 바로 resolution을 바꾸는 것보다 ImageNet에 대해서 224 x 224로 학습을 하고, 448 x 448로 추가적으로 10 epoch 동안 추가적으로 학습을 하면 resolution이 448 resolution에서 feature을 잘 뽑을 수 있게 neural network가 학습이 됩니다.(mAP: 65.8 -> 69.5)
3. Anchor Box 사용
Anchor box는 faster R-CNN에서 빌려온 개념입니다. YOLO-v1에서는 각 bbox (bounding box)마다 너비와 높이를 따로 따로 예측합니다. Anchor box를 사용하게 되면, k개 (여기서는 faster R-CNN과 여기서 k=9)의 다양한 모양과 사이즈를 갖는 bbox를 미리 정합니다. 그리고 이런 bbox 중 어떤 bbox가 물체를 찾았는지 (confidence score을 사용해서), 그리고 물체를 찾은 bbox의 너비와 높이가 미리 정해둔 bbox의 너비와 높이에서 어떻게 바뀌어야 하는지 예측을 합니다.
Anchor box를 도입하기 위해서 우선 neural net에서 fully connected layer을 다 제거하고, pooling layer을 하나 줄입니다. 또한 input image를 416 x 416으로 바꿉니다. 원래 YOLO-v1의 network는 448 x 448 -> 7 x 7 feature이 나오기 때문에 이렇게 바뀌면 416 x 416 -> 13 x 13이 됩니다. 참고로 큰 물체들은 이미지의 중심에 있는 feature로부터 찾기가 좋기 떄문에 feature 사이즈가 홀수인 것이 좋습니다 (448 대신 416을 사용한 이유)
YOLO-v1는 7x7x2=98개의 bbox를 예측했다면, 이 방법에서는 13x13x9 = 1521 개의 bbox를 예측합니다. Faster R-CNN과 같이 tx, ty, tw, th를 예측하는데 이 부분에 대해서는 5.에서 추가적으로 설명하겠습니다.
중요한 점은 anchor box를 사용하면 mAP는 69.5->69.2로 살짝 줄지만, recall은 81%->88%로 증가한다는 것입니다.
Recall이 높아야 모델이 좋아질 가능성이 높아지기 때문에 중요합니다 (predicted bbox 가 정확하지는 않아도 GT bbox와 겹치는 bbox가 많아지면 이런 bbox를 더 정확하게 예측하도록 바꿔서 precision을 높일 수 있음)
4. 더 좋은 anchor box 사용
Faster R-CNN과 위에서 사용한 anchor box는 인위적으로 고른 anchor box입니다. Anchor box를 더 잘 고를 수 있다면 더 좋은 성능을 기대할 수 있겠죠. YOLO-v2 논문에서는 두가지 방법을 소개합니다. 편의상 중심이 \( (0,0) \)이고 너비와 높이가 \( h, w \)인 상자를 \( B\)라고 하면:
1. Euclidean: \( d(B_1,B_2)=\sqrt{((w_1-w_2)^2+(h_1-h_2)^2)} \)
2. IOU score: \( d(B_1, B_2) = 1 - IOU(B_1,B_2)\)
원하는 것이 선택한 bbox들이 GT bbox와 IOU 가 높은 것이기 때문에 2번이 좋은 선택입니다. 참고로 1번은 큰 상자와 작은 상자를 차별화하기 때문에 적합하지 않습니다 (scale invariant 하지 않다는 뜻; 상자의 크기를 2배로 키우면 거리도 2배로 커짐; YOLO-v1에서 작은 물체에 대해서 localization error이 높은 것과 연관 있음).
distance metric이 주어지면 k-means clustering을 사용할 수 있습니다. 클러스터 개수에 대해서 평균 IOU를 그려보면 다음과 같은 그래프를 얻을 수 있습니다 (VOC 2007, COCO dataset)
Faster R-CNN같이 9개의 anchor box를 사용하면 average IOU=60.9를 얻을 수 있는데, k-means clustering을 사용하면 5개의 anchor box로 거의 동일한 (average IOU=60.1) 성능을 얻을 수 있습니다. 논문에서는 5개를 사용합니다.
5. bbox center 위치에 대한 제한
Faster R-CNN에서 사용하는 \( t_x, t_y, t_w, t_h\) 파라미터를 사용하면 학습이 잘 안 됩니다. 원인을 분석하기 위해서 bbox의 중심의 위치에 대한 식을 보면 \( x=t_x w_a - x_a\) (x: anchor box의 수평 방향 중심의 위치, w_a: anchor box의 너비, x_a: anchor box 중심 위치)로 주어지는데, t_x에 따라서 anchor box가 사진 어디에도 있을 수 있습니다 (위치에 대한 bound가 없음). 이렇게 parametrize 하는 방식은 YOLO의 grid cell을 사용하는 철학과 잘 맞지 않습니다. 그래서 다음과 같은 parametrization을 사용합니다:
- tx, ty, tw, th는 이전 사진 참고
- \( c_x, c_y\)는 해당 grid cell의 오른쪽 하단 코너의 위치
- sigmoid function (\( \sigma\))을 사용해서 \( b_x, b_y\)의 위치가 grid cell을 벗어날 수 없습니다 (sigmoid function의 값: 0~1, grid cell의 크기: 1)
k-means clustering으로 얻은 anchor box와 bbox center의 위치에 대한 제한을 주면 mAP가 5% 정도 좋아집니다.
6. fine-grained feature 사용
작은 물체에 대해서는 down-sampling을 많이 안 한 feature을 사용하는 것이 유리합니다. neural network 앞쪽에 있는 (2 x 13) x (2 x 13) x 512 feature을 13 x 13 x (4 x 512)로 reshape 하면 (각 2 x 2 x 512 feature을 channel 방향으로 flatten 한다는 뜻) 기존의 13 x 13 x 512 feature에 channel 방향으로 concatenate 할 수가 있습니다. 이렇게 커진 feature로 학습을 하면 mAP가 1% 정도 좋아집니다.
7. multi-scale training
이때까지 416 x 416 resolution으로 학습을 했지만, network가 32배 downsampling 하기 때문에 32의 배수인 이미지에 대해서 동일하게 detection을 학습시킬 수 있습니다. 학습할 때 10 batch마다 {320. 352,.... 608}에서 resolution을 선택해서 학습을 시키면 성능이 조금 좋아지고, 544 resolution에서 당시 VOC 2007에 SOTA를 찍었습니다.
리뷰에서 스킵한 내용:
논문에서 핵심 아이디어는 아닌 것 같아서 건너뛴 내용들:
- Darknet-19: detection을 위한 새로운 neural net
- 학습 디테일
- classification과 detection에 joint 학습하는 방법 제시
'논문 리뷰 > object detection' 카테고리의 다른 글
[논문 리뷰] PP-YOLO v1 (+v2) (3) | 2023.05.26 |
---|---|
YOLOv5 정리 (2) | 2023.05.19 |
[논문 리뷰] YOLOv4 (상세 리뷰) (0) | 2023.04.11 |
[논문 리뷰] YOLOv3 (0) | 2023.02.22 |
[논문 리뷰] YOLOv1 (0) | 2023.01.24 |