[17′ CVPR] YOLO v2 : YOLO9000: Better, Faster, Stronger

This entry is part 2 of 5 in the series Object Detection

내용 요약

기존 YOLO v1은 최초의 성능 좋은 1 stage object detector라는 의의가 있지만, 여전히 성능이 떨어진다는 한계가 존재했습니다. 이에 YOLO v1의 성능과 속도를 개선한 YOLO v2 모델을 제안합니다. YOLO v2는 실험을 통해 기존 방법들보다 성능도 좋으면서 속도도 빠름을 보였습니다. 뿐만 아니라 Object Detection 데이터셋과 Classification 데이터셋을 합쳐 9000개 이상의 클래스를 탐지할 수 있는 YOLO 9000 모델도 제안합니다.

1. 들어가며

이번 글에서는 2017년 CVPR에 발표된 YOLO9000: Better, Faster, Stronger 논문을 리뷰합니다. 이 논문은 YOLO v2라는 별칭으로 불리며, 이번 글에서도 YOLO v2로 지칭하겠습니다.

먼저 제목의 의미를 통해 저자들이 가장 강조하고자 했던 내용을 생각해 보겠습니다.
크게 세 가지를 강조하고 있습니다.
첫 번째는 Better입니다. 이는 YOLO v1의 성능을 개선한 모델임을 의미합니다.
두 번째는 Faster입니다. 이는 YOLO v1보다 더 빠른 모델임을 의미합니다. 이렇게 YOLOv1의 성능과 속도를 개선한 모델을 저자들은 YOLO v2로 지칭합니다.
세 번째는 Stronger입니다. 이때의 강력함이란, 더 많은 종류의 객체를 인식할 수 있는 모델을 의미합니다. 대략 9000가지가 넘는 종류의 객체를 인식할 수 있게 되었는데요, 저자들은 이를 YOLO 9000이라고 지칭합니다.
이번 글에서는 이 세 가지 내용에 초점을 맞춰 살펴보도록 하겠습니다.

우선 Better와 Faster의 관점에서 YOLO v1을 생각해 보겠습니다.
YOLO v1의 성능을 낮추는 주요 원인은 localization error입니다.
YOLO v1은 Regrion Proposal 방식을 사용하는 다른 모델들보다 recall 성능이 떨어지는 특성이 있습니다.
이 말은 물체 자체를 잘 못 찾는다는 것을 의미합니다.
따라서 YOLO v2에서는 classification 성능은 유지하면서 localization 성능을 더 올리는 것에 초점을 맞춥니다.
물론 네트워크를 더 깊고 크게 만들면 classification과 localization 성능이 모두 개선될 겁니다.
하지만 이러면 속도가 느려지겠죠.
따라서 이러한 단순한 방법 말고, 속도는 더 빠르면서 성능은 더 좋은 모델을 만드는 방법에 대해 살펴보겠습니다.

2. Better : YOLO v1 성능을 개선하는 방법

먼저 YOLO v1의 성능을 개선하기 위해 저자들이 한 고민과 실험을 순서대로 따라가 보겠습니다.

2-1. Batch Normalization 사용하기

첫 번째는 Batch Normalization의 적용입니다.
Batch Normalization은 여러 장점이 있는 것으로 알려져 있습니다.
첫 번째는 Regularizer로써 동작하기에 dropout을 제거해도 overfitting이 방지된다는 것입니다.
두 번째는 Batch Normalization만 적용해도 성능이 오른다는 것이죠.

YOLO v2 : batch norm을 적용한 성능
그림1. batch norm을 적용한 성능

위 그림을 보면 Batch Normalization을 적용함으로써 2.4%의 mAP가 상승한 모습을 볼 수 있습니다.

2-2. High resolution classifier 사용하기

