논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

YOLO9000: Better, Faster, Stronger

1. Introduction

현재의 객체 검출을 위한 데이터셋은 객체 분류나 태깅(tagging)에 비해서 분량이 차이가 있습니다. 검출을 위한 이미지의 레이블링 작업은 분류나 태깅의 그것보다 상당히 비싼 작업이기 때문입니다. 따라서 앞으로도 검출용 데이터셋은 분류용 데이터셋보다는 그 양이 적을 것이라고 예상할 수 있습니다.

이 논문에서는 이미 우리가 가지고 있는 분류 데이터를 이용하여 현재의 검출 시스템을 확장하는 방법을 제안합니다. 제안하는 방법은 객체 분류의 계층적 관점을 이용하여 서로 다른 데이터셋을 서로 통합할 수 있도록 합니다.

또한 통합 학습 알고리즘(joint training algorithm)을 이용하면 검출과 분류용 데이터를 모두 이용하여 객체 검출기를 학습할 수 있도록 합니다. 분류용 데이터에서는 객체의 정확한 위치를 배우도록 하고, 분류용 이미지에서는 그것의 종류와 강인함을 배우도록 하였습니다.

이러한 방법을 통해 기존의 YOLO를 향상시킨 YOLOv2를 설명하고, 이를 이용하여 9000개의 클래스를 분류할 수 잇는 YOLO9000을 제안합니다.

2. Better

YOLO와 R-CNN의 에러를 비교해보면 YOLO가 생성한 위치(localization) 에러가 상당하다는 것을 알 수 있습니다. 또한 YOLO는 상대적으로 낮은 리콜을 보입니다. 이를 개선하기 위해서는 단순히 네트워크 크기를 늘리는 방법도 있겠지만, 속도를 유지하기 위해서 네트워크는 그대로 유지하는 방법을 택했습니다. 대신 네트워크를 조금 단순화하고, 학습하기 쉬운 표현을 사용하였습니다.

Batch Normalization. Batch Normalization은 수렴성을 좋게 하여 주면서도, regularization의 필요성을 경감시켜줍니다. YOLO에 이를 적용하여 2%의 mAP 향상을 얻었습니다. 또한 dropout을 모델에서 제거하여도 오버피팅이 생기지 않아 이를 제거할 수 있었습니다.

High Resolution Classifier. 기존의 224 x 224를 사용하던 YOLO의 입력을 448로 늘렸습니다. 처음에는 448 x 448 해상도에서 ImageNet을 이용하여 10 에폭(epoch)으로 분류 네트워크를 파인튜닝하여 고해상도에서 잘 작동할 수 있도록하였습니다. 이렇게 학습된 네트워크를 검출에 파인튜닝하였습니다. 이 방법으로 4%의 mAP 상승이 있었습니다.

Convolution With Anchor Boxes. YOLO는 바운딩 박스의 위치를 완전 컨볼루셔널 특징 추출기로부터 나온 특징 벡터에 연결 레이어를 통해 직접 유추하였습니다. 하지맞 Faster R-CNN에서는 사람이 정해준 프라이어(hand picked prior)를 이용하여, 각 앵커 박스를 기준으로 오프셋과 신뢰도를 유추합니다. 마지막 레이어는 컨볼루셔널 레이어이므로 모든 위치에서의 박스 위치 정보는 오프셋으로 표현되어 문제가 단순화되고, 따라서 학습이 쉬워집니다.

YOLO에서 마지막 완전 연결 레이어를 제거하고 앵커박스를 이용하여 박스를 추정하였습니다. 먼저 풀링(pooling) 레이어 하나를 제거하여 높은 해상도에서 컨볼루셔널 레이어가 동작하도록 하고, 마지막 특징 맵의 중앙이 이미지 중앙에 위치하도록 이미지 입력 크기를 416으로 수정하였습니다. 이렇게 하여 최종적으로 13 x 13의 특징 맵이 출력됩니다.

기존의 클래스를 유추하는 부분도 지역적인 위치와 분리하고 모든 앵커 박스마다 클래스와 objectness를 따로 유추하도록 하였습니다.

앵커박스를 사용하여 정확도(accuracy)는 약간 낮아졌지만, 더 많은 박스를 유추할 수 있게 되었습니다. 적용 전에는 69.5 mAP에 리콜이 81% 였지만, 적용한 후에는 69.2 mAP에 리콜이 88%가 되었습니다.

Dimension Cluster. 앵커를 적용하면서 박스의 크기를 사람이 정하는 대신, k-means 클러스터링을 학습셋에 적용하여 자동으로 좋은 크기를 정하도록 하였습니다. 이 때, 거리 값을 위해서 유클리디언 거리를 이용하지 않고 다음의 메트릭을 이용하였습니다.

