상세 컨텐츠

본문 제목

[이미지 스터디] You Only Look Once: Unified, Real-Time Object Detection 논문 리뷰 및 코드 실습

심화 스터디/이미지

by 구은아 2022. 3. 24. 22:15

본문

 

 

작성자: 구은아

논문: https://arxiv.org/pdf/1506.02640.pdf


1. Introduction

인간은 이미지를 슬쩍 보고도 이미지 내 대부분의 정보를 파악한다. 빠르고 정확한 인간의 시각 시스템을 object detection에 적용할 수 있다면 복잡한 센서 없이도 시각 정보를 사용하는 일을 컴퓨터에게도 시킬 수 있을 것이다. (자동차 운전이나 보조 기기처럼 실시간 시각 정보가 필요한 일들에 특히)

최근 detection 모델은 classifier 모델의 변용이다. object를 classify하고, 이미지의 여러 위치와 크기에서 이를 평가한다. (예를 들면, sliding window) R-CNN같은 더 최근 모델은 예상되는 bounding box를 찾고, 이 박스에 대해서 classifier를 수행하기도 한다. classfication이 끝나면 bounding box를 정제하고, 중복 detection을 처리하는 등의 후과정을 거친다. 이러한 시스템은 각 요소가 따로 학습되기 때문에 느리고, 최적화하기에 어렵다.

이러한 배경에서 YOLO는 이미지에서 bounding box를 찾고, classification하는 것까지 한 문제로 풀 수 있는 모델로 등장하였다. YOLO는 어떤 object가 존재하는지와 그것이 어디있는지를 예측한다.

위 이미지를 보면 한 개의 합성곱 신경망이 bounding box 여러 개와 그 박스들에 대한 class 확률을 한 번에 예측한다. 이렇게 통합된 모델은 이전 모델에 비해 몇가지 장점이 있다.

첫번째, 구조가 간단하기 때문에 훨씬 빠르다. Titan X GPU 환경에서 base network는 초당 45 프레임(no batch)을 처리할 수 있다. 더 빠른 버전의 network는 150 fps 더 빠르다. 이는 real-time 스트리밍 영상도 보다 빠르게 처리할 수 있음을 뜻한다. 게다가 YOLO는 real-time 데이터를 처리하는 다른 모델보다 두 배 이상의 높은 정확성을 보였다.

두번째, YOLO는 sliding window, RPN 기법 등과 달리 수행 내내 이미지 전체를 활용한다. 그래서 class와 이미지 정보 간 contextual 정보를 얻을 수 있다. 특히 이는 background patch에 대한 에러를 감소시켰다.

세번째, YOLO는 object의 더 보편적인 정보를 학습하기 때문에 새로운 영역에서도 잘 적용된다. 만약 실제 사진으로 학습한 YOLO 모델을 그림에 적용하더라도 다른 모델에 비해 더 성능이 좋다는 것이다.

YOLO는 가장 성능이 좋은 최신모델보다는 뒤처지지만 빠르게 object를 찾아내고, 작은 object도 잘 찾아낸다는 점에서 의미가 있는 모델이다.

 

2. Unified Detection

YOLO는 object detection의 분리된 요소들을 하나의 신경망으로 합친 형태이다. 또한 예측에서 전체 이미지를 사용하며, 이 덕분에 모든 클래스에 대한 bounding box를 동시에 찾을 수 있다. 이를 논문에서는 full image와 all the objects에 대해 reasons globally하다고 표현했다.

이러한 YOLO의 설계는 end-to-end training을 가능하게 하고, real-time 데이터 처리의 속도를 정확성을 유지하면서 높였다.

YOLO는 이미지를 S*S grid로 나눈다. 특정 object의 중심이 어떤 grid cell에 포함될 경우, 그 cell은 그 object의 인식을 담당하게 된다. 각 gird cell은 $B$개의 bounding box와 그 박스들에 대한 confidence score를 예측한다. confidence score란 이 박스가 object를 포함하고 있다고 모델이 확신할 수 있는 정도와 박스가 이를 정확히 예측할 수 있는 정도에 관련된 점수이다.

$$ confidence\ score=Pr(Object)*IOU^{truth}_{pred} $$

