본문 바로가기
딥러닝(Deep Learning)/논문 paper 리뷰

[X:AI] YOLO 논문 이해하기

by rahites 2022. 7. 19.

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

 

0. Abstract

- Object Detection의 새로운 접근 방식인 YOLO를 제안

- 기존 Object Detection에 사용하던 classifier 방식을 공간적으로 분리된 bounding box와 관련된 클래스 확률에 대한 regression 문제로 재정의

- 전체 detection pipeline이 단일 네트워크인 end-to-end 방식

- YOLO 모델의 속도가 매우 빠름

 

1.  Introduction

- 사람은 이미지를 잠깐 보더라도 이미지 안에 어떤 물체가 있고, 어디에 있는지, 어떻게 상호작용하고 있는지를 파악할 수 있다. 이렇게 빠르고 정확한 사람의 시각시스템은 운전과 같은 복잡한 작업을 수행할 수 있게 돕는다. 이를 컴퓨터에도 적용시켜 본다면 빠르고 정확한 Object Detection이 가능하다면 특수 센서나 보조 장치 없이 자동차를 운전할 수 있을것이다.

- 본 논문이 나온 시기의 Object Detection은 classifier를 목적에 맞게 바꾸어가며 detection을 수행하였다. 이 방식은 객체를 감지하기 위해 해당 객체에 대한 classifier를 사용하는데 분류를 진행한 후 객체를 탐지하는 복잡한 파이프라인을 거치기 때문에(각 구성요소를 별도로 학습시켜야하기 때문) 속도가 느리고 최적화에 어려움이 많다. (DPM과 R-CNN의 예시)

 

* DPM : 이미지 전체에 슬라이딩 윈도 방식을 적용해 객체를 검출하는 방식

* R-CNN : region proposal 방식을 이용해 bounding box를 선별하고, classification을 통해 객체를 검출하는 방식

 

- 따라서 YOLO는 bounding box 선별과 class probability 계산을 한번에 할 수 있도록 회귀 문제 시스템으로 구성하였다. 

- 단일 convolution network에서 여러 개의 bounding box와 이 상자들에 대한 class probability를 동시에 예측한다.

- YOLO는 초당 45 frame으로 실행될만큼 빠르며(빠른 버전은 150 fps) 예측을 진행할 때 전체 이미지를 보기 때문에 백그라운드 오류 수가 매우 적다. 


* 백그라운드 오류 (backgroud error) : 아무 물체가 없는 배경에 반점이나 노이즈가 있을 때 이를 물체로 인식하는 오류

 

- YOLO는 사물의 일반적인 모습을 학습한다.  일반화가 용이하기 때문에 새로운 도메인에 적용할 경우 고장이 발생할 가능성이 적다.

- YOLO 모델은 작은 객체의 위치를 정확하게 파악하지 못해 SOTA 모델보다 정확도가 떨어진다는 단점을 지닌다.

 

2. Unified Detection

- 입력 이미지를 S x S 그리드로 나눈다. 이 때 어떤 객체의 중심이 그리드 셀에 속한다면, 그리드 셀은 해당 객체를 검출해야 한다. 각각의 그리드 셀은 B개의 bounding box와 해당 bounding box들에 대한 confidence score를 예측하는데, 여기서 confidence score는 bounding box에 객체가 포함되어 있다는 모형의 신뢰도와 정확성을 나타낸다. 이 때 그리드 셀에 객체가 존재하지 않는다면 confidence score는 0이다. 

$$ Pr(Object) * IOU^{truth}_{pred} $$

* IOU(intersection over union) :  실제 bounding box와 예측 bounding box의 교집합 /  실제 bounding box와 예측 bounding box의 합집합

 

- 각각의 bounding box는 x, y, w, h, confidence 5가지 예측치로 구성된다.

x, y : bounding box의 중심이 그리드 셀에서 갖는 상대 위치 ( 0 ~ 1 ) ( 만약 정확히 중앙일 시 (0.5, 0.5) )

w, h : bounding box의 상대 너비와 상대 높이 (이미지 전체의 너비와 높이를 1로 둠)

confidence : confidence score

 

- 또한 각 그리드 셀은 C( conditional class probability )를 예측한다. C는 그리드 셀에 객체가 있다는 조건 하에 해당 객체가 어떤 class인지에 대한 조건부 확률을 의미하며, 그리드 셀 안에 몇개의 box가 있던 그리드 셀 당 1개의 클래스 확률을 예측한다.

$$ Pr(Class_i|Object) $$

 

- 테스트 단계에서는 conditional class probability와 개별 bounding box의 confidence score를 곱해 각 상자에 대한 class별 신뢰 점수(class-specific confidence score)를 제공한다. 이는 bounding box에 특정 class 객체가 나타날 확률과 예측된 bounding box가 해당 class 객체에 얼마나 잘 맞는지를 나타낸다. 

