[논문리뷰] YOLOv3 : An Incremental Improvement - penny4860/study-note GitHub Wiki

1. 정리

요약

  • retinanet보다 빠른 1-stage detector를 구현
  • retinanet과의 비교
    • multi-scale feature
      • retinanet은 5-scale, yolo3는 3-scale
    • subnet 구조
      • retinanet은 cls/reg를 나누어서 예측
      • yolo3는 1개로 예측
  • yolo3가 빠른 이유?
    • scale을 덜 사용하고 5->3
    • subnet이 cls/reg 로 나누지 않고 1-path를 사용

질문

2. 내용

2. The Deal

2.1. Bounding Box Prediction

2.2. Class Prediction

  • softmax를 사용하지 않고 label별로 logistic classifier 적용.
def _activate_probs(objectness, classes, obj_thresh=0.3):
    # 1. sigmoid activation
    objectness_prob = _sigmoid(objectness)
    classes_probs = _sigmoid(classes)
    # 2. conditional probability
    classes_conditional_probs = classes_probs * objectness_prob
    # 3. thresholding
    classes_conditional_probs *= objectness_prob > obj_thresh
    return objectness_prob, classes_conditional_probs

2.3. Predictions Across Scales

  • Yolo 구조
    • Backbone : Feature Extractor
      • input : image
      • output : (C3, C4, C5)
    • FPN
      • input : (C3, C4, C5) :
        • [52, 52, 256], [26, 26, 512], [13, 13, 1024]
      • output : (P3, P4, P5)
        • [52, 52, 128], [26, 26, 256], [13, 13, 512]
    • subnet (detection net)
      • input : (P3, P4, P5)
        • [52, 52, 128], [26, 26, 256], [13, 13, 512]
      • output : (D3, D4, D5))
        • [52, 52, 3*(n_cls+4+1)], [26, 26, 3*(n_cls+4+1)], [13, 13, 3*(n_cls+4+1)]
  • detection tensor 에서 grid, anchor 별로 3가지를 한번에 예측
    • objectness : 1
    • box : 4
    • class : n_classes
    • 3-scale
    • 3-anchor per grid

2.4. Feature Extractor

  • resnet에서의 skip connection(shortcut) / bottleneck을 변형해서 사용
    • Darknet-53 에서의 pattern
      • [(1x1)-128, (3x3)-256, residual]

2.5. Training

  • Hard negative mining 은 사용하지 않고
  • multi-scale training
  • augmentation 을 많이 사용

3. How we do

  • 성능
    • Old detection metric 으로 평가하면 retinanet과 차이가 별로 없으나
    • Coco metric으로 평가하면 gap이 있음.
  • 결론 : IOU threshold 가 커질수록 YOLO의 성능이 떨어진다.

4. Things didn't work

  • focal loss
    • 성능이 안좋아져서 안썼다고 함. (mAP 2.0 감소)
    • objectness를 따로 예측하기 때문에 imbalance 문제에 덜 민감한듯
  • gt-box를 할당할때 iou-threshold를 주는 방식
    • faster rcnn에서는 iou-threshold로 gt-box를 assign
      • 0.7이상이면 GT
      • 0.3미만이면 negative
      • 나머지는 학습에 사용 안함.
    • retinanet도 비슷하지만 threshold가 약간 다름.
      • 0.5, 0.4
    • yolo에서는 best matching box만 assign