Object Detection 분류

 

Object Detection에는 Localization과 Classification 두가지 절차가 있습니다.

  • Localization : Image에서 객체가 있을 만한 위치를 찾는 것.
  • Classification : 어떤 물체인지 판단하는 것.

 

2 Stage는 Localization (ex : Selective Search, RPN ...) → Classification 순서로 진행이 되고,

 

1 Stage는 Localization과 Classification이 동시에 처리합니다.

 

1 Stage는 2 Stage보다 처리 속도는 빠르지만 정확도면에서는 뒤떨어지는 경향이 있다고 합니다.

(그런데 요즘 1 Stage도 굉장히 좋아져서 잘 모르겠다.)

 

RCNN 계열은 2 Stage, Yolo는 1 Stage라고 보면 됩니다.

 

 


 

Yolo (You Only Look Once)

 

Yolo는 1 Stage Object Detection Model 입니다.

 

2 Stage인 RCNN 계열은 RPN을 통해 객체를 찾고, 그 부분을 따로 Classification 해줍니다.

 

즉, RCNN 계열보다 속도가 더 빠르기 때문에 실시간으로 이용하기에는 더욱 적절합니다.

 

버전별로 살펴보겠습니다.

 

 


 

 

Yolo v1

 

Yolov1

 

※ 특징

  • Backbone : VGG 16
  • Input Image를 7 x 7 의 Grid로 나눕니다.
  • Bounding Box의 개수는 Grid당 2개씩 있습니다.
  • 한 그리드당 (B x 5 + C) 크기의 Output 값이 나옵니다. → 최종 (7 x 7) x (B x 5 + C)
    • B : 2개의 BBox 정보가 들어있다.
      1. x : Bounding Box의 중심 x좌표
      2. y : Bounding Box의 중심 y좌표
      3. w : Bounding Box의 너비
      4. h : Bounding Box의 높이
      5. confidence-score : \( Pr(Object) * IoU \)
    • C : 어느 특정 Class에 속하는지. (Class의 개수만큼의 크기로 나옴)
      • ex) Class가 10이면 ( 0, 0, 1, 0, 0, ..., 0 )
  • BBox가 2개이지만 한 Grid당 Object 하나만 Detection 가능합니다.
    • 위의 설명과 같이 2개의 BBox 정보가 들어있지만, Class는 하나밖에 없습니다.

 

 

※ Yolov1 의 문제점

  • 여러 물체들이 겹쳐있으면 제대로 된 예측이 어렵습니다. - 하나의 Grid 당 하나의 Object
  • 물체가 작을수록 정확도가 감소합니다.
  • 학습할때 사용된 BBox와 크기가 많이 다른 형태는 정확히 예측하지 못합니다.

 

 


 

 

Yolo v2

 

Yolov2
Darknet 19

 

※ 특징

  • Backbone : Darknet 19
  • Input Image를 13 x 13 의 Grid로 나눕니다.
  • Yolov1에서 사용되었던 Fully connected 사라집니다.
  • BatchNormalization 사용합니다.
  • 위 사진의 노란 부분을 추가함으로써 작은 Object도 Detection 할 수 있도록 했습니다.
  • Grid 당 Anchor Box 5개 씩
    • Anchor Box : Grid당 여러개의 Bounding Box를 배치 - 아래 사진은 예시!

Anchor Box 예시

  • Yolo v1과는 다르게 하나의 Grid에서도 여러 객체를 Detection 할 수 있습니다.
    • Output shape : 13 x 13 x B(5 + C)
    • 즉, Yolo v1과는 다르게 모든 BBox에 대한 정보를 Output으로 가집니다.

 

Bounding Box Regression

  • Bounding Box Regression : Anchor Box의 좌표를 객체에 더욱 알맞게 조정해줍니다.
    • \(  \sigma(x) \) : sigmoid(x)
    • \( C_{x}, C_{y} \) : Grid cell의 좌상단 끝의 offset
    • \( p_{w}, p_{h} \) : Anchor Box의 width, height
    • \( b_{x}, b_{y} \) : GT에 가까워지도록 계속해서 학습되는 trained anchor box의 중심 좌표
    • \( t_{x}, t_{y}, t_{w}, t_{h} \) : 5개의 Anchor Boxes 각각의 좌표
      • 학습을 진행하며 \( t_{x}, t_{y}, t_{w}, t_{h} \) 는 GT와의 차이가 0이 되게 수렴되게 됩니다.

 

 

 

 

 

 

 

 

 

 


 

 

Yolo v3

 

Yolov3

 

※ 특징

  • Backbone : Darknet 53 (Darknet 19의 발전된 버전)
  • Grid 당 비율과 크기가 다른 9개의 Anchor Box 사용합니다.

 

https://arxiv.org/ftp/arxiv/papers/1812/1812.10590.pdf
https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/

  • 여러 Scale에서 나온 값을 사용합니다.
    • 작은 Object도 탐지 가능!

 

https://gombru.github.io/2018/05/23/cross_entropy_loss/

  • Softmax는 제일 높은 하나의 클래스 확률 값만 높게 설정해 주기 때문에 Sigmoid → Binary cross entropy (Independent logistic classifiers)를 취해줍니다.
    • input으로 남자 사람의 이미지가 들어갔다고 가정했을때, 만약 Class의 종류 중 'Person'과 'Man'이 있다면 둘 중 하나의 값이 나오게 됩니다. 이 이유는 입력 이미지에는 하나의 클래스만 있을 것이라는 가정을 하기 때문입니다. 그래서 정확하게 예측하기 위해 Independent logistic classifier를 사용해줍니다.
  • Focal Loss 적용하려고 했지만 성능이 저하되서 Focal Loss를 사용하지 않았습니다.

 

 

 

 

 

 

 

 

 

 

출처 : 

 

+ Recent posts