[논문리뷰] You Only Look Once: Unified, Real-Time Object Detection

Dokyeong Kwon·2021년 3월 10일
0

Paper Review

목록 보기
6/6
post-thumbnail


(Abstract) YOLOv1 : 이전의 논문들과는 달리 object detection frame을 bounding box와 class probability 에 대한 Single Regression Problem으로 봄으로써 하나의 neural network가 bounding box와 class probabilities를 예측할 수 있게 한 논문.
YOLO는 위의 그림과 같이 하나의 single convolutional network가 multiple bounding boxes와 boxes의 class probabilities를 동시에 예측할 수 있다. YOLO는 전체 이미지를 직접적으로 학습하고 detection 성능을 최적화한다. 이렇게 unified된 모델인 YOLO가 갖는 장점은 다음과 같다.

1) Extremely Fast : Object Detection을 Single Regression Problem으로 보기 때문에 기존 Object Detection 방법들과는 달리 복잡한 파이프라인이 필요 없다.

2) Global Reasoning : Sliding window or Region proposal 방식과 달리 training과 test단계에서 이미지 전체를 본다. (background error를 줄여줌)

3) Generalizable Representation : Object의 일반적인 부분(표현)을 학습하고, 보편성(Generalization)이 높아 새로운 domain이나 예상치 못한 input에도 망가지는 경우가 적다. (natural 이미지를 training하여 art-work에 적용했을 때, DPM이나 R-CNN보다 뛰어나다.)

  • (단점) YOLO는 state-of-the-art system에 비해 정확도는 떨어진다. (물체가 작을수록 정확도가 감소.)

Unified Detection

YOLO는 object detection의 독립된 요소들을 single neural network로 합쳤다. YOLO는 bounding box를 예측하기 위해 전체 이미지의 feature를 네트워크에 이용하며, 이미지에 대한 모든 class들의 bounding boxes를 동시에 예측하며, end-to-end training이 가능하고, 높은 average precision을 유지하며 real-time이 가능하다.
YOLO system은 input image를 S x S grid로 나눈다. 만약 어떤 object의 중심이 특정 grid cell안에 있다면, 해당 grid cell이 해당 object를 검출해야한다.

각 grid cell은 B개의 bounding boxes와 해당 bounding boxes에 대한 confidence scores를 예측한다. confidence scores : 모델이 box가 object를 포함하고 있다는 예측에 대한 confident와 box에 대한 예측이 얼마나 정확한지를 반영하는 scores. (위의 수식 참조)

Pr(Object) : Grid cell에 Object가 존재할 확률. (Object가 없다면 값은 0이 됨.)

IoU : 실제 ground truth bounding box와 예측한 bounding box 영역의 교집합을 합집합으로 나눈 것. (→ 겹쳐진 넓이 / 전체 넓이)

각 bounding box는 5개 (x, y, w, h, confidence) 의 predictions로 구성이 되어있다. (x, y) 좌표는 grid cell의 bounds에 대한 상대적인 box의 중심 좌표를 의미한다. (ex, bounding box의 중심인 (x,y)가 grid cell의 정 중앙에 위치한다면 (0.5, 0.5)가 됨.) w와 h는 전체 이미지에 비례하고, confidence는 예측한 box와 정답 box 사이의 IoU이다.

각각의 grid cell은 conditional class probabilities인 C를 예측한다. C는 gird cell 안에 object가 있다는 조건 하에 그 object가 어떤 class인지에 대한 조건부 확률이다. YOLO는 grid cell에 몇 개의 bounding box가 있는지와는 상관 없이 하나의 grid cell에는 하나의 class에 대한 확률 값만 구한다. (bbox는 많아도 class는 한번) 테스트 과정에서는 conditional class probabilities와 individual box confidence predictions을 곱한다.

conditional class probabilities : bounding box에 특정 class의 object가 나타날 확률.

individual box confidence predictions : 예측된 bounding box가 class object에 얼마나 잘 들어맞을지.

