AI/vision

[논문 간단 리뷰] You Only Look Once: Unified, Real-Time Object Detection

민사민서 2025. 1. 2. 17:39

Faster R-CNN

  • two stage 방식 (당연히 real-time은 어려움..)
    • 이미지 전체에 대해 backbone NW + region proposal NW 쭉 통과시키고
    • 각 region에 대해 cropping (rol-pool, rol-align) + class prediction + bbox translate prediction

 

YOLO Introduction

  • 기존 모델들의 한계
    • DPM(Deformable Parts Model): sliding window approach + 각각에 대해 classifier 돌아감 (비효율적)
    • R-CNN: generate potential bbox(region proposal) + then run classifier, 느리고 optimize하기 어렵다
  • single conv network가 multiple bbox들과 그들의 class probabilities를 동시에 예측한다 = 빠르다
    • region proposal + feature extraction + classification + bbox regression을 하나로 통합
  • 이미지 전체를 한 번에 본다 = 예측 시 global하게 reasoning을 한다, background error가 적다

 

Unified Detection

  • 우선 input 이미지를 S x S grid로 나눈다. 각각의 grid cell은
    • 1) B개의 bbox와 confidence score for each bbox를 예측하고
    • x,y,w,h,confidence (confidence는 predicted bbox와 gt bbox간 IoU와 관련이 있음)
    • confidence score = 물체가 있을 확률 * IoU
    • 2) C개의 conditional class probability를 예측한다 // Pr(Class_i | Object)
    • 각 grid cell이 몇 개의 bboxes를 예측하든 class probabilities는 한 세트만!
    • 1) 에서의 confidence와 2)에서의 conditional prob을 곱하면 class-specific confidence score for each bbox

  • 즉 이러한 prediction은 S x S x (B * 5 + C) tensor 로 모델링될 수 있겠다

cf) 특정 object에 대해 responsible한 cell은 gt box의 중심 좌표가 위치하는 cell.

 

Network Design

PASCAL VOC detection dataset에 대해 evaluate를 했다 (class 20개 dataset)

  • GoogLeNet model 구조에서 영감을 받아 24개의 Conv layer + 2 FC layer 조합으로 구성 (Fast YOLO는 9개의 Conv layer)

  • backbone = 앞의 20개의 conv layer (빨간색 왼쪽 부분)
    • backbone의 주된 목적은 feature extraction. 하지만 당시의 classification SOTA model인 VGG16 사용하지 않음
    • 자신들만의 backbone 모델인 DarkNet framework 도입
    • fine-grained visual information을 위해 input resolution을 224x224 → 448x448로 증가시킴
  •  final output은 7x7x30 크기의 3차원 tensor (prediction)
    • 출력값의 셀 하나가 원본 이미지의 64x64 영역을 cover (represent) 한다
    • 각 grid(cell)은 해당 영역을 중심으로 하는 object bbox 2개 (10) + object의 class score 20개 (20)
    • 즉 총 98개의 bbox를 검출하겠죠

 

Training

  • pretrain backbone (DarkNet framework)
    • first 20 conv layers에 대해 ImageNet 1000-class competition dataset으로 pretrain 시킴
  • transfer learning
    • detection을 수행하도록 model을 바꾸기 위해 4 conv layer와 2 FC layer 추가 (with random weights)
    • Pascal VOC 데이터로 fine tuning
  • 그 외 디테일들?
    • bbox의 width와 height를 이미지의 width/height 기반으로 normalize (0~1)
    • leaky rectified linear activation 사용
    • sum-squared error 사용 (단순 계산상의 편의, average precision maximize와 정확히 align하지는 않음)
    • bbox 좌표 예측 loss의 영향을 증가시키고 object가 없는 box의 confidence prediction loss의 영향을 감소시킨다 => object가 없는 cell의 confidence가 overpower 하는 것을 방지하기 위해

    • bbox width/height의 square root 값을 predict => 큰 bbox보다 작은 bbox에서의 deviation의 영향이 훨씬 큰데 이걸 어느정도 보정하기 위해
    • overfitting 방지하기 위해 dropout, data augmentation 적용 (random scaling / translation, adjust exposure / saturation in HSV space)
  • inference 시
    • one network evaluation만 거치면 됨
    • 크거나 border 근처의 object에 대해서는 multiple celld에서 검출될수도
    • non-maximum suppression을 활용해 IoU가 임계값보다 큰 bbox는 모두 제거해나감 (동일한 detection)
  • multi-task loss function
    • bbox regression loss (localization loss) + confidence score loss + class score loss

YOLO 모델의 한계

  • 각 셀이 2개의 bbox와 1개의 answer label만 예측 => 모여있는 object들이나 엄청 작은 object를 잘 감지 못함
  • 완전히 새롭거나 unusual한 aspect ratio를 가진 object에 대해 잘 동작하지 않을 수 있다
  • small bbox와 large bbox에서의 error가 loss function에서 동일하게 간주된다

 

real time 가능해서 webcam 같은 경우에 tracker 처럼 동작하기도 하더라