두 번째는 High resolution classifier를 적용한 것입니다.
YOLO v1은 224×224 사이즈의 이미지로 ImageNet classification을 학습했죠. 그러고 나서 다시 448×448 사이즈로 detection을 튜닝시켜 주었습니다. 이 말을 모델 입장에서 생각해 보면 높은 해상도의 이미지에 적응하는 것과 object detection 과제를 동시에 학습해야 한다는 말이 됩니다. 이러면 당연히 더 어렵게 느껴지겠죠. 따라서 저자들은 처음부터 448×448 사이즈의 이미지로 ImageNet classification을 10 epoch 학습합니다. 그러고 나서 동일한 사이즈로 detection을 튜닝 학습하죠.

YOLO v2 : high resolution을 사용한 성능
그림2. high resolution을 사용한 성능

위 그림을 보면 high resolution classifier를 학습하는 방법을 통해 3.7%의 mAP 상승을 얻어낸 모습을 볼 수 있습니다.

2-3. Anchor box 사용하기

세 번째는 anchor box 방법을 적용한 것입니다.
YOLO v1은 anchor box 방법을 도입하지 않았죠. 대신 모든 feature 마다 bounding box의 모양과 위치를 예측하도록 했습니다.
모델의 입장에서 생각해 볼까요? YOLO v1의 방법이 더 쉬울까요, anchor box 방법이 더 쉬울까요? Anchor box 방법은 미리 고정된 (anchor) 사이즈의 박스를 설정해 주고, 모델에게는 ‘미세조정’만 시키는 방법입니다. 모델 입장에서는 맨땅에서 bounding box의 모양과 위치를 예측해야 하는 YOLO v1 방식보다는 당연히 anchor box 방식이 더 쉽겠죠.
따라서 YOLO v2에는 anchor box 방식을 적용해 봅니다.

YOLO v2 : anchor box를 사용한 성능
그림3. anchor box를 사용한 성능

위 그림을 보면 anchor box의 도입으로 0.3% mAP 성능이 하락한 모습을 볼 수 있습니다. 성능은 하락했지만 recall은 더 증가했다고 하네요. 이는 anchor box 방식을 도입하되 조금 더 개선하면 성능을 올릴 수 있음을 의미합니다.

2-4. New network 사용하기

네 번째는 새로운 네트워크의 사용입니다.
기존의 네트워크 구성에 살짝 변형을 주었습니다. 우선 output feature의 해상도가 더 높으면 detection을 학습하기에 더 유리하겠죠. 이를 위해 마지막 pooling layer를 제거합니다. 또한 입력 이미지를 448×448이 아닌 416×416으로 변경해 줍니다. 이는 최종 output feature map의 입장에서 생각해 보면 이해할 수 있습니다. 입력 이미지 사이즈가 448×448일 경우 최종 feature map 사이즈는 14×14가 됩니다. 반면 입력 이미지 사이즈가 416×416일 경우 최종 feature map 사이즈는 13×13이 되죠. 그런데 object detection 데이터셋은 이미지의 정중앙에 위치하는 물체들이 많습니다. 따라서 이미지의 정중앙에서 box 예측을 시작하는 게 유리할 거고, 이를 위해서는 최종 feature map의 사이즈가 홀수가 되어야 합니다.

YOLO v2 : 새로운 네트워크를 사용한 성능
그림4. 새로운 네트워크를 사용한 성능

위 그림을 보면 새로운 네트워크를 적용하여 0.4%의 mAP 상승을 이뤄낸 모습을 볼 수 있습니다.

2-5. Dimension cluster 사용하기

다섯 번째는 dimension cluster의 사용입니다.

2-5-1. 큰 그림

Anchor box를 도입할 때는 꼭 고려해야 하는 사항이 있습니다.
바로 사람이 지정해줘야 하는 anchor box의 모양과 사이즈입니다. 이렇게 지정해 주는 anchor box의 모양과 사이즈에 따라 모델의 성능이 크게 차이 나기 때문입니다. 기존의 anchor box 방식들은 이 모양과 사이즈를 임의로 지정해 주었습니다.

