You Only Look Once: Unified, Real-Time Object Detection

2021. 2. 26. 18:13논문 정리

1. Introduction

R-CNN계열은 bound box를 다시 다듬고 중복된 검출을 지워야하고 물체에 다른 물체가 존재한다면 그 물체에 대하여 다시 같은 행위를 반복해야 했다. 물체들이 각각 따로따로 검출이 되기 때문에 느리고 optimize하기 힘들었다. 

하지만 YOLO는 bounding box coordinate부터 물체 구별까지 한번에 되기때문에 You only look once라는 말이 붙게 되었다.

즉 위의 그림처럼 하나의 convolution network로 여러개의 bounding box를 찾고 classification까지 동시에 진행하는 것이다. 

YOLO의 장점은 아래와 같다. 

1) 우선 YOLO는 빠르다. 초당 45 frame까지 검출이 가능하였고 좀더 빠른 버젼에서는 150 frame까지 커버가 가능하였다. 이것은 즉 streaming 비디오에서 real-time으로 검출이 가능하다는 것이다. 게다가 mAP역시 다른 기존의 real-time 시스템보다 두배이상 높았다. 

2) YOLO는 prediction과정에서 전체적인 이미지를 이용한다. Fast R-CNN같은 경우는 top detection방식인데 이는 이미지에서 물체를 먼저 추정하고 그 추정한 것이 어떤 물체인지 확인하는 방법이다. 먼저 박스를 만들고 그곳을 바라보기때문에 넓은 context를 볼 수 없고 이로인해 background라고 잘못 인식하는 경우가 있다. YOLO는 전체적인 이미지를 한번에 보기때문에 Fast R-CNN보다 background error를 절반이상 줄일 수 있다.

3) YOLO는 새로운 도메인에 적용되거나 다른 input이 들어와도 잘 작동된다. 

 

2. Unified Detection

2-1) Output 구성

YOLO의 네트워크는 아래와 같이 구성되어있다. 

1) 각각의 그리드 셀은 B개의 bounding box와 confidence score를 계산한다. 여기서 confidence score는 box가 얼마나 정확히 물체를 포함하고 얼마나 정확히 box를 예측했는지에대한 정보를 담는다. 여기서는 confidence를 Pr(Object)*IOU_truthpred로 사용한다. Pr(object)는 물체가 있을 확률, IoU는 ground truth box와 일치하는 정도를 의미한다. 

2) 각각의 bounding box는 5개의 예측 정보를 담고있다. (x,y,w,h) + confidence이다. 

3) 각각의 grid cell은 또한 C개의 라벨에 대한 classification 정보를 담는다. 이것을 Pr(Class_i|Object)로 나타낼 수 있다. 

즉 어떤 이미지를 예측하였을때 S*S*(B*5+C)가 최종 결과로 나오는 것이다. 

 

4) test time에서는 class-specific confidence score를 이용하는데 그 식은 아래와 같다.

 

2-2) Network Design

처음의 convolution layer는 feature extraction으로 사용되고 마지막의 fully connected layer는 probabiliy와 coordinate를 얻는데 사용된다. conv layer는 GoogleLeNet에서 영감을 받았는데 여기서 인셉션 모델을 사용하는대신 단순한 convolution block을 이요하여 구성하였고 그 뒤로 conv layer와 fc layer를 합쳐서 최종적으로 7*7*30의 텐서가 나오게 된다. 여기서 30의 의미는 위에서 S*S*(B*5+C)가 output으로 나온다고 하였는데 S=7, B=2, C=20으로 잡은 것이다. 

 

2-3) Training

우선 convlayer를 ImageNet 1000-class competition dataset으로 pretrain을 하였다.

 

그다음 논문의 결과에 따면 pretrained network에 convolutional과 connected layer를 모두 더해주는 것이 좋다하여 4개의 conv layer와 2개의 fc layer를 그 뒤에 넣었다. 이때 fine grained visual information이 필요할때도 있기에 resolution을 224*224에서 448*448로 넓혀주는 작업을 한다. 

여기서 fine grained의 의미는 "aims to distinguish subordinate categories within entry level categories" 라고 할 수 있다. 즉 같은 새를 판별해도 좀더 자세하게 이 새는 비둘기고 이새는 앵무새고 이런식으로 구별을 하는 것이다. 

 

