You Look Only Once : Unified, Real-Time Object Detection (YOLO) 논문 리뷰

정예슬·2023년 5월 14일
0

논문 리딩

목록 보기
16/19

이번 논문 리뷰는 You Look Only Once : Unified, Real-Time Object Detection(2016)

object detection 계의 전설에 레전드... 인용 수 무려 +30,000건... ?! a.k.a YOLO에 대해 리뷰해보도록 하겠다.

요즘 업무는 vision 쪽을 더 메인으로 하고 있으니.. 아무래도 열심히 해야겠지?

일단 YOLOv1 부터 천천히 시작,, 가보자고!

(대충 하기싫다 날로먹고싶다는 표정)


Abstract

본 논문은 object detection(객체 탐지)의 새로운 접근법, YOLO를 제시한다. 객체 탐지에 대한 선행 연구들은 인식을 수행하기 위해 분류기의 목적을 고쳤는데, 대신 YOLO는 객체 탐지를 공간적으로 분리된 바운딩 박스와 연관된 클래스 확률로 회귀 문제로 구성한다. 단일 신경망은 전체 이미지에서 바운딩 박스와 클래스 확률을 한 번의 평가로 직접 예측한다. 전체 탐지 파이프라인이 단일 네트워크이기 때문에, 탐지 성능을 end-to-end로 직접 최적화할 수 있다.

YOLO의 통합 구조는 매우 빠르다. base YOLO 모델은 초당 45 프레임의 속도로 실시간으로 이미지를 처리한다. Fast YOLO는 네트워크가 더 작은 버전으로, 초당 무려 155 프레임을 처리하면서 다른 실시간 탐지기보다 2배의 mAP를 달성한다. SOTA 탐지 시스템과 비교하면, YOLO는 더 많은 위치 오류를 일으키지만, 백그라운드에서 false positive(FP) 예측 가능성이 적다. 마지막으로, YOLO는 객체의 매우 일반적인 표현을 학습한다. YOLO는 자연 이미지를 작품과 같은 다른 도메인으로 일반화할 때, DPM과 R-CNN을 포함한 다른 탐지 방법보다 우수한 성능을 발휘한다.


1. Introduction

사람은 이미지를 한번 보고 이미지의 물체가 무엇인지, 어디 있는지, 어떤 상호작용을 하는지 바로 알 수 있다. 사람의 시각 체계는 빠르고 정확하며, 운전과 같은 복합적인 태스크를 거의 무의식적으로 수행할 수 있도록 한다. 빠르고 정확한 객체 탐지 알고리즘은 컴퓨터가 특화 센서 없이도 차를 몰 수 있도록 하며, 보조 기기가 사용자에게 실시간 장면 정보를 전달하고, 일반적인 목적과 반응성 로봇 시스템의 잠재력을 개방할 수 있도록 한다.

현재의 탐지 시스템은 탐지 수행을 위해 분류기(classifier)의 목적을 바꾼다. 객체를 탐지하기 위해서, 이러한 시스템은 객체를 위한 분류기를 갖고, 이를 테스트 이미지에서 다양한 위치와 규모로 평가한다. Deformable Parts Models(DPM)와 같은 시스템은 전체 이미지에서 균일한 간격으로 분류기를 실행하며 슬라이딩 윈도우(sliding window) 접근법을 사용한다.

R-CNN과 같은 가장 최근의 접근법은 region proposal methods을 사용하여 먼저 이미지에 잠재적인 바운딩 박스를 생성하고 나서 이 박스에 분류기를 실행한다. 분류 후, 후처리를 사용하여 바운딩 박스를 정제하고, 중복된 탐지를 제거하고, 해당 장면의 다른 객체들을 기반으로 박스를 리스코어한다. 이러한 복합적인 파이프라인은 각 구성요소가 개별적으로 훈련되야 하기 때문에, 느리고 최적화하기 어렵다.

본 논문에서는 객체 탐지를 바운딩 박스 단일 회귀 문제로 재구성하여, 이미지 픽셀에서부터 바운딩 박스 좌표와 클래스 확률까지 직접 예측한다. 이러한 시스템을 사용하여, you only look once(YOLO)는 이미지에서 어떤 객체가 있고 어디 있는지를 예측한다.