YOLO v2의 저자들은 이런 생각을 합니다.
“학습 데이터셋의 bounding box Ground Truth를 사용해서 최적의 anchor box 모양과 사이즈를 찾을 수 없을까?” 학습 데이터셋에 이미 정답 bounding box 모양과 사이즈가 나와있으니 이를 토대로 어떤 모양과 사이즈를 사용할 때 가장 성능이 좋을지 찾을 수 있겠다는 아이디어죠.

이를 위해서 k-means clustering을 사용합니다.
그런데 일반적인 k-means clustering은 유클리드 거리를 사용하여 k개의 클러스터를 찾는 방식이죠. 이때의 거리는 박스의 크기에 해당할 텐데요. 이렇게 측정하면 큰 박스는 불리해집니다. 우리가 원하는 건 가장 높은 IoU가 나오는 박스의 모양과 사이즈잖아요. 그러니 k-means clustering의 측정 metric을 유클리드 거리가 아닌 IoU 관련 식으로 변경해주어야 합니다.

그래서 저자들이 번경한 metric은 다음과 같습니다.

5.새로운 metric
그림5.새로운 metric

위 식을 보면 IoU가 작을수록 페널티 (d)를 많이 받도록 세팅한 모습을 볼 수 있습니다.

2-5-2. 실험 결과

6.clusering box dimensions
그림6. clusering box dimensions

위 그림의 왼쪽은 cluster의 개수에 따른 성능을 측정한 그래프입니다.
Cluster의 개수가 많아질수록 다양한 모양과 사이즈의 anchor box를 사용한다는 의미이니 성능이 좋아지는 모습을 볼 수 있습니다. 하지만 anchor box를 많이 사용할수록 모델 입장에서는 계산량이 많은, 복잡하고 느린 모델이 된다는 의미기도 하죠. 따라서 YOLO v2에서는 성능과 복잡도 사이의 trade off 지점으로 5개의 anchor box를 선택합니다.

오른쪽 그림은 이렇게 찾은 VOC와 COCO 데이터셋에서의 anchor box 모양입니다.
기존에 사용하던 anchor box의 모양과는 달리 얇고 길쭉한 모양의 anchor box들이 많은 모습을 볼 수 있습니다.

7.기존 방식과 clustering 방식의 성능 비교
그림7. 기존 방식과 clustering 방식의 성능 비교

위 그림은 cluster 방식으로 찾은 anchor box를 사용했을 때와 기존처럼 사람이 지정해 주는 방식으로 찾은 anchor box를 사용했을 때의 성능을 비교한 표입니다.
Anchor Boxes가 기존 방식을 의미하는데요. 9개의 anchor box를 사용하여 60.9 IoU의 성능을 내는 모습을 볼 수 있습니다. 반면 Cluster 방식은 anchor box를 5개만 사용해도 61 IoU이고, 동일하게 9개의 anchor box를 사용하면 67.2 IoU까지 성능이 대폭 향상하는 모습을 볼 수 있습니다.

2-6. Direct location prediction 하기

하지만 아직도 anchor box를 도입했을 때의 문제점은 남아있습니다.
Anchor box 방식을 사용하면 학습 초기에 모델이 불안정한 모습을 보입니다. 이 문제는 anchor box의 x, y 값을 예측하는 방법에서 비롯됩니다.

8.기존 anchor box 수식
그림8. 기존 anchor box 수식

위 식은 anchor box의 x, y의 수식입니다.
모델은 tx, ty를 예측하고 가중치를 곱해서 계산해 주는 방법이죠. 그런데 생각해 보면 이렇게 계산하면 x, y로 나올 수 있는 값의 범위가 무한대입니다. 따라서 모델 입장에서는 모든 범위에 대한 계산을 해야 하기 때문에 학습 초기에 어려움을 겪는 것이죠.

그래서 x, y, w, h를 예측하는 방법은 YOLO v1의 방식을 도입합니다. Grid cell (feature) 안에서의 상대위치를 계산해 주는 방법이죠. 이때의 포인트는 x, y 값을 0~1 사이값으로 제한해서 모델에게 너무 넓은 범위를 예측해야 하는 부담을 주지 않는 것입니다.