$$ Pr(Class_i|Object) * Pr(Object) * IOU^{truth}_{pred} = Pr(Class_i) * IOU^{truth}_{pred} $$

- 본 논문에서는 YOLO 평가를 위해 S = 7, B = 2 크기( 이미지를 7x7 그리드 셀로 나누고, 하나의 그리드 셀에서 2개의 bounding box를 예측)로 사용했고 PASCAL VOC 데이터를 이용하였다. PASCAL VOC 데이터에는 라벨 클래스가 20개 있으므로 C = 20으로, 최종적으로 7 x 7 x 30 크기의 tensor를 예측한다. 

 

2.1. Network Design

- GoogleLeNet 모델에서 영감을 받았고, 24개의 Convolution layer, 2개의 fully connected layer가 존재한다. GoogleLeNet에서 사용되는 Inception 구조 대신 1 x 1 reduction layer과 3 x 3 convolution layer를 결합하여 사용하였다. 

- 빠른 버전의 Fast YOLO는 24개 대신 9개의 Convolution layer와 더 적은 수의 필터를 사용하였다. 네트워크의 크기 외에 train, test 과정에서 사용되는 parameter는 YOLO와 동일하다. 

 

2.2. Training

- 1000개의 클래스를 가지는 ImageNet 데이터로 convolution layer를 사전 훈련하였다. 사전 훈련에서는 24개 중 처음 20개의 convolution layer 만을 사용했고,  average-pooling layer와 fully connected layer를 사용했다. 이는 ImageNet 2012 데이터에서 88%의 정확도를 보였고, 모든 학습과 추론 과정에서 Darknet framework를 사용하였다. 

- ImageNet 데이터는 classification을 위한 데이터이므로 사전 훈련된 20개 convolution layer 뒤에 4개의 convolution layer과 2개의 fully connected layer를 추가하여 성능을 향상시켰고 이 때 layer의 weight는 임의로 초기화하였다. 또한, 객체 검출을 하기 위해 해상도를 224 x 224 에서 448 x 448로 높였다. 

- 마지막 layer는 class probability와 bounding box 좌표를 모두 예측하는데, 이 때 bounding box의 좌표에 존재하는 x, y, w, h 값을 모두 0 ~ 1 사이의 값으로 정규화하였다.  또한 마지막 layer에는 선형 활성화 함수를 사용했고 다른 모든 layer에는 아래 식과 같은 leaky ReLU를 사용하였다. 

- Loss  값으로는 최적화하기 쉬운 SSE(sum squared error)를 사용했지만, 이를 최적화하는 것이 mAP(mean Average Precision)를 높이는 것은 아니다. 따라서 YOLO의 loss에는 bounding box의 위치를 잘 예측했는지 나타내는 localization loss와 클래스를 잘 예측했는지 나타내는 classification loss가 존재한다. 

- 모든 이미지에서 대부분의 그리드 셀은 객체를 포함하지 않는데, 이러면 대부분의 셀의 confidence score가 0이기 때문에 confidence score가 0이 되도록 학습이 진행되어 모델이 불균형해진다는 문제점이 있다. 이를 해결하기 위해 object가 존재하는 bounding box의 loss 가중치는 증가시키고, object가 존재하지 않는 bounding box의 loss 가중치는 감소시켰다. 이를 위해 $\lambda coord$와 $\lambda noobj$ 2가지 parameter를 주었고 각각 5, 0.5의 값으로 설정하였다. 

- SSE는 또한 큰 bounding box와 작은 bounding box를 같은 가중치로 loss 계산을 한다는 문제점을 가진다. 큰 bounding box는 조금 움직여도 객체를 잘 포함하고 있지만 작은 bounding box는 조금만 움직여도 객체를 벗어날 수 있기 때문에 큰 bounding box의 편차가 작은 bounding box의 편차보다 덜 중요하다는 것을 반영해주어야 한다. 따라서 bounding box의 w와 h에 square root를 취해 너비와 높이가 커짐에 따라 증가율이 감소해 loss에 대한 가중치를 감소할 수 있도록 하였다. 

- YOLO는 하나의 그리드 셀 당 여러 개의 bounding box를 예측하는데, 학습 과정에서는 한 객체당 하나의 bounding box와 매칭되어야 한다. 따라서 예측된 bounding box 중 ground truth와의 IOU가 가장 높은 bounding box를 선택한다. 

* ground truth : 연구자가 모델에게 원하는 답 ( 연구자가 정한 답 )  

Training 과정에서 사용되는 Loss Function

$1_i^{obj}$ : 그리드 셀 i 안에 객체가 존재하는 지 여부 ( 존재하면 1, 아니면 0 )

$1_{ij}^{obj}$ : 그리드 셀 i의 j번째 bounding box predictor가 사용되는지 여부

 

< 수식 해석 참고 > 

https://curt-park.github.io/2017-03-26/yolo/

 

[분석] YOLO

Paper study of YOLO published in May 2016

curt-park.github.io