→ YOLO 논문 제목을 보면 알겠지만, 본문에서 가장 강조하는 내용이다. 기존 파이프라인 식 접근법이 아닌, 단일의 컨볼루션을 사용해서 단순하고 빠른 object detection을 수행하는 것! (이후 내용들에서도 계속 언급됨)

(Figure 1) YOLO로 이미지를 처리하는 과정은 단순하고 간단하다.
(1) 입력 이미지를 448x448로 리사이징하고, (2) 이미지를 단일 컨볼루션 네트워크를 실행하고, (3) 모델의 신뢰도에 따라 탐지 결과의 한계치를 정한다.

figure 1을 보면 YOLO는 신선하고 단순하다. 단일 컨볼루션 네트워크는 동시다발적으로 다수의 바운딩 박스와 박스들의 클래스 확률을 예측한다. YOLO는 전체 이미지에서 훈련하고 직접적으로 탐지 성능을 최적화한다. 이러한 통합 모델은 전통적인 객체 탐지 방법에 비해 몇 가지 장점이 있다.

첫번째로, YOLO는 극도로 빠르다. 탐지를 회귀 문제로 구성하여, 복합적인 파이프라인을 필요로 하지 않는다. 테스트 시에는 새로운 이미지에서 신경망을 단순히 실행시켜 탐지를 예측한다. 베이스 네트워크는 Titan X GPU에서 배치 프로세스 없이 초당 45프레임을 실행하고 빠른 버전은 150fps 이상을 실행한다. 이는 25밀리초 미만의 지연시간으로 실시간 스트리밍 비디오를 처리할 수 있다는 것을 의미한다. 또한, YOLO는 다른 실시간 시스템의 평균 정확도의 2배 이상의 정확도를 얻는다.

두번째로, YOLO는 예측을 시행할 때, 이미지를 전역적으로 추론한다. sliding window와 region proposal-based와 달리, YOLO는 훈련과 테스트 시 전체 이미지를 보고, 따라서 appearance와 class에 대한 문맥적 정보를 은연중에 인코딩한다.

최고의 detection method인 Fast R-CNN은 더 큰 문맥을 볼 수 없기 때문에 이미지에서 객체의 백그라운드 패치를 잘못 취급한다. YOLO는 Fast R-CNN에 비해 백그라운드 에러를 반 이상 줄인다.

세 번째로, YOLO는 일반화 가능한 객체 표현을 학습한다. 자연 이미지로 훈련한 다음 삽화에 테스트 할 때, YOLO는 DPM과 R-CNN 같은 탐지 방법보다 훨씬 뛰어난 성능을 보인다. YOLO는 매우 일반화가 잘 되기 때문에, 새로운 영역이나 예측하지 못한 입력에 적용해도 쉽게 무너지지 않는다.

YOLO는 여전히 정확도 측면에서 SOTA 탐지 시스템에 뒤쳐진다. YOLO가 이미지 내 객체를 빠르게 인식할 수 있지만, 일부 객체, 특히 작은 객체에 있어서는 정확하게 위치를 특정하는 것이 어렵다. 본 논문에서는 이러한 상충(tradeoffs)에 대해서도 정리해 놓았다.


2. Unified Detection

YOLO는 객체 인식의 개별적인 구성요소들을 단일 신경망 네트워크로 통합한다. 이러한 네트워크는 전체 이미지에서 특징을 사용하여 각 바운딩 박스를 예측한다. 또한, 한 이미지에서 모든 클래스에 대한 모든 바운딩 박스를 동시에 예측한다. 이러한 네트워크는 전체 이미지와 이미지 내 모든 객체에 대하여 전역적으로 추론한다. YOLO의 설계는 end-to-end 훈련과 높은 정확도를 유지하면서 실시간 속도를 가능하게 한다.

YOLO의 시스템은 입력 이미지를 S×SS\times S 그리드로 나눈다. 객체의 중심이 그리드 셀 내에 들어오면, 해당 그리드 셀은 해당 객체 탐지를 전담한다.

