iMTE

You Only Look Once : Unified Real-Time Object Detection 본문

Deep learning/Keras

You Only Look Once : Unified Real-Time Object Detection

Wonju Seo 2018. 7. 27. 15:40

You Only Look Once : Unified Real-Time Object Detection (2016)

Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

(학교에서 찍은 영상에 YOLO를 적용한 case. 나무는 class가 없어서 detect을 하지 못하고 대신에 자동차는 잘 detect한다)

Object를 단순히 classification하는 문제는, ImageNet, CIFAR 등 dataset으로 학습된 모델 (AlexNet, ResNet, GoogLeNet, VGG 등)이 잘 풀어낼 수 있다. 하나의 이미지에서 이미지 안의 물체를 분류하는 것은 이제는 매우 쉬운 것이 되어버렸다. 만약, 이미지안에 다양한 물체가 있는 경우에는 이 모델이 제대로 동작을 할까? 그렇지 않을 것이다. 여러 물체가 있다는 것은 그 만큼 그 물체의 feature를 추출하고 가장 강력한 물체의 성분만 classification을 할 것이다. 따라서, object classification이 아닌 detection (what is it? + where is it)문제를 해결하는 것이 computer vision 쪽에서는 어려운 task로 받아들여졌다.

R-CNN, Fast R-CNN의 논문은 object detection을 하기 위해 모델을 개발을 했고, 꽤 정확하게 object를 찾아내는 방법을 찾아냈다. 하지만, 이 모델들은 문제가 있었는데, region proposal (물체가 있을 만한 영역)을 만들어야 했고, 복잡한 pipeline으로 구성되어 있는 문제가 있었을 뿐만 아니라, 이 복잡한 pipeline의 각 성분을 따로 학습을 시켜야만했다. 그리고 속도가 너무 느렸다.

YOLO는 You only look once의 줄임말로, 이미지를 한번에 single neural network에 통과시켜 bounding box의 위치와 크기 + confidence score를 예측하고, class도 예측하는 방법이다.

YOLO는 기존 방법에 비해서

1. single neural network로 속도가 매우빠르고,

2. image 전체를 사용해서 class에 대한 이해도가 높아 낮은 background error를 보이며,

3. object에 대한 general한 특징들을 학습한다.


단점으로는 

1. Grid cell마다 1개의 class만 결정되므로, Grid cell에 여러 작은 물체가 있는 경우 낮은 정확도를 보여준다.

YOLO의 과정

1. input image를 S x S grid로 나눈다. 논문에서 S=7로 사용되었다.

2. 각 grid cell은 B개 (논문은 2개로) bounding box와 각 bounding box에 대한 confidence score를 갖는다. confidence score는 얼마나 이 bounding box가 실제 bounding box와 겹치는지를 나타내고, 다음과 같이 계산된다.

3. 각 grid cell은 C개 (논문은 20개) conditional class probability를 갖는다.

4. 각 bounding box는 x,y,w,h,confidence 로 구성되는데,

x,y : bounding box의 중심점, grid cell 안에서 정의되는데 0~1로 정규화된다.

w,h : 전체 이미지의 width, height의 비율로 정의되는데 bounding box의 크기를 나타냄. 이것도 0~1로 정규화된다.

confidence score는 위와 같이 계산된다.

5. Inference 과정에서는 conditional class probability와 bounding box의 confidence score가 곱해져서 class specific confidence score를 얻게 된다.

Output은 7x7x30의 tensor인데, 7x7은 grid의 총갯수를 나타내고 30은 output size (Bounding box의 5개 요소 x,y,w,h,confidence score의 두배와 20개의 class에 해당하는 probability)를 포함한다.

따라서, 각 grid마다 적절한 bounding box의 candidate와 class의 probability가 labeling이 되어 Neural network가 이를 학습할 수 있게 되는 것이다. 그리고 Inference 과정에서, 다양한 bounding box가 생성될 수 있는데 이 bounding box 중 가장 괜찮은 것을 추출하기 위해, Nom-Maximum suppression 방법이 사용된다. -> 이 방법을 사용하면 confidence score가 큰 2개의 bounding box가 선택된다.

YOLO의 loss는 복잡한 형태를 띄고 있다.

1. grid i의 bounding box j의 x,y,w,h을 일치해주기 위해서 sum-squared이 사용되었다. w,h는 값은 다음과 같은 이유로 root를 취한 값을 사용한다.

"Sum-squared error also equally weights errors in large boxes and small boxes. Our error metric should reflect that small deviations in large boxes matter less than in small boxes. To partially address this we predict the square root of the bounding box width and height instead of the width and height directly"

2. object가 존재하는 grid i 에서 bounding box j의 confidence score loss를 계산하고, object가 존재하지 않는 경우에서도 confidence score loss를 계산한다. (이미지에는 object가 없는 부분이 상당히 많기 때문에, 균형을 위해서 앞에 balancing parameter가 곱해져있다.) 

3. object가 존재하는 gird i에서 conditional class probability loss를 계산한다.

위 세가지 요소가 저 복잡한 loss function에 포함되어 있다. Regression 문제와 Classification 문제를 표현한 것이다. 여기서 classification을 우리가 기존에 알고 있는 cross-entropy를 사용하지 않고, sum-squared error를 사용했음을 확인해야한다.

위의 글은 논문에서 설명하는 YOLO의 한계이다. 천천히 읽어보도록 하자!

YOLO를 keras로 구현을 해본 결과이다. https://github.com/experiencor/keras-yolo2

(학습이 정말 오래걸려서, pre-trained된 weights을 받아서 load하는 형태로 쓰시는게 좋습니다.)

(코끼리가 어디있고 크기가 어느정도 되는지를 정확하게 예측하고 있다.)

다양한 물체가 한 이미지에 있는 경우 YOLO는 잘 분석할 수 있을까?

여러 고양이들이 있을 때, bounding box의 위치를 잘 잡는 것을 확인할 수 있지만, cat대신에 dog로 classification된 것들이 좀 있다.

내가 찍은 사진들을 사용해서 YOLO를 검증해봤다.


사물의 위치를 잘 찾아내고, class를 잘 분류했음을 알 수 있다.


'Deep learning > Keras' 카테고리의 다른 글

Show and Tell: A Neural Image Caption Generator  (2) 2018.07.26
Variational Auto-Encoder (VAE)  (0) 2018.07.11
Generative Adversarial Networks  (0) 2018.06.10
Comments