YOLO는 PASCAL VOC를 이용해 evaluating을 하였고, grid size인 S = 7, bounding boxes인 B = 2 로 설정하였다. PASCAL VOC는 class가 20개이므로 C = 2 이다. 따라서, 최종 prediction tensor의 shape은 7 X 7 X 30 (S X S X C) 이다.

Network Design
YOLO는 CNN을 이용하여 model을 구현하였고, PASCAL VOC Dataset을 이용하였다. YOLO model은 image의 features를 추출하기 위한 convolutional layer(24개) 와 class 확률과 bbox의 좌표를 예측하기 위한 fully connected layers(2개) 로 구성이 되어있다. 추가적으로, YOLO의 fast version인 Fast YOLO network도 있다. 이 network는 기본 YOLO보다 더 적은 (24 → 9) layers를 가지고 있고, training과 testing parameters는 YOLO network와 동일하다.

📙 Training
YOLO는 1000개의 class가 있는 ImageNet competition dataset을 이용하여 pre-train을 진행하였다. Pre-training에서는 앞단의 20개의 convolutional layers와 average-pooling layer, fully connected layer를 사용하였다.

ImageNet은 classification을 위한 데이터셋이므로 pre-train된 classification 모델을 object detection 모델로 바꾸어야한다. YOLO는 성능 향상을 위해 미리 학습 된 network에 convolutional layer와 connected layer를 붙였다. 또한 신경망 입력 해상도를 224 X 224에서 448 X 448로 높혔다.

YOLO의 마지막 layer는 class probabilities와 bounding box coordinates를 예측한다. YOLO는 bounding box의 너비와 높이를 이미지의 너비와 높이로 정규화하여 0 ~ 1 사이의 값을 갖도록 하였고, x, y coordinates를 특정 grid cell 위치의 offsets으로 설정하였다.
YOLO는 final layer에서는 linear activation function을 사용하였고, 그 외에는 위의 수식과 같은 leaky rectified linear activation(Leaky ReLU)을 사용했다.

linear activation function : y=x인 activation function.

leaky rectified linear activation : 입력 값이 음수일 때 완만한 선형 함수를 그림.

YOLO는 sum-squared error (SSE)가 최적화가 쉽기 때문에 model optimize에 사용하였지만, 목표한 average precision 최대값에는 도달할 수 없었다.

sum-squared error : 정답과 output 차이의 제곱들의 합.

👇 최대값에 도달할 수 없는 원인

  • localization error와 classification error를 동등하게 두었지만, 적합하지 않을 수 있다.
  • 많은 grid cell들이 모든 object를 포함하지는 않는다.

→ 이런 것들이 confidence score를 0으로 가게 하여 가끔 object가 있는 grid cell의 gradient를 overpowering함.

이런 문제를 해결하기 위해 YOLO는 object가 없는 box들에 대해 bounding box coordinate predictions loss를 증가시키고, confidence predictions loss를 감소시켰다. 이를 위해 λ_coord(5) 와 λ_noobj(0.5) 두개의 parameter를 사용하였다.

Sum-squared error (SSE) 는 큰 box들과 작은 box들에 대해 동일한 가중치를 두는 문제가 있다. (→ 작은 bounding box가 큰 bounding box보다 위치 변화에 민감하다) YOLO의 error metric은 큰 box들의 작은 편차가 작은 box들에 영향을 미치지 않기 위해 bounding box의 width와 height에 square root를 취해 해결하려고 하였다.

YOLO는 grid cell마다 여러 개의 bounding box를 예측하지만, training에서는 하나의 object당 한개의 bounding box 예측(→ responsible) 이 필요하기 때문에, 여러 bounding box들 중 ground-truth bounding box와 IoU가 가장 큰 것을 선택한다. YOLO는 training에서 위와 같은 multi-part loss function을 사용하여 최적화 한다.

l_obj_i: i번째 cell에 object가 있는가.

l_obj_ij : i번째 cell의 j번째 bounding box predictor가 예측한 것이 responsible한가.