각 그리드 셀은 바운딩 박스(BB)와 바운딩 박스에 대한 신뢰도 점수를 예측한다. 이러한 신뢰도 점수는 박스가 객체를 포함하고 있는가에 대해 모델이 얼마나 자신하는지, 그리고 예측한 박스에 대해 모델이 얼마나 정확하다고 여기는지를 반영한다. 공식적으로 신뢰도를 Pr(Object)IOUpredtruthPr(Object)*IOU^{truth}_{pred}라고 정의한다. 만약 셀 내에 존재하는 객체가 없으면, 신뢰도 점수는 0이 된다. 셀 내에 객체가 있으면 신뢰도 점수는 예측된 박스와 ground truth 간의 IOU(intersection over union)가 된다.

각 바운딩 박스는 5개의 예측으로 구성된다 : x,y,w,hx, y, w, h, 신뢰도(confidence). (x,y)(x, y)는 그리드 셀 대비 박스의 중심을 나타낸다. 너비와 높이는 전체 이미지에 대비하여 예측된다. 마지막으로 신뢰도 예측은 예측된 박스와 ground truth 박스 간의 IOU를 나타낸다.

각 그리드 셀은 C 조건부 클래스 확률, Pr(ClassiObject)Pr(Class_i|Object)도 예측한다. 이러한 확률은 객체를 포함한 그리드 셀을 조건으로 한다. 박스의 수 BB와 관계 없이, 각 그리드 셀마다 클래스 확률의 세트 한 개만 예측한다.

테스트 시 조건부 클래스 확률과 개별 박스 신뢰도 예측 값을 곱한다.

(1) Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruthPr(Class_i|Object)*Pr(Object)*IOU^{truth}_{pred}=Pr(Class_i)*IOU^{truth}_{pred}

이러한 계산은 각 박스에 클래스 명시적인 신뢰도 점수를 부여한다. 이러한 점수는 박스에 나타난 클래스의 확률과 예측된 박스가 객체에 얼마나 잘 맞는지를 암호화(encode)한다.

YOLO 시스템은 탐지를 회귀 문제로 모델링한다. 이미지를 S×SS\times S 그리드로 나누고, 각 그리드 셀에서 BB개의 바운딩 박스, 각 박스에 대한 신뢰도, 그리고 클래스 확률 CC를 예측한다. 이러한 예측은 S×S×(B5+C)S\times S\times (B * 5 + C) 텐서로 인코딩된다.

YOLO를 PASCAL VOC로 평가하기 위해, S=7,B=2S=7, B=2를 사용한다. PASCAL VOD는 라벨링된 클래스가 20개이므로 C=20C=20이다. 최종 예측은 7×7×307\times7\times30 텐서(tensor)가 된다.

2.1. Network Design

YOLO 모델은 컨볼루션 신경망과 같이 구현하며, PASCAL VOD 탐지 데이터셋에서 검증한다. 이 네트워크의 최초 컨볼루션 레이어는 이미지에서 특징을 추출하고, 그 동안 완전연결층은 출력 확률과 좌표를 예측할한다.

YOLO의 네트워크 구조는 이미지 분류 모델 GoogLeNet의 영감을 받았다. YOLO 네트워크는 24개의 컨볼루션 레이어와 2개의 완전연결층으로 구성된다. GoogLeNet에서 사용한 inception 모듈 대신, Lin et al. 에서와 유사하게 단순히 3×33\times3 컨볼루션 층과 1×11\times1 reduction 레이어를 사용한다. Figure 3은 전체 네트워크 구조를 보여준다.

YOLO의 탐지 네트워크는 24개의 컨볼루션 레이어에 2개의 완전연결층이 뒤따르는 구조이다. 1×11\times1 컨볼루션 레이어를 대체하여 선행 레이어의 특성 공간을 축소한다. 컨볼루션 신경망은 ImageNet 분류 태스크에서 탐지 시 해상도의 절반 해상도를 사용하여(224×224224\times224의 입력 이미지) 사전훈련되고, 탐지 시 해상도는 두 배가 된다.