$$ d(\text{box}, \text{centroid}) = 1 - \text{IOU}(\text{box}, \text{centroid})$$

실험을 통해서 $k=5$를 사용하도록 하였습니다. 이렇게 만들어진 박스는 손으로 만든 것과 꽤 달라, 높이가 낮고 넓은 박스나 얆고 키가 큰 박스들도 포함하고 있었습니다.

사람이 만들어준 9개의 앵커 박스를 사용하였을 때의 평균 IOU가 60.9인 반면 5개의 클러스터링을 이용하여 만들었을 때의 평균 IOU는 61.0으로 이를 상회하였습니다.

Direct location prediction. 앵커 박스를 사용할 경우 학습 초기에 모델이 불안정한 면이 있엇습니다. 대부분의 불안정성은 박스의 $(x, y)$를 유추하는 부분이었습니다. Faster R-CNN에에서는 네트워크가 $t_x, t_y$를 유추하고 이것을 통해 객체의 중심을 $x = (t_x * w_a) - x_a, y = (t_y * h_a) - y_a$로 계산하였습니다. 예를들면 $t_x=1$은 박스를 오른쪽으로 이동하여 앵커 박스 우측 끝에 닿은 위치가 중심이 되도록 만들어줍니다. 마찬가지로 $t_x=-1$은 왼쪽 끝에 붙게 됩니다.

이를 응용하여 YOLOv2에서는 그리드 셀에 상대적인 값을 유추하도록 하였습니다 따라서 가능한 값의 범위는 0에서 1 사이의 값이 되고 이를 위해 logistic activation을 사용하엿습니다.

이제 네트워크는 각 셀마다 5개의 바운딩 박스를 유추하게 되는데 각 셀은 5개의 위치 정보 $t_x, t_y, t_w, t_h, t_o$를 유추합니다. 셀의 위치가 이미지 왼쪽 상단에서부터 $(c_x, c_y)$라고 하고 바운딩 박스의 크기가 $p_w, p_h$라고 한다면 유추된 박스의 크기는 다음과 같습니다.

$$ b_x = \sigma(t_x) + c_x \\ b_y = \sigma(t_y) + c_y \\ b_w = p_w e^{t_w} \\ b_h = p_h e^{t-h}$$

$$ Pr(\text{object}) * IOU(b, \text{object}) = \sigma(t_a) $$

이렇게 위치 정보를 파라미터화하여 학습하기 쉽게 만들어 네트워크가 더 안정적으로 되었습니다. Dimnesion Clustering을 적용했을 때를 기준으로 5%의 가까운 향상을 얻을 수 있었습니다.

Fine-Graded Features. 이렇게 생성된 13 x 13의 특징 맵은 큰 객체를 찾기에는 충분하지만, 작은 객체를 위해서는 세세한 특징이 있으면 더 좋습니다. Faster R-CNN과 SSD는 이를 위해서 여러 수준에 특징 맵에서 후보를 검출하게 됩니다. 여기에서는 다른 방법을 이용하여 바로 직전 26 x 26의 특징 맵의 특징을 그대로 가져오는 방법을 사용하였습니다. 높은 해상도의 특징을 낮은 해상도에 붙이기 위해서 ResNet과 같은 방법으로 인접한 특징들을 하나의 채널로 모두 만들어 주었습니다. 따라서 26 x 26 x 512의 특징 맵은 13 x 13 x 2048의 특징맵으로 변환되고 이것을 원래의 특징 맵에 붙이게 디보니다. 이를 통해 1%의 성능 향상이 있었습니다.

Multi-Scale Training. 원래 입력 크기는 448이었지만 앵커 박스를 사용하기 위해 416으로 변경되었습니다. 하지만 모델 자체가 컨볼루셔널과 풀링으로 이루어져 있기 때문에 얼마든지 모델의 크기를 바꿀 수 있습니다. 고정된 크기의 입력을 사용하는 대신, 매 10번의 배치마다 랜덤하게 입력 이미지 크기를 변경하고 학습을 계속하게 하였습니다. 입력이 32의 배수로 다운샘플링 되어있으므로 랜덤한 크기는 32의 배수로 결정되어야 합니다. 모델의 크기는 $ \{ 320, 352, \cdots, 668 \} $내에서 고르도록 하였습니다.

이러한 방법은 YOLOv2를 여러 입력 크기로 바꾸더라도 잘 동작하도록 유도합니다. 288 x 288의 YOLOv2는 90 FPS가 나오면서도 거의 Faster R-CNN에 가까운 mAP를 보여주었습니다. 544 x 544의 크기로 키운 모델에서도 VOC 2007에서 실시간으로 동작하면서도 78.6 mAP의 성능을 보았습니다.