보통 위와 같은 공식으로 계산된다. 만약 아무런 object도 cell에 존재하지 않는다면 confidence score는 0이 된다. cell에 object가 존재하면 confidence score는 predicted box와 ground truth box의 IOU가 된다.

각 bounding box는 5개의 예측값($x,y,w,h,confidence$)으로 이루어져 있다. $x,y$는 박스의 중심 좌표, $w,h$는 박스의 가로세로 길이이며, $confidence$는 위에서 말한 것과 같다.

각 grid cell은 $C$개의 조건부 클래스 확률도 예측한다. $Pr(Class_i|Object)$. 이러한 확률들은 grid cell에 object가 있다는 것에 대한 조건부이다. cell 당 클래스 확률은 박스의 개수($B$)와 상관 없이 한 세트만 예측한다.

test에서 조건부 클래스 확률과 각 박스의 confidence prediction을 곱한다.

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

이는 각 박스에서 class-specific한 confidence score가 된다. 이 score는 박스에서 나타나는 클래스에 대한 확률과 predicted box가 얼마나 object를 잘 찾는지와 관련이 있다.

정리하자면, 일단 이미지를 S*S grid로 쪼갠다. 그리고 각 grid cell에 대해 $B$개의 bounding box, 각 박스에 대한 confidence와 모든 class에 대한 확률을 예측한다.

2-1. Network Design

초기 convolutional layer는 이미지로부터 feature를 추출한다. fc layer는 output 확률과 좌표를 예측한다. GoogLeNet을 참고하여 24개의 convolutional layer와 2개의 fc layer로 이루어져 있다. 그러나 GoogLeNet의 inception module 대신 11 reduction layer를 33 convolutional layer 앞에 사용한다. reduction layer는 앞선 레이어의 feature space를 감소시켜준다. convolutional layer는 ImageNet classification과 detection으로 pretrain 되었다.

fast version YOLO는 convolutional layer를 9개만 사용하고, 필터 개수를 줄였다.

신경망의 최종 output은 7730 크기의 텐서가 된다.

2-2. Training

convolutional layer는 ImageNet(1000 class) 데이터를 이용하여 pretrain하였다. pretrain 과정에서는 처음 20개의 convolutional layer만 사용하고, 그 뒤에 average-pooling layer와 fc layer를 사용했다.

그리고 모델을 detection 용도로 변환한다. pretrain된 모델에 레이어를 추가하면 성능이 높아진다는 선례가 있으므로, YOLO는 4개의 convolutional layer와 2개의 fc layer를 추가하였다. 추가된 레이어의 가중치는 랜덤하게 초기화하였다. 그리고 detection은 고화질의 시각 정보를 요구하므로 이미지의 해상도를 224224에서 448448로 증가시켰다.

마지막 레이어는 클래스 확률과 bounding box 좌표를 모두 예측한다. bounding box의 $w$와 $h$는 이미지의 가로세로 길이에 의해 정규화되어 0과 1사이의 값으로 변환된다. 좌표값 $x$와 $y$도 마찬가지로 정규화하여 0과 1사이의 값을 갖도록 한다.

모든 레이어에 대해 활성화 함수로 leaky ReLU를 사용하였다.

$$ \phi(x)=\begin{cases}x, & \quad if \ x>0 \\ 0.1x, & \quad otherwise \end{cases} $$

모델 최적화를 위해 SSE를 사용하면 최적화하기는 쉽지만 average precision을 최적화하는 목표에는 제대로 작동하지 못하는 문제가 발생한다. 왜냐하면 localization error(bounding box의 위치와 관련된 error)와 classification error를 동시에 취급하기 때문이다. 또한 이미지에서 대부분의 grid cell이 object를 포함하지 않아 confidence score가 0인데 이는 object를 포함하는 cell이 gradient까지 0으로 밀어붙일 위험이 있다. 이는 모델의 불안정성을 일으킨다.

이를 해결하기 위해 bounding box 좌표가 있는, 즉 object가 있는 cell의 loss는 증가시키고, obejct가 없는 cell의 loss는 감소시켰다. 이를 위해 $\lambda_{coord}=5$와 $\lambda_{noojb}=0.5$ 파라미터를 사용한다.

