YOLOv2

아키텍처, 학습방법, 성능개선전략

Abstract

  • YOLO9000(can detect 9000 categories), SOTA(state of the art)

  • both novel and drawn from pior work 
    • Using a novel, multi-scale training method

  • art detection like PASCAL VOC and COCO
  • 67FPS_76.8mAP, 40FPS_78.6mAP

  • 학습방법: jointly train on object detection and classification
  • 핵심 아이디어: Better, Faster, Stronger


Better

  • Batch normalization
    • 기울기 소실 문제 해결 2가지 중 1개에 속한다. (2015, 레즈넷_레즈 듀얼 모듈)
    • Conv가 수행되고 난 뒤에 Batch norm이 들어간다. (mAP를 2% 향상)
      • shape의 변화는 없으나, 성능이 좋아진다.
      • 배치 기준의 평균과 표준편차를 계산해서 동일한 shape의 결과 값을 만들어 낸다.
        • 1단계 정규화: (X-m)/s
        • 2단계 스케일링 & 쉬프트: rx+b
          감마와 베타는 Cost가 낮아지는 방향으로 학습시키는 파라미터

    • Internel covariate shift 라고 불리는 문제를 해결한 것이다.
      • Covariate: 공변량 (->데이터)
      • Covariate shift problem: 공변량 이동 문제 (-> 데이터 분포 변형 문제: 학습데이터와 테스트 데이터의 차이가 심한 상태. 학습한 대로 문제가 나오지 않음.)
      • Internel covariate shift: 내부 공변량 이동 문제 (모델 안에서 레이어들의 피처맵 간의 차이가 심한 상태 -> 깊어질수록 심각해짐. 선형적으로 자연스럽게 바뀌지 못함.)


  • High Resolution Classifier
    • yolov1의 분류는 224x224 이미지, 디텍션은 448x448 이미지로 학습된 모델을 전이학습 함. -> 2단계로 나누어 학습시키자.
      • 448 x 448 이미지로 분류 모델을 전이학습.(10epoch)
      • 디텍션 모델로 변경하여 추가 전이학습.


  • Convolutional with Anchor Boxes
    • BBOX의 width, height에 초기값을 주고 학습
      • 정답 w, h과 예측 w, h의 차이: 초기 학습시에는 차이가 클 것이다.

    • 정답 bbox들의 w, h값들 -> 분포를 계산 -> w,h 초기값 세팅

    • 문제의 좌표를 찾지 않고 offset을 조정
      • 초기값으로 width=0.35, height=0.6
      • 예측을 초기값 기준 상대값으로 예측
        • width=0.35+@, height=0.6+@


  • Dimension Cluster
    • Anchor boxes 좌표 x, h 산출방법:
      정답 w, h들을 가지고 적당한 군집화를 하여, 군집별로 평균값을 낸다면 해당 문제를 완화하여 보다 나은 w, h 초기값을 선택할 수 있다.

    • 군집화
      • k-means 방법론
        • k: 군집의 개수 (사용자가 선택)
        • 각 군집의 중심 값을 임의로 설정
          (데이터 중에서 하나를 중심 값으로 잡아도 된다.)
        • 모든 데이터를 모든 중심 값과 거리를 계산 -> 가까운 중심값의 군집으로 군집화 수행
        • 각 군집의 데이터들의 실제 중심값을 다시 계산
        • (반복) 다시 모든 데이터를 각 중심 값과 거리를 계산, 다시 군집화, 실제 중심값 다시 계산

    • yolov2는 k=5, 즉 5쌍의 (w, h)가 나온다.
      • yolov2는 bbox가 5개다. 


  • Direct location prediction
    • 각 그리드 별로 x, y값을 추론하는 방식을 개선한 기법이다. 각 그리드 안에서 상대적인 위치를 확률값으로 추론하는 방식이다.
    • 각 그리드의 좌측 상단 좌표(Cx, Cy) 로부터 얼마만큼 떨어져 있는지를 확률값으로 계산한다.
    • 기존 yolo v1 에서는 x, y 값이 해당 그리드 영역을 벗어나는 것을 통제하지 못했다. 이 방식은 무조건 해당 그리드 안에서만 추론이 가능하게 한다.
      예측값 = 0, 0 -> 좌측상단 / 예측값 = 1, 1 -> 우측 하단


  • Fine-Grained features
    • shape의 크기가 큰 상태는 더 작은 값을 잘 잡아 낼 수 있음. 
    • Layer를 진행해 나가는 중에 feature-map의 크기가 26x26이 되었을 때, 13x13 크기로 4분할 하는 작업을 추가한다. 그리고 Conv, pool없이 채널방향으로 이어붙인다.
    • 26 x 26 x 512 -> 13 x 13 x 2048
    • 맨 마지막 피처맵 (13 x 13 x 1024)에 13 x 13 x 2048을 붙여줌


  • Multi-Scale Training
    • Yolo v2 모델 구조를 다시 보면, 처음부터 끝까지 convolution layer 와 pooling layer로만 이루어져 있음을 알 수 있다. 즉 FC layer가 없기 때문에, 입력 이미지의 크기를 다양하게 학습할 수 있다.
      입력 이미지의 크기를 다양하게 학습한다는 것은 다양한 크기의 오브젝트에 대한 일반화된 학습이 가능하다는 것이다.

Faster

Darknet-19 라는 독자적인 모델을 Backbone network로 사용
: 1x1 conv층이 많다. -> 경량화된 모델: 속도에 유리

Stronger

detection과 classification의 레이블 수준이 다른 경우에 계층적인 트리인 word tree 방법론을 제안

아키텍쳐


  • Yolov1: (64x64 : 1x1)
    • 448 x 448 x 3 -> 7 x 7 x 256

  • Yolov2: (32x32 : 1x1)
    • 416 x 416 x 3 -> 13 x 13 x 125
    • 13x13이 되면서, 작은 물체를 v1보다는 더 잘 잡을 수 있다.
    • 추가로 26x26 (13번째 conv)를 Fine-Grained features 하여 합친다.
























IOU Loss = 1 - IOU

1. 정답과 예측이 겹쳐지는 범위가 작아질수록 IOU Loss는 커진다. 그러나, 겹쳐지는 범위가 없더라도 차등을 주려면 어떡해야 할까? 
 



2. 중심과 중심 사이의 거리 반영




3. 종횡비 반영





댓글 쓰기

다음 이전