본문 바로가기
ML 관련/이미지 처리 관련

YOLO version(1~6)별 정리

by 탶선 2023. 3. 16.
반응형

YOLO v1(2016.05)

  • Anchor Box를 사용하지 않음 
    • Anchor Box - object detecion 을 위해 크기, 비율 미리 정해놓은 Bbox
  • Cell 단위로 Bounding Box Regressor 과정을 통해 Box를 찾음
    • Localization Error로 인해 성능이 낮다
  • 각 Grid Cell에 대해 2개의 Bounding Box를 찾음
    • Classification은 한 개에 대해서만 수행
    • 따라서 겹치는 Object는 Detection하기 어려움
  • 작은 물체에 대해서는 성능이 나쁨

YOLO v2(2017.12)

  • YOLO v2는 Classification 문제에 비해 Object Detection 문제는 예측 가능한 Class의 개수가 매우 적음을 지적
  • 이를 해결하기 위한 방법을 제시한다.

 

  • 1. 속도 성능 향상
    • BackBone으로 Darknet19 사용
  • 2. 성능 개선

2-1. Batch Normalization

  • Vanishing Gradient 문제 해결
  • 모든 Conv Layer 뒤 Batch Normalization 적용

2-2. High Resolution Classifer

  • 기존 v1 (224x224) pre-train / 실제 입력 (448x448)
  • v2는 (224x224) pre-train 중 마지막 10epoch 에서 (448x448)의 이미지로 fine tuning, 최종 입력 사이즈 416x416

2-3. Convolutional with Anchor Boxes

  • 각 grid cell에 대해 5개의 anchor box 예측
    • 기존(box는 2개, 분류는 한번)
    • v2(모든 anchor box)에 대해 분류

2-4. Dimension Cluster

  • optimal anchor box 탐색 - K-means Clustering활용
    • GT들의 width, height로 K-means Clustering 수행, K개의 Anchor box 찾음
  • YOLO v2에서는 K를 5개로 진행(Anchor Box 5개)

2-5. Direct Location Prediction

  • Box에 Sigmoid 함수 적용
    • Box의 중심점을 Cell내 존재하도록 → 학습 초기 iteration으로 모델 불안정 해결
  • 2-6. Fine-Grained Features
    • YOLO v1 : input image(416x416) → output feature map(7x7)
    • YOLO v2 : input image(416x416) → output feature map(13x13)
    • 작은 물체 검출이 잘 안되는 문제 해결을 위해 Passthrogh layer 추가
  • Multi-Scale Training
    • YOLO v1 : 마지막 layer(Fully Connected Layer)적용
    • YOLO v2 : 마지막 layer(CNN Layer)적용

YOLO v3(2018.04)

  • Multilabel Classification
    • 실제 어떤 물체가 사람이면서 동시에 여성일수도 있음.(즉, 한 물체에 대해 multi classlabel을 가질 수 있음)
    • v2 : 마지막에 softmax
    • v3 : 모든 class에 대해 sigmoid를 취함( 각 class별 binary classification 가능하도록)
  • Backbone
    • v2 : Darknet-19
    • v3 : Darknet-53
  • Prediction Across Scales
    • v1부터 small object detecion이 어려움
      • -> prediction feature map으로 3개의 scale 사용 
        1. 13by13 size의 feature map에서 큰 이물을 Detection
        2. 26by26 size의 feature map에서 중간 크기의 이물을 Detection
        3. 52by52 size의 feature map에서 작은 이물을 Detection