- PASCAL VOC 2007, 2012 train & validation 데이터

- 135 epoch, batch size = 64, momentum = 0.9, decay = 0.0005

- 첫 epoch에서는 learning rate을 0.001에서 0.01로 천천히 상승시켰고 이후 75 epoch 동안은 0.01, 30 epoch동안은 0.001, 마지막 30 epoch동안은 0.0001로 설정하였다

- dropout = 0.5, data augmentation은 20%까지 random scaling, random translation 적용

 

2.3. Inference

- PASCAL VOC에서 이미지당 98개의 bounding box와 각 box별 class probability를 예측하였다. YOLO는 하나의 network evaluation만 진행하기 때문에 테스트 속도가 매우 빠르다

- 하지만 YOLO에서는 하나의 객체를 여러 그리드 셀이 동시에 검출하는 경우가 발생하는데 이를 다중 검출(multiple detection) 문제라고 한다. 이는 non-maximal suppression 방법을 통해 개선할 수 있고 YOLO는 이를 통해 mAP를 2 ~ 3% 향상시켰다. 

 

2.4. Limitations of  YOLO 

- YOLO의 각 그리드 셀은 2개의 bounding box만을 예측하고 하나의 클래스를 가지기 때문에 bounding box 예측에 강한 공간적 제약을 가한다. 이로 인해 모델이 예측할 수 있는 주변 객체의 수가 제한되어 새 떼와 같이 작은 객체가 몰려 있는 경우에 객체 검출이 제한적이다. 

- 또한 데이터에서 bounding box를 예측하는 것을 학습하기 때문에 training에서 학습하지 못한 새로운 종횡비가 나올 경우 검출이 어렵다. 

- 마지막으로 큰 bounding box와 작은 bounding box의 loss에 동일한 가중치를 두어 incorrect localization 문제가 존재한다.

 

3. Comparison to Other Detection Systems

- 이전에 사용된 Object Detection모델인 DPM과 R-CNN과의 비교

- DPM은 분리된 파이프라인이 각각 feature extraction, region classification, bounding box prediction 등을 수행하지만 YOLO는 이들을 하나의 convolution neural network로 대체하여 더 빠르고 정확하다

- R-CNN은 region proposal 방식으로 객체를 검출하고 selective search로 bounding box를 생성, convolution layer로 feature를 추출, SVM으로 bounding box 점수를 측정한다. YOLO는 각 그리드 셀이 bounding box를 예측하여 점수를 계산한다는 점이 비슷하지만 YOLO는 인자로 공간적 제약을 걸기 때문에 R-CNN에 비해 하나의 객체가 여러번 검출되는 경우가 적다. 따라서 예측되는 bounding box도 적고 속도도 더 빠르다.

- 그 외 Other Fast Detectors, Deep MulutiBox, OverFeat, MultiGrasp...

 

4. Experiments

- 다른 Real-Time Detector 모델들 보다 높은 mAP점수를 기록, Fast YOLO는 가장 빠른 FPS를 기록하였다

- YOLO는 localize error가 높고 Fast R-CNN은 background error가 높음 ( YOLO는 전체 이미지를 보기 때문에 background error가 낮고, 큰 bounding box와 작은 bounding box의 loss에 동일한 가중치를 두기 때문에 localize error가 높음 )

Combining Fast R-CNN & YOLO

- Fast R-CNN과 YOLO의 앙상블 결과 mAP가 3.2%p 상승하였다 

- PASCAL VOC 2012 데이터를 사용한 모델 중 속도면에서는 YOLO가 가장 빠르고, Fast R-CNN과 YOLO를 결합한 모델이 mAP는 더 좋음

- 훈련 데이터 셋과 다른 분포를 지닌 테스트 데이터 셋을 활용해 테스트해 본 결과 새로운 이미지에서의 Object Detection도 잘 작용하는 것을 볼 수 있다

 

 

< 참고 자료 >

https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-YOLOYou-Only-Look-Once

 

논문 리뷰 - YOLO(You Only Look Once) 톺아보기

본 글은 YOLO 논문 전체를 번역 및 설명해놓은 글입니다. 크게 중요하지 않은 부분을 제외하고는 대부분의 글을 번역했고 필요하다면 부가적인 설명도 추가했습니다. 내용이 긴 섹션 끝에는 요약

bkshin.tistory.com

https://deepbaksuvision.github.io/Modu_ObjectDetection/posts/04_01_Review_of_YOLO_Paper.html

 

01). You Only Look Once 논문리뷰 · GitBook

No results matching ""

deepbaksuvision.github.io


세 줄 요약

1. 기존의 Object Detection 모델보다 mAP가 떨어지더라도 속도가 빠른 YOLO 모델 제안
2. input image를 S x S 크기의 그리드 셀로 나누어 각 그리드마다 bounding box와 class probability를 예측
3. 작은 객체를 잘 탐지하지 못하지만 일반화에 좋은 성능을 보임

 

 

 

댓글