Curaai00's Deep Learning Blog

YOLO v1: You Only Look Once

딥러닝/Object Detection
YOLOv1

YOLO v1: You Only Look Once

yolo는 한때 ssd, faster r cnn과 함께 object detection에 대표적으로 사용되던 모델이다. object detection이란 이미지에서 물체(object)를 인식하여 해당 물체를 찾아 사각형으로 크기, 위치를 표현하는 것이다(detection). 이는 여러 분야에 사용할 수 있다. 예를들어

  • 카메라 앱에서 사람의 손과 얼굴을 인식
  • 자율주행 자동차에서 도로의 자동차와 자전거, 사람, 신호등 등을 인식
  • 방범 cctv에서 사람을 인식

등등 다양한 분야에 사용된다.

Unified Detection

기존의 object detection 네트워크들은 하나의 모델이 아니라 여러 부분들이 합쳐져서 전체 시스템을 만들었었다. roi(region of interest, 물체라고 인식한 영역/box)를 추출하는 부분 따로, feature를 추출하여 detection하고 분류하는 부분이 따로 되어있는 경우도 있다.

yolo는 네트워크를 통과한 feature를 S * S 개의 사각형(grid)으로 분할한다. 이 사각형은 grid cell이라고 부르는데, 이 grid는 물체를 찾고, 인식(분류)하는 역할을 가지고 있다.


  • 각 grid cell은 B개의 bounding box와 box안의 object를 예측한다.
  • 각 bounding box는 (x, y, w, h, confidence)로 구성되어 있다. x, y는 box의 중심좌표를 나타내고 w, h는 전체 이미지에 비한 너비와 높이를 나타낸다. 이 confidence score는 해당 box에 object가 있는지를 나타낸다. 이는 Pr(object) * IOU로 정의할 수 있는데, Pr(object)는 물체가 있을 확률, IOU(Intersection over union)는 예측한 box와 실제 object가 있는 box가 얼마나 같은지를 나타낸다.
  • 또한 각 grid cell은 C개의 conditional class probabilities, Pr(class_i | object)를 이용하여 object중에서도 어떤 class의 object가 존재하는지 예측한다.
  • YOLO를 Pascal VOC로 검증할때에는 S =7, B=2, C = 20으로 7 * 7 * 30 개의 tensor를 예측했다.


위 그림과 같이 (S(7), S(7), 5 * B(2) + C(20))의 shape를 가진다.

Network Design

network 구조는 GoogLeNet에서 영감을 받아 24 conv layer, 2 fully connected layer를 사용했다. Inception module을 사용하는 것 대신에 3 x 3 conv 뒤에 따라오는 1 x 1 reduction conv layer를 추가했다.


Training

fully connected layer전의 conv layer 20개를 미리 ImageNet 1000-class dataset으로 pretrain 시켰다. final layer는 class probabilities 와 bounding box coordinates 둘다를 예측한다. bounding box의 너비와 높이를 0 ~ 1 사이로 normalize 한다. x,y좌표 grid cell 안에서 0~1사이의 값을 가져 파라미터화? 했다.

bounding box coordinates 예측이 box가 object를 포함하지 않는 것을 막기위해 λcoord , λnoobj를 파라미터화 시켜 안정성을 더욱더 강화시켰다. 일반적으로 예측하는 box에는 object가 없는 경우가 많아 네트워크가 obj가 없는 background class를 찾는 것이 object를 찾는 것보다 더 효율적이라고 판단했기 때문이다.

yolo는 여러개의 box를 예측하기 때문에 한 object에 여러 box가 반응하는 경우가 있다. 이때는 box중 가장 높은 IOU를 가진 box를 사용한다.

Loss Function

1^obj_ij 는 obj가 존재하는 i번째 grid cell에 j번째 bounding box를 나타내고, noobj는 obj가 존재하지 않는 경우를 말한다.

위에서 부터 차례로 식 1, 2, 3, 4, 5 이라고 할때

  • 1과 2는 각 box에 대한 loss이다. 하지만 2에서는 w와 h에 square root를 사용했다. 그 이유는 sum-squared errorsms box의 크기에 상관 없이 동일한 weight를 가진다. 작은 box보다 큰 box에서 적은 편차를 가지는데 loss가 이를 반영하여 w와 h를 직접적으로 사용하는 것보다 squared root가 더 좋은 결과를 낸다.
  • 3에서는 confidence score에 대한 loss이다.
  • 4에서는 object가 없는 box에 대하여 loss를 구하였다. 추가적으로 no obj 파라미터를 사용하였다.
  • 5에서는 cell에서의 class를 predict한 loss를 구하였다.