Search
Login

YOLO9000: Better, Faster, Stronger

Created
2022/05/03
Editor
진정민
진정민
Tags
Vision
논문 : YOLO9000: Better, Faster, Stronger 저자 : Joseph Redmon, Ali Farhadi

논문 선정 배경

YOLOv1에 이어 YOLOv2 논문을 읽으면서 YOLO 모델에 대한 이해를 높이고자 선택하게 되었다. YOLO을 보완하여, 여러 참신한 기법을 적용하여 속도와 정확성을 모두 잡은 real-time detector인 YOLOv2를 소개할 예정이다.

Introduction

무려 9000 종류의 물체를 구분할 수 있는 real-time objector인 YOLO 9000 모델을 공개했다. 기존 YOLO 모델에 다양한 방법으로 개선하여 YOLOv2 모델을 만들었으며 dataset combination방법과 joint training 알고리즘을 이용하여 ImageNet과 COCO 데이터셋으로부터 9000 종류를 능가하는 모델을 훈련했다. yolov2 모델은 기존 yolov1 모델보다 better, faster, stronger한 부분을 제시한다. Yolov2는 PASCAL VOC와 COCO dataset에 대해 SOTA 모델이며 speed와 accuracy를 모두 가지는 모델이다.

Better

낮은 recall과 많은 localization을 가졌던 YOLO를 개선하기 위해 YOLOv2는 기존 YOLO 모델에서 분류 정확도를 유지하면서 recall과 localization을 향상시키는 것에 집중했다.
이를 위해 다음과 같은 다양한 기법을 yolo 모델에 적용하였다.
Batch Normalization
High Resolution Classifier
Convolutional With Anchor Boxes
Dimension Clusters
Direct location prediction
Fine-Grained Features
Multi-Scale Training

1)Batch Normalization

batch normalization을 정규화 역할을 하기 때문에 오버피팅을 방지한다.
YOLO의 모든 convolutional layer에 BN을 적용하여 mAP가 2%가 상승하였다.

2)High Resolution Classifier

기존의 YOLO는 classification network를 224x224 크기의 해상도로 학습한 후, 448x448 크기의 이미지에 대해서 detection을 수행하게 구성되어 있어 해상도가 맞지 않았다. 이를 detection 학습 전에 Image Classification 모델을 큰 해상도 이미지에 대해서 fine-tuning 함으로써 해결하였으며, 약 4% mAP가 증가했다고 한다.

3)Convolutional With Anchor Boxes

YOLOfully connected layer를 사용하여 바운딩 박스 좌표를 예측하는데, Faster R-CNN 과 같은 region proposal network (RPN) 계열convolution layer 만을 사용하여 최종 feature map 의 각 픽셀 별로 앵커 박스를 설정하고 이에 대한 offset 과 confidence를 예측한다. YOLO와 같이 좌표를 직접 학습하는 것보다 미리 정의된 앵커 박스에 대한 비율을 예측하는 것이 학습이 더 쉽기 때문에 YOLOv2 에서는 RPN 방식을 사용한다. 따라서 YOLO 모델에서 fc layer를 제거하였고, 바운딩 박스 예측을 위해 앵커 박스를 사용했다.
또한, feature map 크기를 늘리기 위해 max-pooling layer 를 하나 삭제하고 최종 feature map 크기가 13x13 같이 홀수로 만들기 위해 입력 이미지를 416x416 크기로 하였다. 이를 통해 receptive 속도도 빨라지고, 최종적인 grid cell의 receptive field가 더 커진다고 한다.
@Hyune Lee 위 내용 중에서 최종 feature map의 크기를 홀수로 잡는 이유가 와닿지 않는 것 같습니다..!
@진정민 convention이라고 생각하면 편합니다. 그런 convention이 생긴 이유는 cnn은 기본적으로 입력에 대한 인코딩을 수행하는 것인데, 이때 홀수가 아닌 짝수인 feature map으로 인코딩을 하면 입력에 대한 정보가 feature map에 중심으로 부터 symmetric하게 분포되지 않습니다(짝수는 center point가 불명확하므로). 이로 인해 인코딩에 왜곡이 발생하고 이는 cnn layer를 여러개 지날수록 심해집니다. 즉 cnn의 가장 큰 강점인 spatial information capturing 능력이 저하되는 것 입니다. 따라서 입력 정보의 공간 특성을 최대한 유지할 수 있는 홀수 크기의 feature map을 사용하는게 convention이 된 것입니다.
@Hyune Lee 아하 그렇군요!! 이해 됐습니다! 자세한 설명 감사드립니다
그리드 셀마다 object가 존재할 것 같은 5개의 anchor box를 찾고, yolov1과 달리 anchor box 별로 pcp_c를 계산한다. (YOLOv1의 경우 같은 그리드 셀에서 예측한 바운딩 박스는 같은 pcp_c를 갖는다.)
yolo로는 한 이미지 당 오직 98개의 바운딩 박스만을 예측하지만, yolov2는 1000개 이상의 바운딩 박스를 예측한다. 수치상 anchor box를 이용하지 않은 경우 mAP는 69.5, recall은 81%이고 Anchor box를 이용한 경우 mAP는 69.2, recall은 88%으로 비록 mAP는 감소했지만 recall이 높아졌으므로 모델의 성능 향상의 여지를 말해준다.