빠른 객체 탐지의 경계를 허물기 위해, YOLO의 빠른 버전을 훈련한다. Fast YOLO는 더 적은 컨볼루션 레이어 (24개 대신, 9개의 컨볼루션 레이어를 사용)와 더 적은 레이어 필터로 구성된 신경망을 사용한다. 네트워크의 크기를 제외하면, YOLO와 Fast YOLO의 모든 훈련 및 테스트 파라미터는 동일하다.

이러한 네트워크의 최종 출력은 7×7×307\times7\times30 텐서가 된다.

2.2. Training

YOLO의 컨볼루션 레이어는 ImageNet 1000-class competition dataset에서 사전 훈련된다. 사전 훈련에서, 평균 풀링 레이어와 완전 연결층을 포함한 처음 20개의 컨볼루션 레이어가 사용된다. 이러한 신경망은 약 1주간 훈련되고, ImageNet 2012 평가 셋에서 single crop top 5 정확도 88%를 얻는다. 이 수치는 Caffe’s Model Zoo의 GoogLeNet 모델과 비슷한 성능이다. 모든 훈련과 추론 과정에서 DarkNet 프레임워크를 사용한다.

다음으로, 모델이 탐지를 수행하도록 변경한다. Ren et al. 은 사전 훈련된 네트워크에 컨볼루션과 완전연결층을 모두 넣는 것이 성능을 향상시킬 수 있다는 것을 입증했다. 이러한 예를 따라, YOLO는 임의로 초기화된 가중치를 부여한 4개의 컨볼루션 레이어와 2개의 완전연결층을 추가한다. 탐지는 일반적으로 fine-grained 시각적 정보를 요하기 때문에, 네트워크의 입력 해상도를 224×224224\times224에서 448×448448\times448로 늘린다.

YOLO의 최종 레이어는 클래스 확률과 바운딩 박스 좌표를 모두 예측한다. 바운딩 박스의 너비와 높이는 이미지의 너비와 높이로 일반화하여 0~1 사이 값으로 떨어지게 한다. 바운딩 박스 x,yx, y 좌표는 지역적으로 특정 그리드 셀의 상충이 되도록 파라미터화하고, 따라서 좌표 값 또한 0~1 범위가 된다.

YOLO의 최종 레이어에는 선형 활성화 함수를 사용하고, 다른 모든 레이어에서는 다음의 leaky rectified linear activation을 사용한다 :

YOLO 모델의 출력에서 sum-squared error를 최적화한다. SSE를 사용하는 이유는 최적화하기가 쉽기 때문인데, 평균 정확도를 최대화하려는 목표에는 완벽히 부합하지 않는다. SSE는 localization error와 classification error에 동등한 가중치를 부여하는데, 이러한 방법이 이상적이지 않을 수 있다.

또한, 모든 이미지에서 다수의 그리드 셀은 어떠한 객체도 포함하지 않는다. 이러한 현상은 이미지를 포함하지 않는 셀들의 “신뢰도” 점수를 0으로 떨어지게 만들고, 때로 객체를 포함한 셀의 기울기(gradient)를 압도하기도 한다. 이러한 현상은 모델의 안정성을 떨어뜨릴 수 있으며, 훈련 시 조기 수렴을 야기한다.

이러한 문제를 극복하기 위해, 바운딩 박스 좌표 예측의 손실을 증가시키고 객체를 포함하지 않은 박스에 대한 신뢰도 예측 손실은 감소시킨다. 여기서 2개의 파라미터 λcoordλ_{coord}λnoobjλ_{noobj}가 사용된다. λcoordλ_{coord}=5=5, λnoobjλ_{noobj}=5=5로 설정한다.

SSE는 큰 박스와 작은 박스 오류(error)의 가중치를 동등하게 한다. 오류 평가 지표는 큰 박스에서의 작은 편차가 작은 박스에서의 편차보다 중요하지 않다는 것을 반영해야 한다. 부분적으로 이러한 문제를 다루기 위해, 바운딩 박스의 너비와 높이를 직접 사용하기보다는 바운딩 박스의 너비와 높이의 제곱근을 예측하도록 한다.

