이번 포스팅은 Yolo v3 논문에 대해서 리뷰하도록 하겠습니다.
1. The Deal
1-1. Bounding Box Prediction
기존의 YOLO 9000은 Anchor Box와 Reference Center Point의 Shift값인 을 예측하고, 값을 구해서 L2 LOSS를 통해서 학습을 시켰는데, 이에 대한 컨셉을 변경해서 위의 기존 식을 inverse해서 다이렉트로 값들의 L1 LOSS값을 구하겠다고 합니다. 아마 아래와 같은 방식으로 기존의 BOX GT를 inverse해서 L1 LOSS를 구해서 학습을 진행한 것 같습니다.
개인적인 생각으로는 학습할 때, 예측된 값을 기존 공식에 넣어서 학습하게 되면 L2 LOSS가 역전파가 되면서 logistic의 제곱꼴이 나오기 때문에 학습에 부정적인 영향을 끼칠 것이라고 생각해서 오히려 GT값을 해당 식의 inverse값으로 추정해서 L1 LOSS를 사용하게 되면 학습이 더 잘될 것 같다는 생각이 깔려있는 것 같습니다.
YOLO v3에서는 각각의 예측된 box마다 objectness에 대한 점수를 logistic regression을 사용해서 구합니다. 만약 예측된 어떤 box가 다른 box들보다 IOU가 높다면 해당 값은 1이 되어야합니다. 만약 box의 IOU가 제일 좋은 것은 아니지만 특정한 threshold보단 높다면 Faster R-CNN의 방법을 사용해서 그냥 무시해버리게 됩니다.
YOLO v3는 IOU threshold값을 0.5를 사용하고, faster R-CNN과는 다르게 하나의 box에 하나의 GT box를 할당합니다. 만약에 box가 GT에 할당되지 않는다면, 좌표 및 클래스 예측에 손실을 주진 않고, Objectness에 대한 손실 값만 적용하게 됩니다.
자세한건 Faster R-CNN 논문을 살펴봐야 알겠지만, 이미 리뷰가 되어있는 블로그들을 찾아보다 보니까 박진우님의 블로그 [분석] Faster R-CNN을 보면 RPNs는 특정 anchor가 GT와 IOU가 0.7보다 크다면 positive, IOU가 0.3보다 작으면 non-positive label이 할당, 그 외의 구간에서는 IOU가 제일 큰 anchor box를 positive로 잡는데, YOLOv3는 positive anchor label은 GT와의 IOU 0.5가 크면 positive로 label을 하고, 그 이하의 값들은 다 무시하고 Objectness에 대한 손실값만 적용하는 것 같습니다.
2-1. Class Prediction
각각의 box는 box에 대한 클래스 예측을 multi-label classification을 하게 되는데, 여기서 YOLO v3 저자는 softmax를 사용하는게 성능면에서 좋지 않기 때문에 그냥 logistic classifier를 사용하자고 합니다. 따라서 실제 classification 학습시 loss는 binary cross-entropy를 사용합니다. 이런 방식은 조금 더 복잡한 Domain에서의 Classification으로 Detection문제를 해결할 경우에 도움이 되는데, 예를 들면 Google의 Open Image Dataset같은 경우는 label들이 많이 겹치게 됩니다(사람 & 여자) 이런 경우에 Softmax를 사용하게 되면, 이렇게 사람 & 여자의 경우에는 mutually exclusive하지 않기 때문에 문제가 됩니다. 따라서 이런 경우에는 model을 multilabel 방식으로 접근하는게 더 좋은 접근 방법입니다.
2-3. Predictions Across Scales
2-4. Feature Extractor
|
|
2-5. Training
3. How We Do
YOLO v3는 꽤 좋습니다. YOLO v3는 COCO의 이상한 mAP metric 기준으로 했을 때, SSD의 변형과는 성능이 비슷하면서 3배 정도 빠르고, RetinaNet보다는 성능이 조금 떨어지게 됩니다. 하지만 기존의 detection metric인 하는 를 사용하게 되면 YOLO v3는 굉장히 강력해집니다. 를 사용할 경우, 성능은 RetinaNet과 비슷해지면서 SSD의 변형보다는 훨씬 좋은 성능을 보여주게됩니다. 이는 YOLO v3가 object에 대한 box를 찾는 강력한 detector라는 것을 의미하지만, IOU threshold가 증가하면 성능이 급격하게 떨어지며 YOLO v3는 Object의 box와 완벽하게 정렬되는 것을 위해서 고군분투하게 됩니다. 과거 YOLO v1의 경우에는 작은 물체를 찾기 위해서 고군분투했다면 지금은 그러한 트렌드가 역전되었다고 생각합니다. 새로운 multi-scale 예측으로 인해서 굉장히 높은 성능을 나타내지만 여전히 중간이나 큰 크기의 object를 찾는 성능보단 떨어집니다. 해당 문제를 끝까지 해결하려면 조금 더 많은 실험 및 연구를 진행해야할 것 같다고 합니다. metirc에 대해서 accuracy vs speed를 plotting하게 되면 YOLO v3가 꾀나 detection system에 중대한 이점(빠르고 더 나아진 부분) 을 줬다고 합니다.
4. Things We Tried That Didn't Work
YOLO v3를 개발하면더 많은 것들을 시도했었는데, 많은 부분들이 기대했던 바와 작동하지 않았습니다. 해당 세션은 그에 대한 이야기를 하려고 합니다.
4-1. Anchor box x,y offset predictions
linear activation을 사용해서 다양한 box의 width, height의 x,y offset을 일반적인 anchor box예측 메카니즘을 사용해서 해결하려고했는데 이러한 방식은 model의 안정성을 떨어뜨리면서 잘 작동하지 않았다고 합니다.
4-2. Linear x,y predictions instead of logistic
4-3. Focal loss
학습을 하고있는데, Background는 금방 학습이 되서 학습 도중에도 Background 영역은 높은 class score를 나타낼 것이고, 학습 중 만약 Background class가 0.9일 경우에 감마값을 2로 가정하고 Focal Loss를 적용하게 되면 기존에 Cross-Entropy를 사용했을 때, 보다 훨씬 작은 Loss값을 나타내게 되고, 그렇지 않은 Object의 Class 경우에는 상대적인 큰값을 갖게 됩니다.
그런데 YOLO의 기본 LOSS는 아래과 같은데, 기존 YOLO LOSS는 Background시, Object시의 Loss를 분할해서 주고있고, Class에 Background로 넣어주는게 아니라, Objectness score라는 부분을 따로 뽑고있기 때문에, 저자는 YOLO에 Focal Loss를 주는거 자체가 확신은 없지만, 큰 의미는 없을거라고 생각하는거 같습니다.
4-4. Dual IOU thresholds and truth assignment
5. What This All Means
6. Rebuttal
해당 세션에는 레딧이나 트위터 및 메일 등에서 언급되었던 몇가지 이야기에 대한 저자의 반박 내용을 적어놨습니다.
먼저 저자는 논문에 언급 된 그래프의 이상한 위치로부터 지적을 많이 받은 것 같습니다. 그에 대해서 저자는 해당 말이 틀린 말은 아니지만 이러한 내용에 대해서 생각해보라고 내용을 던지게 됩니다. 어차피 현 상황에서의 Detection System은 2~3%의 mAP 향상에 대해서 이야기하고 있다는 사실을 깨달아야하고, 그래프를 어떻게 표현하냐에 따라서 그래프가 확연히 다를 수 있다는 것을 다음과 같은 그래프로 던집니다.
왼쪽의 그래프를 봤을 때, YOLO v3는 다른 Detection System들과의 Run-Time이 크게 차이나는 것 처럼 안보일 수 있지만 Run-TIME을 FPS로 표기하게 되면 엄청난 차이가 일어나는 것 처럼 표기될 수 있습니다. 실제로 실 사용을 위해 시스템에 적용했을 때, FPS의 증가는 체감상 극단적으로 나타날 수 있고, 저자는 YOLO 시스템 자체가 accuracy가 비슷하다고 해서 해당 System에 대해서 별 차이 없다고 느낄 수 있는 부분을 반박한 것 처럼 보입니다.
두번째는 COCO metric에 대해서 논리적으로 너무 약하다고 언급한 내용에 대해서는 논문 쓰면서 자기 논문을 정당화하는 논리를 찾아야해야한다는 점을 이야기하면서 다시한번 COCO metric의 기준에 대해서 언급합니다. VOC PASCAL은 GT로 표기하는 label 자체가 부정확하기 때문에 IOU를 낮게 잡았는데, COCO의 label이 VOC PASCAL FORMAT보다 더 좋다라는 근거가 있냐고 이야기합니다. COCO DataSet이 모든 DataSet에 대해서 Semantic Segmentation label이 있기 때문에 그럴 수도 있다고 이야기하면서 그저 논문의 정당화가 부족했기 때문이라고 이야기합니다. 하지만 COCO metric이 bounding box에 대해서 강조하는데, 저자는 bounding box를 강조하는 것을 통해서 다른 부분(Classification)에 대해서 약하게 보는게 맞는거냐고 의문을 던집니다. 극단적인 예를 들어 2가지 시스템이 다음과 같은 결과를 냈을 때, COCO에서는 평가결과가 둘다 좋다고 이야기하지만 실은 그렇지 않은 것 아니냐고 이야기합니다. 또한 mAP 측정은 각 class별로 측정하기 때문에 이미 엉망이 됬다고 생각한다고 합니다.
이미 mAP(mean average precision)이라는 개념은 있는데 COCO의 metric은 똑같이 mAP로 할거냐고 물어보기도 합니다.
따라서 YOLO저자는 실세계에서 사람들이 원하는 object에 대한 image를 주고 이에 대해서 클래스에 대한 AP를 제거하고 전체 평균 AP를 측정하는 것이 어떻냐고 합니다. 저자는 이러한 바보같은 metric에 맞춰서 YOLO를 개선시키고 싶진 않다고합니다. 차라리 box가 아닌 segmentation을 사용한다면 거기에는 수용하겠다고 합니다.