또한 SSE는 큰 박스와 작은 박스의 error도 동일하게 취급하는데 큰 박스 내의 작은 편차는 작은 박스 내의 편차보다 덜 중요하게 다뤄져야 한다. 이를 위해 bounding box를 예측할 때, $w$와 $h$에 제곱근을 취한다. 원래 값이 아닌 제곱근을 예측하면 $w$와 $h$가 커질수록 예측값의 증가율은 감소한다.

YOLO는 한 개의 grid cell 당 여러 개의 bounding box를 예측한다. 학습 과정에서는 한 개의 object에 한 개의 bounding box 예측만 필요하기 때문에 ground truth와 가장 높은 IOU를 가진 한 개의 predictor만 object에 할당된다. 이러한 과정은 각 predictor가 특정 크기, 각도, 클래스에 특화된 predictor가 되도록 하며, 이는 전체적인 성능을 높인다.

학습 과정에서 최적화 하는 것은 cell i 내 object의 존재 여부에 대한 indicator function과 cell i에서 j번째 bounding box가 object의 prediction을 담당하는지 여부에 대한 indicator function이다. grid cell에 object가 있을 때, loss function은 오직 classification error만을 규제한다. 만약 ground truth에 대한 predictor라면 bounding box 좌표 error만을 규제한다. (가장 높은 IOU를 가진 grid cell)

  • epoch: 135
  • datasets: PASCAL VOC 2007(training용), 2012(testing, training용)
  • batch size: 64
  • momentum: 0.9
  • weight decay: 0.0005
  • learning rate schedule: 처음부터 높은 learning rate를 사용하면 gradient가 불안정하기 때문에 첫번째 epoch에서는 예외적으로 $10^{-3}$에서 $10^{-2}$로 천천히 증가시킨다. 그리고 처음 75epoch 동안은 $10^{-2}$, 그 후 30epoch 동안 $10^{-3}$, 최종적으로 30epoch 동안 $10^{-4}$로 진행한다.
  • overfitting: 과적합을 피하기 위해서 0.5 rate의 dropout 레이어를 첫번째 fc layer 이후에 추가하였다. 그리고 원본 이미지 크기의 20%까지 random scailing과 translation을 수행하였다. 그리고 이미지의 HSV color space의 1.5까지는 랜덤하게 exposure과 saturation를 적용하였다.
  •  

2-3. Inference

추론 과정에서도 오직 1개의 신경망만 적용된다. 한 신경망에 대해서만 evaluation을 진행하면 되기 때문에 classifier-based 모델보다 훨씬 빠르다. PASCAL VOC 신경망에서는 한 이미지 당 98개의 bounding box가 예측되었으며, 각 박스마다 클래스 확률이 예측되었다.

YOLO는 grid 구조 상에서 진행되기 때문에 bounding box에 공간적 문제를 일으킬 수 있다. 한 grid cell에 정확히 들어맞는 object도 있지만, 큰 object나 cell의 경계선에 가까운 object는 여러 개의 cell에 위치할 수 있기 때문이다. non-maximal suppression은 이러한 multiple detection 문제를 해결한다. non-maximal suppression은 mAP를 2-3% 정도 증가시켰다.

더보기

non-maximal suppression(이하 NMS)은 여러 개의 bounding box 중 가장 정확한 박스를 찾고 나머지는 제거하는 기법이다.

  1. 후보 bounding box를 confidence score를 기준으로 정렬하고, 가장 높은 confidence score를 가진 박스를 final box 목록에 추가한다.
  2. final box로 선택된 박스와 다른 bounding box 간 IOU를 계산하여, 임계값을 넘는 박스 후보는 제거한다. 이 object를 detect하는 가장 좋은 박스가 이미 선택되었기 때문에 더이상 필요 없다고 판단하는 것이다.
  3. 남은 bounding box 후보를 다시 confidence score를 기준으로 정렬하고, 가장 높은 score를 가진 박스를 final box 목록에 추가한다.
  4. 방금 추가한 박스와 남은 후보 bonding box 간 IOU를 계산하고, 임계값을 넘는 박스 후보는 제거한다.
  5. 이 과정을 bounding box 후보가 더이상 남지 않을 때까지 진행한다.

2-4. Limitations of YOLO

