YOLOv4

YOLOv4: 성능 개선을 위해서 기존 기법들을 잘~ 조합한다.

Abstract

  • Practical testing of combination of such features (실용적인 조합)
  • batch-normalization
  • residual-connections
  • Weighted-Residual-Connections (WRC)
  • Cross-Stage-Partial-connections (CSP)
  • Cross mini-Batch Normalization (CmBN)
  • Self-adversarial-training (SAT)
  • Mish-activation
  • Mosaic data augmentation
  • DropBlock
  • CIoU loss


Consists of

  • 독창적인 모델링 -> 기존 feature 결합한 모델링

  • 욜로v3와 v4의 차이
    • v3
      • Backbone: Darknet53
      • Neck: FPN
    • v4
      • Backbone: CSPDarknet53
      • Neck: SPP, PAN


YOLOv4 전략

  • backbone(2): 사전학습 성능개선전략

  • detector(2): 전이학습 성능개선전략


Freebies, Specials

  • Bag of Freebies
    • 추론 비용(추론시간) 없이 정확도를 향상시키는 훈련 방법. 
    • 훈련할 때 시간이 걸린다.
    • 일반적으로 데이터 증강
    • BOF가 아닌 것은?
      • 데이터 증강
      • dropout (뉴런을 일부만 사용, 추론시 모두 사용)
      • focal loss (loss는 학습할 때만 확인한다. weight를 업데이트하기 위해)
      • label smoothing (레이블을 바꿔줌. 과적합을 막기 위해서)
      • mish (활성화 함수 변경) **정답

  • Bag of Specials
    • 추론 비용(추론시간)이 약간 높아지지만 정확도가 유의미하게 향상되는 처리방법
    • BOS가 아닌 것은?
      • swish (활성화 함수)
      • SPP
      • SAM
      • DIOU NMS (post processing)
      • dropblock (추론에서만 사용) **정답


BOF와 BOS

Object Detection에서는 추론 시간이 모델 성능에 중요

  • BOF: 학습시에만 사용한 기법 (오차계산, 학습방식, 증강)

  • BOS: 모델 자체 수정, 후처리 기법(욜로v1의 NMS)


성능개선전략 정리


성능개선 추가, BOF

  • Optimizer (weights변경 방법, ex)경사하강법, Adam...)
  • Initializer (weights 초기화)
  • Learning rate scheduling
  • Label smoothing (정답 레이블을 다중선택 가능하게 변경, 반대는 one-hot encoding)
  • Learning strategy

성능개선 추가, BOS

  • Ensemble (앙상블)


Mosaic

  • Cutmix가 2개를(얼굴, 몸) 합치는 거라면, Mosaic은 4장.

  • Mosaic은 위치 이동에 대한 학습도 할 수 있다.
    (문제가 항상 중앙에만 있으란 법이 없음)

  • 모자이크는 1장당 포함된 사진이 늘어나므로 배치가 늘어나는 효과가 있다.
    • 배치는 클수록 더 좋은 학습을 하게 된다.
    • 한 장씩 공부하면, weights 이동이 빈번하게 일어난다. 

CSPDarknet53: Backbone

ResNet(2015)
  • skip connection
    • 건너 뛰어서 전달
  • Add connection
DenseNet(2016)
  • dense connection
    • 여러 곳에 달
  • concat connection
    • 계산량이 늘어난다. 피처맵이 두꺼워진다.

CSPNet

  • concat 을 분할해서 한다.
















SPP : Spatial Pyramid Pooling

  • 입력 이미지 크기가 자유롭다.
    • FC가 있더라도 고정된 사이즈로 넣을 필요가 없다. 

  • 기존풀링: patch size = 2x2 혹은 3x3 등 고정된 사이즈로 사용
    • 기존풀링: 2x2 필터를 사용하여, 항상 output size를 반으로 줄였다.
    • SPP: output size가 고정될 수 있는 필터를 사용한다.

  • 3가지 size의 풀링을 사용하고 선형으로 만들어 항상 5,376 x 1 이 나온다.


  • YOLO에서는 Flatten하지 않기 때문에 수정된 SPP를 사용한다.
    • 백본 -> 넥 사이에 사용한다.

    • Output size 4x4, 2x2, 1x1 고정x
      pooling 사이즈를 3가지로 정하고, 
      모두 same padding 처리를 하여, 동일한 사이즈의 피처맵 3개를 만들고,
      원본 피처맵을 포함한 4개의 피처맵을 concat

    • Pooling size가 달라도 동일한 크기의 피처맵을 만들기 위해, stride=1, same_padding

    • 다양한 크기의 풀링을 동시에 적용하여 표현력이 뛰어난 피처맵을 생성한다.

PAN

  • concat을 한 방향으로만 하는 게 아니라 양 방향으로 한다.

  • 사이즈에 따른 장단점을 서로가 보완
    • 52 x 52: 학습이 가장 덜 되었지만, 명시적이고 작은 객체에 집중.
    • 26 x 26: 학습의 숙련도가 중간단계.
    • 13 x 13: 학습이 잘 되어 있으나, 너무 추상화 되어 있다. 큰 객체에 집중.


댓글 쓰기

다음 이전