9.direct location prediction 방법
그림9. direct location prediction 방법

위 식은 YOLO v2의 anchor box location 계산 방법을 도식화한 그림입니다.

  • p : 미리 정해준 anchor box값 (prior)
  • t : 모델이 예측한 값
  • 𝜎 : Logistic regression (output을 0~1 값으로 만듦)
  • b : 최종 계산된 bounding box location
  • C : Cell에서의 offset

위 식의 핵심 포인트는 bx, by를 예측하는 식입니다.
기존과 달리 모델의 예측값에 logistic regression 함수가 더해진 모습을 볼 수 있습니다. 따라서 output을 0~1로 제한하여 모델이 더 편하게 학습할 수 있도록 만들어주었습니다.

YOLO v2 : clustering과 location prediction 방법을 적용한 성능
그림10. clustering과 location prediction 방법을 적용한 성능

위 그림을 보면 dimension cluster와 location prediction 방법을 도입하여 4.8% mAP가 상승한 모습을 볼 수 있습니다.

2-7. Fine grained feature 사용하기

이번에는 사용하는 featue에 대한 고민을 해보겠습니다.
다양한 level의 feature를 사용하면 분명 object detection 성능에 유리할 텐데요. 특히 object detection의 경우는 작은 물체들을 찾기 위해 보다 해상도 높은 feature를 사용하면 유리할 겁니다. 그래서 이전 방법들에서도 다양한 level의 feature를 같이 사용할 수 있는 방법들이 제안되었죠.

YOLO v2의 경우는 마지막 level feature가 13×13 사이즈를 갖습니다. 그 직전 level feature는 26×26 사이즈를 갖죠. 26×26 사이즈의 feature가 더 조밀한 정보를 갖고 있으니 이 정보를 같이 사용하면 분명 성능 향상에 도움이 될 겁니다. YOLO v2는 기존과는 다른 독특한 방식으로 이 두 feature를 조합해 줍니다.

11.passthrough 방법
그림11. passthrough 방법

위 그림은 마지막 2개 level feature를 통합하는 모습을 나타낸 그림입니다.
26×26 사이즈의 feature와 13×13 사이즈의 feature를 합칠 건데요. 특이하게도 13×13 feature를 resize 하는 방식이 아닌, 26×26 feature를 4개로 나눠 총 5개의 feature를 channel 방향으로 합쳐주는 방법을 사용합니다. 이 방법을 저자들은 passthrough라고 부릅니다.

YOLO v2 : passthrough를 적용한 성능
그림12. passthrough를 적용한 성능

위 그림을 보면 passthrough 방법의 도입으로 1% mAP가 상승한 모습을 볼 수 있습니다.

2-8. Multi scale training 사용하기

다음은 다양한 사이즈의 입력 이미지에서도 좋은 성능을 내기 위한 고민을 살펴보겠습니다.
보통은 고정된 입력 사이즈로 모델을 학습합니다. 따라서 학습 데이터와 다른 사이즈의 이미지에 대해서는 성능이 대폭 하락하곤 하죠.

이에 YOLO v2는 multi scale training 방법을 사용합니다.
말 그대로 입력 사이즈를 계속해서 바꿔주는 겁니다. 10 batch 마다 입력 사이즈를 바꿔주었습니다. 이때 모델은 입력 이미지를 32배로 downsampling 하여 최종 output feature를 만들기 때문에, 입력 이미지 사이즈도 32 배수에 맞춰 조정해 주었습니다. 가장 작은 사이즈는 320×320이고 가장 큰 사이즈는 608×608로 학습했습니다.

13.YOLO v2와 다른 방법들의 성능 비교
그림13. YOLO v2와 다른 방법들의 성능 비교