→ 0 또는 1의 값을 가짐. (각 항을 계산 할지 안할지를 결정) : object가 존재하는 grid cell i의 bounding box predictor j에 대한 x, y 좌표에 대한 loss : object가 존재하는 grid cell i의 bounding box predictor j에 대한 w와 h의 loss : object가 존재하는 grid cell i의 bounding box predictor j에 대한 confidence score의 loss : object가 존재하지 않는 grid cell i의 bounding box predictor j에 대한 confidence score loss : object가 존재하는 grid cell i의 conditional class probability loss (맞으면 1, 틀리면 0)

  • dataset : PASCAL VOC 2007과 2012의 training, validation dataset을 134 epoch로 학습을 시켰고, 2012 데이터셋으로 test를 할 때 2007 데이터도 포함하였다.
  • batch size : 64
  • momentum : 0.9
  • decay : 0.0005
  • learning rate schedule : 첫 epoch에서는 learning rate를 0.0001에서 0.01로 천천히 증가시켰다.(처음부터 높은 learning rate로 시작하면 unstable gradient에 의해 diverge하기 때문) 이후 75 epoch는 0.01로, 30 epoch는 0.001로, 마지막 30 epoch 동안에는 0.0001로 learning rate를 설정하였다.
  • avoid overfitting : dropout(0.5) 과 data augmentation(random scaling, random translation)을 사용하였다.

dropout : 네트워크의 일부 parameter를 생략하고 학습을 진행하는 것.

📌 Inference

Training과 같이, Testing image에서 object detection도 1번의 network evaulation이면 가능하다. PASCAL VOC에서, network는 이미지당 98개의 bounding box들을 예측하고, 각 박스마다 class probability를 계산한다.

object가 어느 grid cell 안에 있는지 명확하고, 물체 하나에 대해 box가 하나만 prediction 되는 경우도 있지만, 큰 object나 여러 cell의 경계에 걸쳐 있는 object는 여러 cell들에 의해 위치가 정해진다. 이런 object를 detection하기 위해서 non-maximal suppression (NMS)가 사용되었다.

non-maximal suppression : 동일한 object에 여러 bounding box가 존재할 때, 가장 score(IoU)가 높은 bounding box만 남기고 나머지를 제거하는 것.

🙄 Limitations of YOLO

1) YOLO에서 각 Grid cell은 2개의 box들만 예측하고, 하나의 class만 가질 수 있기 때문에 강한 spatial constraints가 있다. Spatial constraints는 YOLO model이 예측 가능한 근처의 objects의 갯수를 제한한다. → 새 떼처럼 작은 물체들이 그룹지어 나타나면 어려워진다.

2) YOLO는 데이터로부터 bounding box를 예측하는 법을 배우기 때문에, 새롭거나 특수한 aspect rations나 configurations object의 일반화가 어렵다.

3) 학습하는 동안 YOLO의 loss function은 작은 bounding box와 큰 bounding box의 error를 동일하게 다룬다. 큰 bounding box의 에러는 무시해도 상관이 없지만, 작은 bounding box의 에러는 IoU에 큰 영향(bbox의 위치)을 준다.

Experiments

Comparison to Other Real-Time Systems
YOLO는 기존 모델에 비해 속도는 빠르고, 정확도는 sota는 아니지만 높다.

VOC 2007 Error Analysis
- Correct : class가 정확하며 IoU > 0.5

  • Localization : class가 정확하며 0.1 < IoU < 0.5
  • Similar : class는 유사하고 IoU > 0.1
  • Other : class는 틀렸으나 IoU > 0.1
  • Background : 어떤 object라도 IoU < 0.1

Fast R-CNN은 YOLO에 비해 background error가 3배나 더 크다.

PASCAL VOC 2012 리더보드

참고

https://bkshin.tistory.com/entry/논문-리뷰-YOLOYou-Only-Look-Once

profile
Go with the flow

0개의 댓글