YOLO는 그리드 셀마다 다수의 바운딩 박스를 예측한다. 훈련 시에는 한 객체마다 하나의 바운딩 박스 예측기가 담당해야 한다. 하나의 예측기를 할당하고 ground truth와 현재 가장 높은 IOU를 가진 예측을 기반으로 객체를 예측하고자 한다. 이러한 방법은 바운딩 박스와 예측기 간 전문화가 되도록 한다. 각 예측기는 특정 크기와 영상비, 또는 객체의 클래스를 예측하는 데 점점 능숙해지면서, 전반적인 recall(재현율)을 향상시킨다.

훈련하는 동안, 다음의 multi-part 손실 함수를 최적화한다.

2.3. Inference

훈련에서와 같이, 테스트 이미지의 탐지를 예측하는 것은 한개의 네트워크 평가만 필요로 한다. PASCAL VOC에서 네트워크는 이미지당 98개의 바운딩 박스와 각 박스에 대한 클래스 확률을 예측한다. YOLO는 테스트 속도가 매우 빠른데, 그 이유는 분류기 기반 방법론과 달리 단일 네트워크 평가만 필요하기 때문이다.

그리드 설계는 바운딩 박스 예측에서 공간적인 다양성을 강제한다. 어떤 그리드 셀에 객체가 들어오는지는 명확하고, 네트워크는 각 객체에 대한 한 개의 박스만 예측하면 된다. 그러나, 일부 대형 객체 또는 다수의 셀의 경계에 있는 객체는 다수의 셀을 통해서 위치가 잘 특정될 수 있다. Non-maximal suppression을 사용하여 이러한 다중 탐지를 개선할 수 있다.

2.4. Limitations of YOLO

각 그리드 셀이 2개의 박스만 예측하고 1개의 클래스만 가질 수 있기 때문에, YOLO는 바운딩 박스 예측에 강한 공간적 제한을 부과하게 된다. 이러한 공간적 제한은 모델이 예측할 수 있는 근거리 객체의 숫자를 제한한다. YOLO 모델은 새떼와 같이 무리 지어 나타나는 작은 객체를 탐지하는 데 어려움을 겪는다.

YOLO 모델은 데이터에서 바운딩 박스를 예측하도록 훈련하기 때문에, 새로운 해상도(resolution)나 구성(configuration)의 객체를 일반화 하는 데 어려움을 겪는다. YOLO 모델은 입력 이미지에서 다수의 다운샘플링 레이어를 갖기 때문에, 상대적으로 굵직한 특징을 사용하여 바운딩 박스를 예측한다.

결국, 탐지 성능을 측정하는 손실 함수로 훈련할 때, 손실 함수는 작은 바운딩 박스와 큰 바운딩 박스의 오류를 동일하게 취급하게 된다. 큰 바운딩 박스에서의 작은 오류는 일반적으로 무해하지만, 작은 바운딩 박스에서의 작은 오류는 IOU에서 훨씬 더 큰 영향을 끼치게 된다. YOLO에서 오류의 주된 원인은 부정확한 위치 특정(localization)이다.


3. Comparision to Other Detection Systems

객체 탐지는 컴퓨터 비전에서 핵심적인 문제이다. 탐지 파이프라인은 일반적으로 입력 이미지에서 강건한 특징들을 추출함으로써 시작된다. 그리고 나서, classifiers 또는 localizers를 사용하여 특징 공간 내 객체를 인식한다. 이러한 classifier나 localizers는 전체 이미지나 이미지의 일부 지역에서 슬라이딩 윈도우 방식으로 실행된다.