위 그림은 다양한 사이즈에 대한 YOLO v2와 다른 방법들의 성능을 비교한 표입니다.
YOLO v2가 가장 낮은 속도일 때 (가장 큰 입력 이미지를 받을 때)의 성능은 기존 SOTA 모델들보다 높은 모습을 볼 수 있습니다. 그럼에도 속도는 훨씬 빠른 모습이죠. YOLO v2의 속도를 높이면 (입력 이미지 사이즈를 줄이면) 성능은 조금씩 떨어지지만 기존 방법들에 필적하는 성능을 보이며, 속도는 비교도 안되게 빠른 모습을 볼 수 있습니다.

YOLO v2 : multi level training 방법을 적용한 성능
그림14. multi level training 방법을 적용한 성능

위 그림을 보면 multi level training 방법을 통해 1.4% mAP 성능을 향상한 모습을 볼 수 있습니다. 이렇게 다양한 방법을 사용하여 기존 YOLO v1의 성능을 개선한 모델을 YOLO v2라고 부릅니다.

3. Faster : 더 빠른 YOLO 만들기

이번에는 더 빠른 YOLO를 만들기 위한 방법을 살펴보겠습니다.

YOLO v2는 자체 네트워크를 제작합니다. 기본 뼈대는 GoogleNet을 가져와 변형하는 방법을 사용합니다. 우선 속도를 느리게 만드는 주범인 fully connected layer를 제거합니다. 그리고 그 자리는 Global Average Pooling(GAP)으로 대체하죠. GAP와 fully connected 방식은 Classification 학습을 위해 최종 output size를 1000개로 만들어준다는 점에서는 동일합니다. 하지만 GAP는 fully connected 방식처럼 가중치를 사용하는 게 아닌 spatial map 별로 평균을 구하는 방식을 사용하기에 속도가 훨씬 빠르다는 장점이 있습니다.

이렇게 ImageNet classification을 먼저 학습하고 난 뒤에는 object detection 데이터셋을 학습합니다. 이때 detection을 위해서는 마지막 layer를 수정해주어야 합니다. Softmax로 1000개의  클래스를 분류할 필요가 없기 때문이죠.

Detection을 위한 최종 output feature를 생각해 보겠습니다. 먼저 spatial size는 13×13을 갖는다고 위에서 언급했습니다. 그럼 각 feature마다의 채널수는 몇일까요? 위에서 anchor box는 feature마다 5개씩 사용했다고 했습니다. 그리고 각 box는 5개의 coordinate를 갖고 있죠. 또한 예측해야 하는 클래스의 개수는 20개입니다. 따라서 최종 feature의 채널수는 5x(5+20)으로 125가 됩니다. 이를 위해 모델의 마지막에 3×3 conv와 1×1 conv를 사용하여 feature 사이즈를 맞춰줍니다. 이때 1×1 conv는 최종 채널수인 125를 맞춰주는 역할을 합니다.

4. Stronger : 더 많은 종류의 물체를 찾는 YOLO 만들기

다음은 더 강력한 YOLO를 만들기 위한 방법을 살펴보겠습니다.

4-1. 큰 그림

이때 저자들이 말하는 ‘강력함’이란 무엇을 의미할까요?
바로 ‘더 많은 종류의 물체를 탐지하는 능력’을 의미합니다. 기존 YOLO v1은 20종류의 물체를 탐지했습니다. 이건 YOLO v1의 성능 문제가 아닌 기존 object detection 데이터셋을 사용하는 모든 방법이 마찬가지였죠. 하지만 저자들은 9000개 이상의 종류 물체를 탐지할 수 있는 모델을 제안합니다. 그래서 이름도 YOLO 9000이라고 부르고 있습니다. 20 종류의 물체를 탐지하던 detector에서 9000 종류의 물체를 탐지하는 detector로의 업그레이드라니, 멋지지 않나요?