4)Dimension Clusters

기존에는 anchor box ratio, size를 사전에 미리 정했는데(hand pick), 대신에 YOLOv2에서는 VOC data, COCO data에 존재하는 object의 bounding box를 clustering을 하여 scale과 ratio를 자동으로 결정하고 이를 통해 groundtruth와 가장 유사한 optimal anchor box를 탐색한다.
거리를 잴 때 일반적인 Euclidean 거리를 중심에 대해 적용하면, ground truth 와 다른 엉뚱한 앵커박스가 군집화될 가능성이 높다. 파란색 박스는 ground truth, 빨간색 박스는 앵커 박스 prior라 할 때 왼쪽의 경우는 매우 비슷하더라도 중간과 오른쪽 앵커 박스 prior 에 비해 중심점 사이의 거리가 멀어 같은 군집으로 할당되지 못할 수 있다.
Euclidean 거리가 가까움에도 groundtruth와 앵커박스가 많이 상이할 수 있다. 따라서 박스 크기와 무관하게 IOU가 높아지도록 하기 위해
1-IOU(box,centroid)를 Euclidean 거리 대신 사용한다.
여러 k를 적용해본 결과, k=5일때 recall과 모델의 복잡성이라는 tradeoff 관계에서 좋은 결과를 주어 k=5를 사용한다.

5)Direct location prediction

YOLOv1에서는 바운딩 박스의 (x,y)좌표(바운딩 박스의 중심좌표)가 random하게 설정되어 초기 학습에 어려움이 있었고, region proposal network에서는 아래식과 같이 txt_x, tyt_y를 예측하는데
만약 txt_x가 1이면 prediction box는 anchor box의 가로만큼 오른쪽으로 이동, -1이면 왼쪽으로 이동한다. 하지만 이를 사용해도 초기값에 대한 문제는 해결이 되지않는다. tx,tyt_x, t_y 의 제한된 범위가 없기 때문에 훈련 초기에 앵커 박스가 이미지 어디에도 위치할 수 있어 모델이 랜덤하게 초기화 되었을 때 수렴이 오래 걸리고 훈련 초기가 불안정해지게 된다.
따라서 YOLOv2는 YOLO 모델의 접근에 region proposal network에서 사용한 방식을 수정하여 사용하였다. 기존의 yolo가 그리드의 중심점을 예측했다면, yolov2에서는 left top 꼭지점으로부터 얼만큼 이동하는 지를 예측한다. YOLOv2는 YOLO 에서와 같이 그리드 셀의 상대적인 위치 좌표를 예측한다. YOLOv1에서는 (x,y)의 위치를 grid cell 안쪽에 두고, object가 있을때는 1, 없을때는 0으로 판단하였지만, YOLOv2에서는 logistic activation을 사용하여 0과 1사이의 값으로 표현시킨다.  각 그리드 셀에서는 5개의 bounding box를 예측하고, 각 bounding box에는 tx,ty,tw,th,tot_x, t_y, t_w, t_h, t_o로 5개 씩의 정보가 담겨있다.
cx,cyc_x, c_y : grid cell에서 해당 픽셀이 얼마나 떨어져 있는지 나타내는 오프셋
pw,php_w, p_h: 군집화로 예측한 앵커 박스의 width와 height
이를 통해 그리드 셀에 바운딩 박스의 중심좌표가 위치하게 된다.
이 식을 사용하여 location prediction을 더욱 쉽게 학습시킬 수 있고, dimension cluster와 함께 위의 식을 적용한 결과 성능이 5% 이상 상승하였다고 한다.