YOLO는 각 grid cell이 2개의 박스만을 예측하고, 1개의 클래스만을 가질 수 있다는 점에서 공간점 한계점을 갖고 있다. 이때문에 YOLO는 서로 가까운 여러 개의 object를 잘 예측하지 못한다는 약점을 가진다. YOLO는 특히 그룹으로 나타나는 작은 object detection에 약하다.

데이터로부터 bounding box 예측을 학습하기 때문에 새로운 설정의 이미지에는 잘 적용되지 않는다. (예를 들면 새로운 aspect ratio) 그리고 구조에 downsampling 레이어가 여러 개 있기 때문에 선명하지 못한 feature로 학습해야 한다.

또한 loss function은 큰 bounding box와 작은 bounding box에서 생겨난 에러를 동일하게 취급한다. 작은 박스에서 발생한 small error는 큰 박스에서 발생한 것보다 IOU에 훨씬 더 큰 영향을 준다.

 

3. Comparison to Other Detection Systems

detection 모델의 구조는 1) 이미지에서 robust feature 추출 2) feature space에서 classifier와 localizer가 object를 인식(이때, sliding window를 이용) 으로 이루어진다. 본 논문에서는 이와 같은 framework를 YOLO와 비교하였다.

Deformable parts models

Deformable parts models(이하 DPM)은 sliding window를 사용하며, static feature를 추출하기 위해 분리 구조를 사용하는 모델이다. 우선 영역을 classify하고, score가 높은 영역에 bounding box를 예측한다. YOLO는 이 과정을 하나의 신경망으로 합쳤다는 것이 차이점이다. 그리고 static feature 대신 in-line feature를 학습하고, 그들을 detection task로 최적화한다. 이렇게 통합된 모델은 DPM보다 더 빠르고 정확하다.

R-CNN

R-CNN은 sliding window 대신 region proposal이라는 방식을 사용한다. potential bounding box를 만들고, 이에서 feature를 추출하고, 박스에 score를 부여하는 등의 과정은 각각 독립적으로 튜닝되어야 한다. 그래서 이 시스템은 YOLO에 비해 매우 느리고, 한 test 이미지 당 40초 넘는 시간을 사용해야 한다.

YOLO는 R-CNN과 비슷하게 각 grid cell에서 potential bounding box와 박스의 score를 만든다. 그러나 YOLO는 같은 object에 대한 multiple detection을 완화하기 위해 grid cell에 spatial constraints를 적용하였고, 이미지 당 98개의 bounding box만을 제안한다. (R-CNN의 Selective Search는 한 이미지 당 2000개) 그리고 이 모든 과정을 하나의 신경망으로 통합하였다.

Other Fast Detectors

Fast & Faster R-CNN은 R-CNN 모델을 더 빠르게 만들기 위해 computation을 공유하고 Selective Search 대신 인공 신경망을 region proposal에 사용하는 모델이다. 이들은 R-CNN보다 속도와 정확성을 높였지만 둘 다 실시간 데이터 처리에는 여전히 적합하지 않았다.

많은 연구가 DPM 구조를 빠르게 만들고자 HOG computation을 빠르게 하거나, cascades를 사용하거나, GPU를 사용하였다. 그러나 YOLO는 모델 구조 자체를 바꿈으로서 각 요소를 따로 최적화하는 DPM 방식보다 더 빠른 속도를 보였다.

YOLO는 또한 다양한 object를 동시에 인식할 수 있다.

Deep MultiBox

MultiBox는 YOLO와 비슷하게 region proposal을 위해 Selective Search를 사용하지 않고 합성곱 신경망을 이용하였다. 이는 confidence prediction을 single class prediction으로 대체하면 single object detection도 가능하다. 그러나 YOLO와 달리 다양한 object를 동시에 인식하는 것이 불가능하고, 하나로 통합된 신경망이라고 볼 수 없다. (image patch classification이 필요)

OverFeat

OverFeat은 localization을 위해 합성곱 신경망을 학습하고, 이 localizer를 detection에 활용한다. sliding window detection을 효율적으로 수행하나 여전히 분리 모델이다. 그리고 detection이 아닌 localization을 최적화한다. DPM처럼 localizer는 prediction에서 오직 local information만 반영하기 때문에 global context 기반으로 예측할 수 없다. 그래서 동시 detection을 위해서는 많은 후처리가 요구된다.