저자들의 기본 아이디어는 이랬습니다.
Object Detection 데이터셋과 Classification 데이터셋은 서로 다른 장단점을 갖고 있습니다. Object Detection 데이터셋에는 bounding box에 해당하는 location 정보가 있지만 적은 종류 클래스의 정보만 가지고 있죠. 반면 Classification 데이터셋에는 location 정보는 없지만 매우 다양한 클래스들의 정보가, 매우 많은 양으로 포함되어 있습니다. 그럼 자연스럽게 “Object Detection 모델에도 Classification 데이터셋을 활용할 수는 없을까?” 하는 생각이 듭니다. 기존 방법들에서는 Classification 데이터셋을 Classification 하도록 학습한 뒤, 모델을 Detection에 맞도록 변경하여 Object Detection 데이터셋을 학습하는 방법을 사용했죠. 저자들은 단순히 따로 학습하는 방법을 넘어 두 데이터셋을 통합하여 한번에 학습하는 방법을 고민합니다.

한번 생각해 볼까요?
가장 쉽게 떠올릴 수 있는 아이디어는 이렇습니다. Classification 데이터셋에서는 classification loss만을 받아서 학습하고, Detection 데이터셋에서는 location loss, classification loss 등 모든 loss를 받아 학습하는 겁니다. 그런데 이렇게 학습하자니 문제가 하나 있습니다. Classification 데이터셋의 클래스와 Detection 데이터셋의 클래스가 서로 다르다는 겁니다.

정확히 말하자면 클래스의 언어적 계층이 다릅니다. 예를 들어 Classification 데이터셋의 클래스들은 ‘푸들’, 몰티즈’, ‘진돗개’ 등으로 구성되어 있습니다. 반면 Object Detection 데이터셋의 클래스들은 ‘강아지’, ‘고양이’, ‘사자’ 등으로 구성되어 있죠. Object Detection 데이터셋의 클래스들이 더 상위 레벨의 단어들이죠.

4-2. Softmax의 문제점

이 상태에서 그냥 softmax로 학습해 버리면 어떻게 될까요? Classification 데이터셋과 Object Detection 데이터셋을 합쳐서 학습하면 이런 형태가 될 겁니다.

15.classification과 detection 데이터셋 합쳐서 학습하기
그림15. classification과 detection 데이터셋 합쳐서 학습하기

Softmax를 통해 나온 최종 예측값으로 강아지, 고양이, 사자, 푸들, 몰티즈, 진돗개가 나온다고 가정해 보겠습니다. 그럼 Classification 데이터셋의 푸들을 학습할 때는 다음과 같은 형태가 될 겁니다.

16.푸들을 예측했을 때
그림16. 푸들을 예측했을 때

그런데 이 의미를 한번 생각해 보죠. 이건 모델에게 “이 이미지는 강아지는 아니고 푸들이야.”라고 말해주는 겁니다. 사실 그게 아니고 강아지 이면서 푸들이라고 하는 게 맞잖아요?

또 반대로 Detection 데이터셋의 강아지를 학습할 때는 이런 형태가 되겠죠.

17.강아지를 예측했을 때
그림17. 강아지를 예측했을 때

이건 마찬가지로 모델에게 “이 이미지는 푸들, 몰티즈, 진돗개는 아디고 강아지야.”라고 하는 꼴이 되죠. 이것도 말이 안 되죠.

이는 Softmax의 특성 때문에 발생하는 문제입니다. Softmax는 상호배타적으로 학습합니다. ‘N개의 종류 중 오직 이것만 맞고 나머지는 다 틀리다.’라고 학습하는 거죠. 이는 Classification과 Object Detection을 합친 데이터셋에서는 적합하지 않은 방법입니다.

4-3. 계층구조 만들기

그럼 어떻게 해야 할까요? 두 데이터셋을 합쳐 계층별 단어 tree를 만들어보면 어떨까요? 위의 예시들로 만들면 이런 형태가 되겠네요.

18.계층별 단어 트리 만들기
그림18. 계층별 단어 트리 만들기

