YOLO

2021. 1. 9. 13:06Computer vision ღ'ᴗ'ღ

728x90

※ 본 글은 <딥러닝 컴퓨터비전 완벽가이드> 강의 및 여러 자료를 참고하여 쓰여진 글입니다. ※

github: github.com/chaeyeongyoon/ComputerVision_Study

 

chaeyeongyoon/ComputerVision_Study

Contribute to chaeyeongyoon/ComputerVision_Study development by creating an account on GitHub.

github.com

YOLO는 이미지 내의 bounding box와 class probability를 single regression problem으로 간주하여, 이미지를 한 번 보는 것으로 object의 종류와 위치를 추측합니다.

 

가장 최신버전인 YOLO v3은 빠른 속도와 높은 성능을 보여줍니다.

yolov3 성능

 

  v1 v2 v3
원본이미지 크기 446x446 416x416 416x416
feature extractor Inception 변형 모델 darknet 19 darknet 53
grid당 anchor box 수 anchorbox기반 아님 5 output feature map당 3개
서로 다른 크기와 scale로 총 9개
anchor box 결정 방법 고정 K-means clustering
(고정되어있지 않고 GT Box를 분석)
K-means clustering
(고정되어있지 않고 GT Box를 분석)
output feature map 크기
(depth제외)
  13x13 13x13, 26x26, 52x52
3개의 feature map 사용
feature map scaling 기법     FPN
(Feature Pyramid Network)

yolo v1부터 살펴보겠습니다.

● YOLO v1

yolo v1은 PASCAL VOC dataset 기반으로 학습되었는데, 빠른 detection시간을 자랑하지만 정확도는 비교적 낮습니다.

  • 입력이미지를 SxS grid로 나누어 각 grid cell이 하나의 object대한 detection을 수행합니다. (feature map이 아닌 원본 이미지 기준임을 주의하세요)
  • 각 grid cell이 2개의 bounding box후보를 기반으로 object bounding box를 예측합니다.(anchor box기반이 아닙니다)

v1의 inference 방식은 다음과 같습니다.

GoogLeNet modication은 GoogLeNet을 수정해 classification모델로 만든 것 입니다.

최종적으로 나오는 7x7x30 shape는 7x7 = grid개수, 30=각 grid가 갖는 정보 개수 입니다.

30개의 정보는

  • 2개의 bounding box정보 (x, y, w, h, confidence score) (x, y, w, h는 GT box와 후보 box간 offset)
  • class확률 (PASCAL VOC기준이므로 20개의 class확률)
  • 5x2+20 = 30입니다.

 

 

 

다음 그림과 같이 SxSx2개의 bounding box를 예측한 후 NMS로 걸러줍니다.

one stage object detection의 특징인 일단 많은 bounding box를 예측하는 특징이 드러납니다.

 

 

 

 

※ NMS로 최종 bounding box 예측하는 과정

  1. 특정 confidence 값 이하는 모두 제거
  2. 가장 높은 confidence 갖는 순으로 bounding box 정렬
  3. 가장 높은 confidence 갖는 bounding box와의 IOU가 IOU threshold보다 큰 bounding box는 모두 제거
  4. 남은 bounding box대해 3번 반복

즉 Object confidence와 IOU threshold로 filtering을 조절합니다.

 

그러나 v1은

<단점>

  • anchor box기반이 아니고, 단순 cell기준이기 때문에 성능은 낮고 복잡합니다.
  • yolo(you only look once)라는 이름답게 한 cell에서 object 하나를 발견하면 바로 다음 cell로 넘어가버리기 때문에 속도는 빠르지만 성능은 낮습니다.
  • 작은 object대한 성능이 특히 떨어집니다.

● YOLO v2

v2의 성능은 다음 표와 같습니다.

yolo v2의 성능

v2의 특징은 다음과 같습니다.

  • Batch Normalization
  • High Resolution Classifier : Network의 classfier단을 보다 높은 resolution(448x448)로 fine tuning (매우 좋은 효과를 보였습니다)
  • 13x13 feature map기반에서 개별 grid cell 별 5개의 anchor box에서 object detection
  • Darknet-19 Classification model 사용
  • 서로 다른 크기의 image들로 network 학습 ( 작은 object 성능 저하 문제 해결을 위해 )

yolo v2 구조

yolo v2의 구조상 가장 큰 특징은 Fully Connected layer가 없다는 것입니다.

 

SSD와 유사하게 1cell에서 anchor box를 통해 여러개의 object를 detection합니다.

K-means clustering을 통해 data set의 이미지 크기와 shape ratio따른 5개의 군집화 분류로 anchor box를 계산합니다.

v2의 ouput feature map을 살펴보면

다음과 같은 shape를 갖는데, 하나의 anchor box당 25개의 정보를 갖습니다.

  • bounding box 좌표정보 4 + Objectness score 1 + classes scores(PASCAL VOC: 20) = 25
  • objectness score은 object일 확률을 뜻합니다.

 

 

 

● YOLO v3

  • Feature Pyramid Network 유사한 기법 적용해 3개의 feature map output에서 각각 3개의 서로 다른 크기와 scale 갖는 anchor box로 detection
  • classification 단을 보다 높은 classification을 갖는 darknet-53
  • Multi Labels 예측: softmax아닌 sigmoid기반의 logistic classifier로 개별 object의 multi labels예측: 즉, people-woman이런식의 multi label예측이 가능합니다.

<v3 Network 구조>

  • input size를 꼭 (416, 416) 으로 조정해주어야 합니다.
  • darknet구조는 skip connection이라는 특징을 갖습니다.
  • 13x13, 26x26, 52x52의 featuremap에 각각 anchor box를 적용해 줍니다.

 

다음 그림을 보면,

  • 큰 feature map일수록 작은object를 detection가능하다.
  • bounding box 하나당 85개의 정보를 갖는다
  • 좌표정보 4 + objectness score + class scores(coco dataset 기준이라 80개)

 

 

 

잠시 darknet에 대해 언급을 하자면 ResNet과 비슷한 구조를 갖는데, yolo의 성능을 높이기 위해 독자적 network인 darknet을 개발하기 위해 노력을 많이 했습니다.

 

<Training>

yolo v3 training에는 multi-scale training, data augmentation을 적용하였습니다.

annotation file의 GT box를 기준으로 bounding box regression학습

 

 

 

 

 

 

 

 

 

 

 

bounding box regression(Lacation Prediction)을 간단히 표현하면 다음과 같습니다.

  • (pw, ph) : anchor box size
  • (tx, ty, tw, th): 모델 예측 offset값
  • (bx, by), (bw, bh) : 예측 bounding box 중심좌표, size

 

 

 

 

 

 

 

center좌표가 cell 중심을 너무 벗어나지 못하게 sigmoid값으로 조절합니다

 

 

 

 

<multi label>

softmax를 사용하면 하나의 class만 detection할 수 있는데, 여러개의 독립적 logistic regression과 sigmoid를 사용하면 여러개의 class를 labeling할 수 있습니다.

 

 

 

<v3 성능>

왼: mAP 0.5~0.95 평균 graph / 오:mAP 0.5고정 graph

 

728x90

'Computer vision ღ'ᴗ'ღ' 카테고리의 다른 글

google Open Image dataset 사용해 YOLO training / OID_v3_toolkit 사용하기  (0) 2021.01.22
keras-yolo3 opensource package  (0) 2021.01.22
SSD Network  (0) 2021.01.08
Fast R-CNN, Faster R-CNN  (0) 2021.01.03
SPPNet  (0) 2021.01.03