MultiGrasp

YOLO의 grid 접근법은 MultiGrasp에서 온 것이다. 그러나 grasp detection은 object detection을 수행하기에는 너무 단순하다. MultiGrasp는 오직 한 개의 object만을 가진 이미지만 region proposal이 가능하다. object의 size, location, boundary를 추정하지 않고, 클래스를 예측하지도 않으며, 그저 grasping하기에 알맞은 region만을 찾는다. YOLO는 이와 달리 multiple object 및 클래스에 대해 bounding box와 클래스 확률을 예측할 수 있다.

 

4. Experiments

우선 YOLO를 다른 real-time detection 모델과 PASCAL VOC 2007로 비교하였다. 특히 R-CNN과 비교했을 때, background 에러가 크게 줄어든 것을 발견하였다. 그 후, VOC 2012 결과로도 비교하였다. 마지막으로 YOLO가 다른 모델에 비해 새로운 양식의 이미지에서도 잘 적용되는 것을 확인하였다.

4-1. Comparison to Other Real-Time Systems

Fast YOLO는 PASCAL에서 object detection 모델 중 가장 빠른 모델이다. 또한 52.7%의 mAP로 이전 모델에 비해 2배 이상 정확성을 보여주었다. YOLO에서 mAP는 63.4%까지 증가하였다.

VGG16으로 학습시킨 YOLO는 다른 VGG16 모델과 비교하기에 유용했으나 속도가 느려서 크게 집중하지는 않았다.

가장 빠른 DPM은 mAP를 낮추지 않고 효율적으로 속도를 빠르게했으나 real-time 수행에서는 뒤처졌다. 또한 DPM 모델은 신경망 모델에 비해 낮은 정확성을 보여주었다.

R-CNN minus R은 Selective Search를 static bounding box proposal로 바꾼 모델이다. 이는 R-CNN보다 속도는 빨라졌으나 여전히 real-time에서는 빠르지 못했고, proposal이 좋지 않아 정확도에 큰 손상을 입었다.

Fast R-CNN은 R-CNN에서 classification 단계를 빠르게 만든 모델이다. 하지만 여전히 Selective Search에 의존하기 때문에 한 이미지 당 bounding box를 추출하는 시간이 많이 걸린다.

Faster R-CNN은 bounding box proposal을 위해 Selective Search 대신 신경망을 사용한 모델이다. 대부분의 모델이 YOLO보다 속도가 느리거나, 정확도가 낮았다.

4-2. VOC 2007 Error Analysis

YOLO와 최신 모델(Fast R-CNN) 간 차이점을 비교하기 위하여 VOC 2007 결과에서 자세한 breakdown을 확인하였다. 각 카테고리마다 test 과정에서 가장 좋은 N개의 prediction을 찾고, 각 prediction을 맞으면 correct로, 틀리면 에러의 종류에 따라 분류하였다.

  • Correct: correct class와 IOU > 0.5
  • Localization: correct class, 0.1 < IOU < 0.5
  • Similar: class is similar, IOU > 0.1
  • Other: class is wrong, IOU > 0.1
  • Background: IOU < 0.1 for any object

위 그림은 에러 종류 별 breakdown을 보여준다. YOLO는 localiation에서 약점을 보였다. Fast R-CNN은 localization에서는 YOLO보다 적은 에러를 보였으나 background에서 큰 에러를 보였다. Fast R-CNN은 YOLO보다 3배 더 많은 background를 detection하는 셈이다.

4-3. Combining Fast R-CNN and YOLO

YOLO가 Fast R-CNN에서 발생하는 background 에러를 제거한다면 성능에 큰 도움을 줄 수 있을 것이다. 이를 위해 R-CNN에서 예측한 bounding box를 YOLO에서도 예측하고 있는지 확인하고, 그런 박스에 대해서는 boost를 부여하였다.

