이번 리뷰 논문은 Yolo v3입니다. 이미 워낙 유명한 Yolo 라서 그저 참고용으로만 봐주시길 바랍니다.
논문 시작에 앞서, IOU와 mAP에 대해 설명하겠습니다.
IOU & mAP
- IOU : 쉽게 말해서, 내가 예측한 박스가 정답 박스와 얼마나 유사한지를 측정하는 metric 입니다.
- mAP : 위 IOU를 평가하는 metric이 mAP 입니다.
Introduction
- Tech Report : 논문의 저자들은 v3는 논문이 아니라, Tech Report라고 합니다. 엄청 super interesting 한 것은 아니고, 작은 변화들을 모아 더 나은 모델로 발전시켰다고 합니다.
- Better, Not Faster, Stronger(?) : v2보다 모델이 무거워져서 더 빨라지진 않았으나 더 정확해졌다고 합니다.
Bounding Box prediction
- Yolo v2와 바뀐 부분 ? : 없다!
미리 anchor box를 정의해놓고 regression을 통해 얼마나 움직일 지 결정합니다.
앵커 박스의 가운데 점의 좌표는 (Cx, Cy)이며, 이 때 x,y 방향으로의 이동은 sigmoid 함수를 적용해서 이동하게 됩니다.
sigmoid 는 0에서 1 사이의 값을 출력하기 때문에, bounding box의 중심은 아래 그림처럼 빨간 네모를 벗어나지 못합니다.
또한 박스의 width와 height는 원래 예측값 (Pw)과 박스가 움직여야하는 값(tw, th)의 지수 함수의 제곱을 통해 계산합니다
- loss : sum of squared error loss 사용
- objectness score (일종의 confidence) 가 각 바운딩 박스마다 존재합니다. (0에서 1 사이 값)
- 이 때, 다른 박스들보다 정답과 가아아아아장 유사한 박스는 objectness score가 반드시 1이 되어야 함!
- 각 ground truth마다 bounding box가 단 하나씩만 할당 됩니다. (다른 알고리즘들과의 큰 차이)
Class prediction
- 항상 detection 문제는 regression + classification을 동시에 해야하는 multi task 입니다.
- Yolo v3에서는 multi label classification을 수행합니다
multilabel classfication이란? 만약 클래스가 80개라면 (COCO 기준) 기존 classification은 80개의 클래스에 대해 softmax를 하는데, v3에서는 80개의 클래스에 sigmoid를 취해서 binary classifcation으로 바꿨다 함. 그래서 multi label classification이 가능하다고 합니다.
- 장점? Person, Women처럼 계층적인 데이터가 있는 경우, Person과 Women 클래스가 동시에 1이 되어야하는 경우가 필요합니다. 이 때 logistic regression 형태가 도움이 된다고 합니다!
Predictions Across Scales
- Anchor box ? 미리 pre-defined 된 bounding box
- 3 scale에 대해 3가지 bounding box를 사용하였습니다
=> 가로, 세로가 N x N 일 때 Prediction Feature Map의 크기는 N x N x Channel 입니다. (Channel 수는 255)
- 채널 수 = 3 x (4 + 1 + 80)입니다. 여기서 3은 한 scale에서 뽑는 bounding box의 수, 4는 x,y,w,h이고, 1은 objectness score, 80은 COCO dataset의 클래수 개수
Anchor Boxes
- Yolo만의 특성 : 가지고 있는 traing set을 분석하여 K-means clustering 통해 Bounding box의 priors를 정합니다.
ex) 보행자 탐지를 할 때, 사람은 서 있는 경우가 대부분이다. 바꿔 말해서 세로로 길쭉한 박스가 필요하지, 가로로 길쭉한 박스는 굳이 필요 없을 것이다.
- 즉, 찾고자 하는 객체에 대한 특징을 찾고, 분석하여 bounding box를 정하는 것이 앵커박스와 관련한 yolo의 특징입니다.
- 9개의 앵커박스를 사용합니다. 작은 객체용으로 3개, 중간 객체용으로 3개, 큰 객체용으로 3개해서 총 9개 입니다.
- v3는 416x416 이미지 기준, 10647개의 bounding box를 뽑아냅니다. 성능을 높이기 위해서는 어쩔 수 없는 과정인 것 같습니다.
Feature Extraction
- Yolo v3의 backbone : Darknet-53을 사용했습니다.
- v2보다는 느리고 연산량도 많지만 더 정확하고, ResNet 계열과는 정확도는 비슷한데 더 빠르고, 연산량도 적습니다. (약 2배 빠름)
특히, 초당 가능한 연산량이 제일 많아서 처리속도가 좋을 수 밖에 없는 것 같습니다.
Yolo v3 Architecture
- FPN과 형태가 비슷합니다.
- 맨 마지막 feature map(제일 작은 feature map)에서 conv 연산을 몇번 더 거쳐, 제일 큰 물체를 위한 3개의 앵커박스를 이용해 제일 큰 물체를 탐지합니다. (그림 기준 가장 작은 강아지 사진 부분)
- 그 후, 다시 피쳐맵의 사이즈를 키우고, 그 크기에 맞는 다른 피쳐맵을 가져와서 연산을 하고 객체를 뽑아냅니다. 쉽게 말해서 FPN 구조를 활용했다고 생각하시면 될 것 같습니다.
- 그래서 3 scale이 의미하는 것이, 위 구조에서 3개의 feature map을 통해 나온 3개의 이미지를 뜻한다고 보시면 될 것 같습니다.
- resoltion이 제일 큰 scale에서 제일 작은 객체를 찾고, resolution이 제일 작은 scale에서 제일 큰 객체를 찾습니다.
Training
- 특이한 점? : full image 전체를 사용, no hard negative mining
- hard negative mining이란 ? 보통 Detection을 할 때 bounding box를 뽑으면 수천 개를 뽑게 되고, 그 안에 물체가 있는 박스가 평균 수십 개 있다고 가정하면 나머지 박스들 즉, 물체를 포함하지 않는 박스들은 어떻게 할까요? 다른 모델에서는 background class가 존재하고, 그에 따라 background 객체 수만 엄청 증가하여 불균형해지게 됩니다. 이를 방지하는 것이 hard negative mining입니다.
하지만 Yolo는 background class가 없습니다. 그건 바로 objectness score를 통해 물체가 없다고 판단되면 날려버리기 때문입니다.
그래서 Yolo는 hard negative mining이 필요 없습니다.
- multi-scale training (이미지를 다양한 resolution으로 집어넣기), lots of data augmentation, BN 등등을 적용했다고 합니다.
Result
- v3의 저자는 AP 방식에 대해 불만이 있다고 합니다.. (threshold를 0.5부터 시작해서 0.05씩 늘려나가며 성능을 측정하고 그것들을 averaging 하는 방식)
- 다만, AP50 (IOU threshold가 0.5) 에서는 준수한 성능을 보입니다.
- 또한 작은 객체는 다른 모델들도 잘 탐지하지 못하는데, 의외로 v3가 큰 물체에 대해서 다른 모델들보다 성능이 낮음을 볼 수 있습니다.