Further Experiments. VOC2012와 COCO 데이터에서도 다른 알고리즘보다 좋은 성능을 얻었습니다.

3. Faster

Darknet-19. YOLOv2를 이용한 새로운 모델을 제안합니다. VGG모델과 마찬가지로 3 x 3필터와 모든 풀링 단계 이후로 채널을 2배씩 키우도록 하였습니다. Network In Network (NIN)에서처럼 3 x 3 컨볼루션 차이에 특징 맵을 압축할 수 있는 1 x 1 필터를 넣었습니다. 또한 안정적인 학습과 수렴을 빨리 하기 위해 batch normalization을 사용하였습니다.

이렇게 만들어진 Darknet-19는 19개의 컨볼루셔널 레이어와 5개의 최대 풀링(max pooling) 레이어를 가지고 있습니다.

Training for classification. ImageNet 1000 클래스 분류 데이터셋에서 Stochastic Gradient Descent 방법을 이용하여 0.1의 학습률로 160 에폭을 학습시켰습니다. 학습률을 4 제곱근으로 낮추어 주었으며, weight decay는 0.0005, 모멘텀은 0.9를 사용하였습니다. Augmentation으로는 random crop, rotation, hue, saturation, exposure shift를 사용하였습니다.

Training for detection. 이렇게 만든 네트워크의 마지막 컨볼루셔널 레이어를 걷어내고 3 x 3 x 1024 컨볼루셔널 레이어를 3개를 추가하고 마지막 1 x 1 컨볼루셔널 레이어를 추가하였습니다. VOC를 위해서는 마지막 레이어는 5개 박스마다 5개의 위치 정보와 20개의 클래스 정보를 유추하므로 125개의 필터를 가지게 됩니다. 또한 끝에서 2번째 3 x 3 x 512 레이어을 마지막 컨볼루셔널 레이어로 연결시켰습니다.

이 네트워크를 학습률 $10^{-3}$에서 시작하여 160 에폭을 진행하였습니다. 학습률은 60과 90에서 10으로 나누어주었습니다. 마찬가지로 weight decay는 0.0005, 모멘텀은 0.9를 사용하였습니다.

4. Stronger

또한 통합 학습 알고리즘을 통하여 검출 데이터셋과 분류 데이터셋을 한꺼번에 이용하였습니다. 두 데이터셋을 섞은 뒤 사용하였는데, 검출 데이터셋의 이미지는 YOLOv2의 로스 함수를 완전히 역전파하도록 하고, 분류 데이터셋의 이미지는 분류 부분만을 역전파 하도록 하였습니다. 이 방법은 한가지 문제가 있는데, 검출과 분류 데이터셋의 레이블 수준이 다르다는 점입니다. 분류 데이터셋이 비교적 더 넓고 깊은 범위의 카테고리를 다루고 있습니다. 보통 분류가 softmax 레이어를 통해 분류 작업을 하고 있습니다. 하지만 softmax는 각 레이블이 서로 상호 배제를 가정하고 있으므로, 여기서는 멀티 레이블 모델을 사용하여 이 문제를 해결하였습니다.

Hierarchical classification. ImageNet의 레이블은 WordNet에서 가져온 것입니다. WordNet은 언어 데이터베이스로 얼마나 그것들이 연관되어있는지에 대한 구조를 가지고 있습니다. WordNet은 트리가 아닌 directed graph로 표현이 되어있기 때문에 여기서는 이를 단순화하여 ImageNet에서와 같이 계층적인 트리를 만들어 사용하였습니다.

이제 어떤 한 노드(클래스)의 확률을 구하고자 한다면 트리를 루트노드까지 타고 올라가면서 나오는 모든 확률들을 곱해서 계산할 수 있습니다. 예를 들면 다음과 같습니다.

$$ Pr(\text{Norfolk terrier}) = Pr(\text{Norfolk terrier} | \text{terrier}) * Pr(\text{terrier | hunting dog}) * \cdot * Pr(\text{mamal | animal}) * Pr(\text{animal | phsical object}) $$

분류 작업을 위해서는 $Pr(\text{physical object}) = 1$로 가정하면 됩니다.

Dataset combination with WordTree. 이렇게 생성된 WordTree는 여러 데이터셋의 클래스들을 트리 형태로 서로 합칠 수 있습니다. 여기에서는 ImageNet과 COCO를 서로 합치도록 하였습니다.

Joint classification and detection. 이렇게 만들어진 WordTree를 이용하여 검출과 분류를 위한 통합 모델을 학습할 수 있게 되었습니다.

5. Conclusion

 


Add a Comment Trackback