마지막 layer는 class probability와 bounding box coordinate를 예측한다. Faster R-CNN과 마찬가지로 bounding box의 x,y,h,w를 offset으로 표현하는데 이때 FRCN과 다르게 w,h는 이미지의 w와 h로 normalize하여서 0~1사이의 값이 나오도록한다. 또한 linear activation은 leaky ReLU를 사용한다. 

 

loss function은 아래와 같이 구성된다.

(1) sum-squared error를 사용한다. 

(2) object가 없는 박스가 압도적으로 많고 이것이 confidence score를 0으로 이끌어서 전체적으로 훈련이 잘 안되게 만든다. 따라서 이를 방지하기 위해 ƛ_coord = 5, ƛ_noobj = 0.5를 사용하여 non object의 비율을 낮추어준다.

(3) SSE는 large box와 small box의 비중을 똑같이 둔다. 하지만 실제로는 큰 박스가 작 박스보다 GT와 비교했을때 IOU에 주는 영향이 작을 것임을 반영해야 한다. 따라서 w,h에 루트를 씌워서 이를 해결한다.

 

이 loss 식에는 3가지의 object를 뜻하는 문자가 있다. 

이것은 i번째 cell에 j번째 bounding box에 object가 있다는 뜻이다. 

이것은 i번째 cell에 object가 있다는 것이다.

위에 두개의 표현은 YOLO에서 resposible이라는 표현을 사용하였는데 한 셀안의 여러개의 box predictor중에 그 중심이 GT안에 속하면서 가장 큰 IOU를 가지고 있는 것이다. 

 

이를 통해 (4)~(6)을 분석해보면

(4) resposible한 box에 대하여 ,x,y,w,h에 대한 loss값을 계산한다.

(5) responsible한 box에 대하여 confidence score를 계산한다.

(6) object가 존재하는 grid cell i에 대하여 class probability를 계산한다.

 

2-4) Limitations of YOLO

1) 각각의 grid cell이 하나의 클래스만을 예측할 수 있기에 새 무리 같이 여러 물체들이 붙어있는 경우 제대로 예측을 할 수 없다.

2) training data를 통해 bounding box를 예측함으로 새로운 형태의 bouding box의 경우 제대로 예측을 할 수 없다. 또한 input image를 downsampling을 거쳐서 나온 feature에 대해서 학습을 진행함으로 coarse한 feature를 사용할 수 밖에 없다.

3) loss function이 small bounding box와 large bounding box에 대하여 동일하게 취급된다. 하지만 small box가 IOU에 미치는 영향이 더 크다. 따라서 이 부분에서 부정확한 localization이 발생한다. (루트로 어느정도 방지하기는 한다.)

 

3. Experiments

1) Comparison to Other Real-Time Systems

 

Real Time에서 사용할 수 있는 것은 Fast YOLO와 YOLO가 가장 좋고 YOLO에 feature extraction을 VGG로 하면 느려서 Real Time 으로 사용하기 힘듦을 알 수 있다. 

 

2) VOC 2007 Error Analysis

Fast R-CNN과 YOLO의 비교에서 저자는 아래의 기준을 두었다. 

1) Correct : correct class, IOU>0.5

2) Localization : corect class, 0.1<IOU<0.5

3) Similar : class is similar, IOU>0.1

4) Other : class is wrong, IOU>0.1

5) Background : IOU < 0.1 for any object

 

위의 그래프에서 Fast R-CNN(FRCN)이 correct의 비율은 더 높았고 YOLO는 localization을 FRCN보다 잘 못함을 알 수 있었다. 하지만 YOLO가 FRCN보다 background error가 더 적음을 알 수 있다. 

 

3) Combining Fast R-CNN and YOLO

FRCN에 비해 YOLO가 background error가 적음을 알 수 있었다. 그래서 이번에는 FRCN과 YOLO를 결합을 해보았다. R-CNN이 찾은 bounding box와 YOLO가 찾은 box가 같은지를 확인하고 그렇다면 그 박스에 두개의 찾은 박스의 겹친 정도에 따라 비중을 두어서 훈련을 시켰다. 그 결과 더 좋은 결과를 얻을 수 있었다. 

하지만 이 방법은 각각의 모델을 따로 돌린 뒤 마지막에 합치는 방식이기에 속도의 측면에서는 전혀 이득은 없었다.