갈아먹는 Object Detection [5]

https://yeomko.tistory.com/19?category=888201

Untitled

yolo는 faster R-CNN에 비해 정확도는 조금 낮으나 6배 빠른 속도를 보인다.

Unified Detection

Yolo가 기존의 Object Detection과 가장 크게 구분되는 부분은 기존에 region proposal과 classification 두 단계로 나누어서 진행하던 방식이 region proposal 단계를 제거하고 한번에 object detection을 수행하는 구조를 갖는다.

Untitled

먼저 입력 이미지를 S x S 그리드 영역으로 나눈다. 각 그리드 영역에서 먼저 물체가 있을 만한 영역에 해당하는 B개의 bounding box를 예측한다. 이는 (x,y,w,h)로 나타내어지는데 (x,y)는 bounding box의 중심점 좌표이며 w,h는 넓이와 높이다. 그 다음 해당 박스의 신뢰도를 나타내는 confidence를 계산한다. 이는 해당 그리드에 물체가 있을 확률 Pr과 예측한 박스와 Ground Truth박스와의 겹치는 영역을 비율로 나타내는 IOU를 곱해서 계산한다.

[ confidence ]

[ confidence ]

Untitled

그 후 각각의 그리드마다 C개의 클래스에 대해 해당 클래스일 확률을 계산한다. 이때 기존의 object detection에서는 항상 클래스 수 + 1(background)를 집어넣어 classification을 하는데, yolo는 그렇지 않다. yolo는 입력 이미지를 그리드로 나누고 각 그리드 별로 bounding box와 classification을 동시에 수행한다.

Network Design

네트워크의 출력은 7x7x30 feature map이다. 여기 안에는 앞서 말했던 그리드 별 bounding box와 confidence, 그리고 각 클래스 별 예측값이 담겨져 있다.

Untitled

Untitled

이는 Yolo network 그림이다. inception 블럭 대신 단순한 convolution으로 네트워크를 구성했다. 224x224 크기의 imageNet classification으로 pretrain하였다. 이후엔 입력 이미지로 448x448 크기 이미지를 입력으로 받는다. 그리고 앞쪽 20개의 convolution layer는 고정한 채 뒷단의 4개 레이어만 object detection 테스크에 맞게 학습시킨다.

Untitled

7x7은 그리드 수를 의미하고, 각각의 인덱스는 총 30차원의 벡터 값을 가진다. 위와 같이 7x7그리드 가운데 하나의 인덱스에 박스가 쳐져있다. 하나의 인덱스에서 B개의 bounding box를 추측한다고 했는데, 이 논문에서는 2개로 설정했다. 30차원 벡터 가운데 앞의 10개 수는 바로 이 두개의 박스를 의미한다. 하나의 박스는 중심점 x,y와 w,h그리고 신뢰도 지수 C, (x,y,w,h,C) 다섯개의 차원의 벡터로 나타낼 수 있으며 두 개 박스는 10차원 벡터에 해당한다.