Fast R-CNN 단독으로는 71.8%의 mAP를 달성하였는데, YOLO와 combined 버전의 경우 75%의 mAP를 달성하였다. 위 표는 다른 좋은 Fast R-CNN과 combine했을 때보다 YOLO와 combine했을 때 가장 좋았음을 보여준다. 즉, YOLO와의 결합의 결과를 단순히 앙상블의 부산물로 볼 수 없다는 것을 알 수 있다. 그보다는 YOLO가 Fast R-CNN과 다른 종류의 에러를 많이 발생시키기 때문에 Fast R-CNN의 성능을 높일 수 있었던 것으로 추정된다.

다만 이 결합은 Fast R-CNN과 YOLO를 따로 작동시키고 그 결과를 결합해야 하기 때문에 속도가 느리다. 그래도 YOLO의 속도가 워낙 빨라서 Fast R-CNN에 비해 크게 시간이 소요되지는 않았다.

4-4. VOC 2012 Results

VOC 2012에서 YOLO는 R-CNN(VGG16 사용)과 비슷한 57.9%의 결과를 보였다. 이는 YOLO가 작은 물체 감지에 약하기 때문에 그렇다. YOLO는 bottle, sheep, tv/monitor에서는 낮은 정확성을 보였으나 cat, train에서는 높은 정확성을 보였다. Fast R-CNN과 YOLO의 결합 모델은 Fast R-CNN보다 성능을 2.3% 향상시키면서 좋은 결과를 보여주었다.

4-5. Generalizability: Person Detection in Artwork

Academic datasets은 train 데이터와 test 데이터가 같은 분포, 즉 같은 양식의 이미지이다. 그러나 real-world에서는 test 데이터가 매우 다양해질 수 있다. 그래서 Picasso Dataset과 People-Art Dataset에 YOLO를 적용하여 다른 모델과 성능을 비교하였다.

R-CNN은 VOC 2007에서는 좋은 성능을 보이지만 미술 작품 데이터에서 성능이 뚝 떨어졌다. 이는 Selective Search가 실제 이미지에 적합한 방식이기 때문이다.

DPM은 object의 모양과 레이아웃 파악에 강하기 때문에 미술 작품 데이터에서도 AP가 크게 떨어지지 않았으나 VOC에서도 성능이 좋지 않았다.

YOLO는 미술 작품에서도 다른 모델에 비해 AP가 적게 감소하였다. 실제 이미지와 미술 작품은 pixel 상으로는 크게 차이가 나지만 obejct의 크기와 모양은 비슷하기 때문에 이에 집중하는 DPM과 YOLO 모델은 미술 작품으로도 양식이 변화해도 성능을 유지한다.

 

5. Real-Time Detection In The Wild

YOLO는 빠르고 정확한 object detector이기 때문에 real-time 데이터 처리에 유용하다. 이 논문에서는 실제로 YOLO에 웹캠 데이터를 적용하여 real-time 수행 능력을 확인하였다. 이 실험에서 YOLO는 object를 따라 움직이고 변화하는 것을 감지하였다.

 

6. Conclusion

이 논문은 object detection을 위한 통합 모델 YOLO를 소개하였다. YOLO는 구현이 간단하며, 전체 이미지에 대해 바로 학습이 가능하다. classifier-based 모델과 달리 YOLO는 detection에 대한 loss function으로 학습되며, 모든 모델이 통합적으로 학습되고 최적화된다.

Fast YOLO는 general-purpose object detection을 위한 더 빠른 버전의 YOLO이다. YOLO는 실시간 object detection의 최근 모델에서 가장 좋은 성과를 보였다. 그리고 YOLO는 새로운 방식의 이미지에도 잘 적용되어 fast, robust한 object detection 분야를 성장시켰다.


코드 실습 :: kaggle에 업로드 된 Detect Person on motorbike or scooter using YoloV3 데이터를 사용하여 오토바이 위 사람과 헬멧을 detection하는 코드

 

Colab 파일: https://drive.google.com/file/d/1SYOWgZVctndAGSVsToef5eCCStYJ-jg3/view?usp=sharing 

 

motorbike-and-helmet-yolo-detection.ipynb

Colaboratory notebook

drive.google.com

datasets 다운로드: https://www.kaggle.com/datasets/savanagrawal/detect-person-on-motorbike-or-scooter

 

Detect Person on motorbike or scooter using YoloV3

A YoloV3 detector which can detect person sitting on motorcycle or scooter.

www.kaggle.com

 

관련글 더보기

댓글 영역