6)Fine-Grained Features

기존의 yolo에서는 CNN을 통과한 마지막 레이어의 피쳐맵만 사용하여 작은 물체에 대한 정보가 사라진다는 비판이 있었다. yolov2에서는 상위 레이어의 피쳐맵을 하위 피쳐맵에 합쳐주는 passthrough layer를 도입했다. high resolution를 stacking하듯, low resolution feature map과 concatenate한다.
위 그림에서 볼 수 있듯이 높은 해상도를 가진 26x26x256 피쳐맵을 13x13x2048 크기로 리스케일하여 낮은 해상도의 피쳐맵과 합쳐 13x13x3072 크기의 피쳐맵을 만들어 내는 모습을 볼 수 있다.
이를 통해 mAP 가 1% 정도 향상되었다고 한다.

7)Multi-Scale Training

YOLOv2에서는 fully-connected layer를 없애고 convolutional layer를 사용하여 입력 사이즈를 자유롭게 조절할 수 있다. 다양한 입력 사이즈에 대해 robust하게 만들기 위해 10 epochs 마다 입력 이미지의 크기를 {320, 352, ..., 608} 중에서 랜덤하게 선택하여 훈련한다. (32만큼 downsampling하기 때문에 32의 배수여야 한다) 따라서 같은 모델로 다양한 해상도에 대해 훈련할 수 있어 더 robust해지고 작은 해상도에 대해서도 속도와 정확도를 높일 수 있다.
Table 3은 multi-scale training 기법을 적용한 후 테스트 시의 입력 해상도만 달리한 결과이다.
YOLOv2는 accuracy와 speed 라는 tradeoff 관계에서 좋은 성능을 나타내는 모델임을 보여주고 있다.

Faster

이 섹션에서는 YOLOv2가 YOLOv1에 비해 어떻게 속도 측면에서 개선을 이루었는지를 다룬다. YOLOv1은 Googlenet을 사용하였는데 Googlenet은 VGG-16에 비해 정확도는 약간 떨어지지만 속도는 빠르다. 하지만 Googlenet은 네트워크가 너무 크고 복잡하여, YOLOv2에서는 Fully connected layer를 없애고 Global average pooling을 사용하는 Darknet-19를 사용한다.

Darknet-19

Darknet-19는 YOLOv2가 사용할 새로운 분류 모델이다. 이 모델은 19개의 Convolutional layers와 5개의 Max pooling layers를 가진다. VGG-16과 유사하게 주로 3 x 3 필터를 사용하며, 풀링 단계 이후 채널을 두 배씩 증가시킨다. 또한 마지막에 Global average pooling을 사용함으로써 3 x 3 컨볼루션의 feature representation을 압축하는 1 x 1 필터를 사용한다. 이는 기존의 Fully connected layer를 제거하고 Convolution 연산으로 대체하여 파라미터 수를 줄인 것이다. 즉 경량 CNN 아키텍쳐를 사용하여 YOLOv1에서 속도를 개선을 이룬 것이다.

Stronger

이 섹션에서는 분류 데이터셋과 탐지 데이터셋을 어떻게 Joint training 시키는지에 대한 이야기를 한다. 즉 YOLOv2가 어떻게 9000개나 되는 클래스를 분류해내는가에 대한 설명을 다루는 바이다. 이 부분이야말로 이 논문에서 가장 흥미로운 부분 중 하나인 것 같다.