이렇게 계층별로 tree를 만들면 Object Detection 데이터셋의 클래스들과 Classification 데이터셋의 클래스들을 모두 포함할 수 있습니다. 그러고 나서 학습 및 예측할 때는 계층별로 Softmax를 해주는 거죠.

19.계층별 softmax 적용하기
그림19. 계층별 softmax 적용하기

그럼 Ground Truth에 따라 상위 레벨 단어들로 모두 gradient를 전파해서 학습해 줄 수 있습니다. 예를 들어 ‘강아지’를 학습한다고 생각해 보죠.

20.강아지를 학습할 때의 계층별 softmax
그림20. 강아지를 학습할 때의 계층별 softmax

그럼 계층 구조상 강아지는 포유류에 속하고, 포유류는 동물에 속한다는 걸 우리는 알고 있죠. 따라서 강아지 위쪽 레벨의 Softmax도 모두 학습할 수 있습니다. 또는 더 아래쪽에 위치하고 있는 ‘푸들’을 학습한다고 생각해 볼게요.

21.푸들을 학습할 때 계층별 softmax
그림21. 푸들을 학습할 때 계층별 softmax

이번에도 마찬가지로 푸들 위쪽 레벨에 있는 강아지, 포유류, 동물에 대해서도 Softmax로 학습할 수 있게 됩니다. 최종적으로 푸들의 확률을 예측할 때는 모든 Softmax의 값을 곱해서 구할 수 있죠.

22.푸들일 확률 계산하기
그림22. 푸들일 확률 계산하기

4-4. 결과

23.YOLO9000의 wordtree
그림23. YOLO9000의 wordtree

위 그림은 YOLO 9000에서 제작한 WordTree 데이터셋입니다. 위에서 설명한 방식으로 Classification 데이터셋 클래스들과 Object Detection 데이터셋 클래스들을 모두 합쳐준 데이터셋이죠. 계층별로 Softmax를 사용해서 학습하는 모습을 볼 수 있습니다.

24.COCO와 ImageNet으로 만든 wordtree
그림24. COCO와 ImageNet으로 만든 wordtree

위 그림은 Classification 데이터셋인 ImageNet과 Object Detection 데이터셋인 COCO를 합쳐 WordTree로 구성한 모습입니다. 파란색은 COCO 클래스를, 빨간색은 ImageNet 클래스를 의미합니다. WordTree를 보면 COCO와 ImageNet 클래스들이 모두 골고루 분포하는 모습을 볼 수 있습니다. 이렇게 구성했을 때 총 9418개의 클래스가 나오게 됩니다. 이를 그대로 학습하면 ImageNet의 개수가 훨씬 많기 때문에 학습이 안됩니다. 따라서 비중을 ImageNet : COCO를 4:1로 맞추어 구성해 주었습니다. Anchor는 3개씩만 사용했습니다. Loss는 Detection 클래스에 대해서는 YOLO의 모든 loss를 적용하고, Clasification 클래스에 대해서는 classification loss만 적용해 주었습니다.

위와 같은 방식을 통해 학습한 모델은 9000개 이상의 클래스를 탐지할 수 있고, 이를 YOLO 9000이라고 부릅니다. 

5. 결론

YOLO v1을 개선한 YOLO v2모델과 YOLO 9000 모델을 살펴봤습니다. YOLO v2는 다양한 방법을 사용하여 YOLO v1의 성능을 개선했습니다. 또한 네트워크 구조를 변경하여 더 빠르게 업그레이드해 주었습니다. 뿐만 아니라 Object Detection 데이터셋과 Classification 데이터셋을 합쳐 9000개 이상의 클래스를 탐지할 수 있는 YOLO 9000 모델을 제안했습니다. 이러한 방법은 segmentation 등 다른 방법에도 응용할 수 있다는 장점이 있습니다.

Series Navigation<< [16′ CVPR] YOLO v1 : You Only Look Once: Unified, Real-Time Object Detection[17′ ICCV] RetinaNet : Focal Loss for Dense Object Detection >>
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top