YOLO 탐지 시스템을 다른 탐지 프레임워크와 비교하여, 주요한 유사점과 차이점을 살펴보자.

  • Deformable parts models(DPM)
    DPM은 객체 탐지를 위해 슬라이딩 윈도우(sliding window) 접근법을 사용한다. DPM은 정적 특징(static features)를 추출하고, 지역을 분류하고, 높은 스코어 지역의 바운딩 박스를 예측하는 데 분리된 파이프라인을 사용한다. YOLO에서는 이러한 개별적인 파트를 단일 컨볼루션 신경망으로 대체한다. YOLO 네트워크는 특징 추출, 바운딩 박스 예측, non maximal suppression(NMS)과 문맥 추론을 동시에 수행한다.
    YOLO 네트워크는 정적 특징 대신, in-line으로 특징을 훈련하고 이러한 특징을 탐지 태스크에 최적화시킨다. 이러한 YOLO의 통합 구조(unified architecture)는 DPM보다 더 빠르고 정확한 모델을 만든다.
  • R-CNN
    R-CNN과 그 변형은 슬라이딩 윈도우 대신 region proposals(RP)을 사용하여 이미지의 객체를 탐색한다. selective search(선택적 탐색)가 잠재적인 바운딩 박스를 생성하고, 컨볼루션 네트워크가 특징을 추출하고, SVM이 박스를 점수화하고, 선형 모델이 바운딩 박스를 조정하고, non maximal suppression(NMS)가 중복 탐지를 제거한다. 이러한 복합적인 파이프라인의 각 단계는 개별적으로 정확하게 튜닝되어야 하고, 결국 resulting system은 테스트에서 이미지 한 장마다 40초 이상 소요되는 매우 느린 시스템이 된다.

YOLO는 R-CNN과 몇 가지 공통점이 있는데, 각 그리드 셀이 잠재적인 바운딩 박스를 만들고 이러한 박스들을 컨볼루션 특징을 사용하여 점수화한다는 것이다. 그러나, YOLO 시스템은 그리드 셀에 공간적 제약을 두는데, 이러한 제약은 동일한 객체에 대한 다중 탐지를 완화시킨다. YOLO 시스템은 Selective Search보다 훨씬 적은 바운딩 박스를 생성한다(YOLO는 이미지 한 장당 98개, Selective Search는 이미지 한 장당 2,000개). 결국, YOLO 시스템은 이러한 개별적인 구성요소를 단일, 공동의 최적화 모델로 통합한 것이다.

  • Other Fast Detectors
    Fast R-CNN / Faster R-CNN은 연산을 공유하고 Selective Search 대신에 신경망을 사용하여 지역(regions)을 생성함으로써, R-CNN 프레임워크의 속도를 향상시키는 데 집중한다. R-CNN보다 속도와 정확도가 개선되었긴 하나, 여전히 실시간 성능에는 미치지 못한다.
    많은 연구는 DPM 파이프라인의 속도를 올리고자 노력했는데, cascades를 사용한 HOG 연산의 속도를 향상시키고 GPUs 연산을 수행했다. 그러나, 30Hz DPM만 실시간으로 수행이 가능하다.
    YOLO는 탐지 파이프라인의 개별적인 구성 요소들을 최적화하려 하지 않고, 파이프라인을 완전히 벗어나 빠르게 동작하도록 설계했다.

얼굴이나 사람과 같은 단일 클래스의 탐지기(detector)는 최적화가 잘 되는데, 이러한 탐지기는 다룰 수 있는 변형의 정도가 훨씬 적기 때문이다. YOLO는 다양한 객체를 동시에 탐지하도록 학습하는 general purpose detector이다.


6. Conclusion

YOLO는 객체 탐지를 위해 단일화된 모델이다. YOLO 모델은 구성이 단순하고, 전체 이미지를 직접적으로 훈련시킬 수 있다. 분류 기반 접근법과 달리, YOLO는 탐지 성능에 직접 대응하는 손실 함수로 훈련되며, 전체 모델이 공동으로 훈련된다.

Fast YOLO는 문헌에서 가장 빠른 general-purpose의 객체 탐지 모델이고, YOLO는 SOTA 실시간 객체 탐지 모델이다. YOLO는 새로운 도메인에 잘 일반화되며, 빠르고 강건한 객체 탐지에 의존하는 어플리케이션에 이상적이다.

profile
춘식이랑 함께하는 개발일지

0개의 댓글