1)Hierarchical classification

탐지 데이터셋은 “개”나 “보트”와 같은 일반 레이블을 가지지만, 분류 데이터셋(ImageNet)은 “노퍽 테리어”, “요크셔 테리어”, “베들링턴 테리어”와 같이 훨씬 더 넓고 깊은 범위의 레이블을 가지고 있다. 따라서 연구진은 이 거대한 데이터셋을 학습시키기 위해 계층적 분류를 수행해야한다고 제안한다. 여기서 제안된 계층적 분류는 Softmax funtion을 수행할 때 전체 Class에 대해 한꺼번에 수행하지 않고, 대분류별로 Softmax를 여러 개 수행하는 것이다.

2)Dataset combination with WorkTree

앞서 언급한 계층적 구조를 이루기 위하여 연구진은 COCO 데이터셋과 ImageNet 데이터셋을 섞어 위 그림과 같은 트리구조로 재배치했다.
따라서 최종 Multi-label 결과에서 특정 노드에 대한 최종 Class score를 계산하고 싶다면, 트리를 통해 루트 노드까지의 경로를 따라 조건부 확률을 곱해주면 된다. 예를 들어 어떤 이미지가 노퍽 테리어에 해당하는 이미지인지 알고 싶다면 위 그림과 같이 구하면 된다.
그리고 학습 시에 만약 레이블이 “요크셔 테리어”라고 한다면, 대상의 대분류 카테고리를 알기 위하여 위에서 생성한 트리를 역추적하는 방식으로 Multi-label을 학습시킬 수 있다.

3)Joint classificaion and detection

연구진은 COCO 데이터셋과 ImageNet 데이터셋을 혼합하여 만든 WordTree를 통해 총 9418개의 클래스를 가진 데이터셋을 확보해 냈다. 또한 ImageNet이 훨씬 더 큰 데이터셋이므로 COCO 데이터셋을 과다샘플링하여 4:1까지 비율을 조정해준 뒤 상위 9000개 클래스에 대한 학습을 진행시켰다.
모델을 학습시킬 때, Detection label에 대해서는 기존에 사용하던 방식을 사용했다. 하지만 레이블이 “dog”인 경우, 상위노드만 존재하고 하위노드 정보는 존재하지 않는 것을 확인할 수 있다. 이와 같은 경우에는 “dog” 레이블 이상의 레이블들에서만 loss를 역전파한다. 그리고 하위 노드에 대해서는 모두 틀렸다는 에러값을 부여한다.
따라서 동물에 대해 일반화가 잘 되어있는 COCO 데이터셋의 특성으로 인해 새로운 동물을 학습하는 것은 매우 쉽지만, 역으로 COCO 데이터셋은 어떠한 의복에도 바운딩박스 정보를 가지고 있지 않기 때문에 “선글라스”나 “수영복”과 같은 범주를 모델링하는 데에는 어려움을 겪는다.

Conclusion

YOLOv1에서 YOLOv2로의 변화는 매우 창의적이라고 볼 수 있다. 기존 모델의 성능을 변화시키는 데에 그치지 않고, 취급할 Class 수를 9000개까지 증가시켰기 때문이다. 또한 계층적 구조를 활용한 분류 방법 역시 여러 도메인에서 아주 유용하게 작용할 것이다.
결론적으로 YOLOv2는 탐지 및 분류를 모두 최적화하여 9000개 이상의 객체 범주를 탐지해내는 실시간 프레임워크이다. WorkTree를 사용하여 다양한 소스의 데이터와 공동 최적화 기술을 결합하여 ImageNet과 COCO를 동시에 훈련시킨 모델이다. 즉 YOLO9000은 탐지 및 분류 데이터셋 사이의 데이터 크기 격차 문제를 해소할 수 있는 강력한 수단이며, 이는 당시의 객체 검출 시스템 중 가장 최첨단에 놓인 모델로 다른 시스템들보다 속도가 빠른 장점을 가진다.
참고자료

이전 글 읽기

다음 글 읽기