YOLO v4(2020.04)

  • 기존 YOLO단독으로 쓰이는게 정확도의 문제라고 지적
    • → YOLO v4 = YOLO v3 + CSPDarknet53(backbone) + SPP + PAN + BoF + BoS
  • SPP(Spatial Pyramid Pooling)
    • Receptive field를 늘리는 방법 중 하나
    • feature map을 정해준 grid에 맞추어 max pooling진행
    • 가장 왼쪽 pooling layer는 feature map을 4x4로 나눔
    • 각 grid cell별 max pooling하여 한 줄로 flat, 마지막 layer는 전체를 한 값으로 pooling
  • PAN(Path Augmented Network)
    • YOLO v3(FPN) → YOLO v4 (PAN)
      • FPN - 최하단 Layer가 최상단 도달까지 100Layer 이상을 거쳐야 함
      • PAN - FPN이 생성한 {P2, P3, P4, P5}를 활용 → {N2, N3, N4, N5} 생성
        • → 최하단 Layer가 최상단 도달까지 몇 개의 Layer만 거치면 됨
          • → low-level정보가 high-level에 온전히 전달 가능
          • → Bottom-up Path Augmentation을 통해 Low-level feature정보를 High-level feature에 효과적 전달(object detection시 localization 성능 향상)
          • Low-level feature의 특성
            • small object 검출에 유용
            • 물체의 경계 추출하는 역할
          • High-level feature의 특성
            • large object 검출에 유용
            • 학습과정 중 표현력이 커지며 이미지의 context 포착하는 역할
          1. BOF(Bag of Freebies)
          • inference 시간은 늘리지 않으면서 높은 정확도를 위해 학습시키는 방법
          • ex) Data Augmentation, Regulaization, Loss Function 등을 통한 실험 진행
            • 1-1. Data Augmentation
              • 입력 이미지에 변동성↑
              • 설계된 모델이 다른 환경에서 얻은 이미지에 보다 강건해지도록
            • 1-2. Sementic Distribution Bias
              • Class Imbalance 문제 해결을 위해 Focal Loss적용
                • Class : 물체/배경 - 대부분의 이미지에서 물체보다 배경 영역이 더 큼
              • Label refinement network, Label smoothing 방법 사용
              • 서로 다른 category 간 연관성 표현을 위해
              • ex) [고양이 : 0.9, 강아지 : 0.1, 사람 : 0]
              • 모델을 보다 robust하게 함
              • 분류 문제에서 효과 좋음 / 탐지 문제에서 성능 하락
            • 1-3. BBox Loss Function
              • 기존 MSE외 IoU기반 Loss function(GIoU, CIoU, DIoU) 실험
                • MSE보다 IoU기반 Loss들이 성능이 좋음
                • 최종 CIoU 사용
            • 1-4. Regularization method
              • DropOut, DropPath, Spatial DropOut, DropBlock 실험
                • overfitting 막기 위해
                • DropBlock 적용 시 성능 제일 좋음
            • 2. BoS(Bag of Specials)
              • inference시간 조금 증가, 정확도 향상시키는 방법
              • 모델 및 후처리에 적용하는 기술들
              • 2-1. Enhance receptive field
                • backbone에서 얻은 feature map에 대한 receptive field 키우는 방법
                • SPP, ASPP, RFB 등의 방법 사용
                • v4는 SPP사용
              • 2-2. Attention module
                • SE(Squeeze-and-Excitation) / SAM(Spatial Atention Module) 사용
                • SE - 2% 연산량 증가, GPU 10% 연산량 증가1% 정확도 향상
                • SAM - GPU inference 속도 영향x, 정확도 향상
              • 2-3. Feature Integration
                • feature map 통합을 위해 SFAM/ASFF/BiFPN 실험
              • 2-4. Activation Function
                • Leakly ReLU / Parametric ReLU / ReLu6 / SELU / Swish / Hard-Swish / Msih 실험
                • Mish가 효과 좋음
              • 2-5. Post-Processing Method
                • NMS(같은 객체 예측 Bbox 제거) - Greedy NMS / Soft NMS / DIoU NMS 실험
                • DIoU NMS 사용
              • 2-6. Normalization of the network activations by their mean and variance
                • BN(Batch Normalization) / CCBN or SyncBN / FRN / CBN 실험
                • CBN이 좋음
              • 2-7. Skip-connections
                • Residual connections / Weighted residual connections / Mini-input weighted residual connections / CSP
                • CSP가 포함된 CSPDarknet-53 backbone으로 사용
            • 3. Backbone
              • 3-1. CSPDarknet-53 사용 이유
                • small object 예측을 위해 input Resolution을 크게 사용 가능(512x512)
                • Receptive Field를 키워주기 위해 깊은 Layer 쌓음
                • 모델 성능을 위한 파라미터 수↑
                • inference속도 빠름
              • 3-2. Neck
                • Additional Block으로 SPP, SAM사용
              • 3-3. Head
                • YOLO v3과 같은 3 scale 사용

YOLOX

  • 기존의 YOLO Detector에 Anchor-free 방식 적용
  • Decoupled Head, SimOTA와 같은 다양한 탐지 테크닉 적용

 

YOLO v5(2020.06)

  • 논문x, 코드만 공개
  • 블로그에서 설명(성능 외 다른 부분에 대한 설명 없음)
  • Backbone
    • YOLO v4 - Darknet(C로 구현)
    • YOLO v5 - pytorch로 구현
      • Focus() → Conv Layer
      • SPP() → SPPF()
      • BottleNeckCSP() → C3()
  • Mosaic
    • Image Augmentation 기법 중 하나
    • 4장의 이미지를 한 장으로 만드는 기법
    • 각 이미지의 사이즈는 random하게 하여 자유도 부여
      • → 이미지 사이즈가 작아져, 작은 물체가 많아짐
      • → 기존 YOLO의 small object detect의 단점 극복 하도록 함
      • → 4장이 1장으로 되니 적은 이미지 학습으로 적은 batch size로 학습 가능하도록 함

예시

 

YOLOv5 - Complete Guide and Overview

With the v6.0 release, YOLOv5 further solidifies its position as the leading object detection model and repository.

blog.roboflow.com

 

YOLO v6(2021.10)

 

 

참고자료

# https://leedakyeong.tistory.com/entry/Object-Detection-YOLO-v1v6-%EB%B9%84%EA%B5%90

# https://wikidocs.net/167664

 

[Object Detection] YOLO v1 ~ v6 비교(1)

YOLO Version별 비교 지난 포스팅에서 Object Detection 알고리즘 중 YOLO v1에 대해 자세히 알아보았다. 2022.04.04 - [AI/Object Detection] - [Object Detection(객체 검출)] YOLO v1 : You Only Look Once [Object Detection(객체 검출

leedakyeong.tistory.com

 

반응형

댓글