개요
You Only Look Once: Unified, Real-Time Object Detection 의 얕은 리뷰 포스팅. YOLO의 v1 논문 부터 가장 최신의 YOLOv10까지 포스팅을 적어보면서 YOLO의 시리즈 논문을 포스팅해보면 좋을 것 같다 생각이들어 시작하였습니다.
해당 논문은 CVPR 2016에 발표되었다.
접근
2015년에 등장한 YOLO는 객체 감지의 패러다임을 바꾸기 위한 큰 한방을 시작한 논문으로 기억한다. 기존의 R-CNN 기반의 객체 감지 모델들이 그리드 셀에 대한 selective search
를 사용하여 성능은 좋지만 속도가 느리다는 단점을 가지고 있었고, 이를 해결하기 위해 Fast R-CNN
, Faster R-CNN
의 시리즈가 나왔다. 하지만 이를 Real time 이라고 부르기엔 한 없이 모자른 상황이었다. 이 때 등장한 것이 YOLO였고 최고 성능보다 못 미치는 한계가 있었지만 실시간 객체 감지라는 키워드에 첫 발을 제대로 밟은 논문으로 생각된다.
기존의 DPM, R-CNN 등의 모델이 가지는 큰 특징을 말하면 이는 Multi-stage 모델이라고 볼 수 있겠다. 각각의 방법론이 다르겠지만 물체의 위치를 알아내는 부분과 물체가 무엇인지 알아내는 부분이 다르게 설계되어 있다는 점이다. 각 방법론의 구조에 따라 학습난이도가 상당히 어려워 지기도한다.
Idea and Architecture
기본적으로 YOLO의 핵심 아이디어는 다음과 같다.
하나의 이미지를 $S\times S$ 의 그리드로 나누어 각 그리드마다 바운딩 박스의 좌표 $B$ 와 해당 박스 위치에 대한 confidence를 회귀한다. 또한, 학습하는 전체 클래스의 카테고리에 대한 확률 $C$를 학습하여 한 그리드 셀에 대해 $(B\times 5+C)$ 개의 출력을 내며, 이를 $S*S$ 개 만들어 낸다.
즉 한장의 이미지 입력에 대하여 $S\times S\times(B\times 5+C)$ 개의 출력을 내는 것이다. $B\times 5$ 인 이유는 각 박스 좌표 4개와 박스 위치에 대한 confidence 값까지해서 5개 이다.
여기서 $S=7, B=2$ 의 파라미터 값을 사용하였고, 그 당시 PASCAL VOC 2012 데이터셋을 가지고 학습하였다. 해당 데이터 셋에는 객체 클래스 개수가 20개였으므로, $C=20$ 이 된다. 즉, 한 그리드 셀 당 2개의 바운딩 박스를 출력하며, 해당 박스의 위치가 맞을 확률과, 각 클래스에 대해서 정답일 확률을 출력으로 도출하는 시스템이다.
해당 모델의 아키텍쳐는 다음과 같다.
객체의 위치를 정확히 추출하기 위해서는 이미지의 특징들을 네트워크가 학습해야하고 결국 image feature 추출 능력을 학습하기 위해 해당 네트워크에서 convolution 층들을 ImageNet 데이터를 이용해 pre-train 했다고 한다.
해당 모델 구조를 pytorch
에서 간단히 만들어보았다. 그 과정에서 유의해야 할 점은 모델의 convolution의 stride가 지정되어있는 부분에 대해서 다음 출력으로 shape을 맞추기 위한 padding을 적절히 설정할 것. 그리고 24개의 컨볼루션이 끝난 뒤 FCL로 넘어가기 위해 언급되어 있지 않아도 Flatten 연산을 적절히 넣어주는 것 등이다.
해당 논문이 나올 시기에는 pytorch가 아닌 C언어 기반의 Darknet 프레임워크를 사용했으니 재현되어있는 코드야 많지만 원본 코드는 pytorch로 작성되어있지는 않다.
의의
- 당시의 다른 객체 감지 모델들과 비교해보았을 때 처리량과 성능의 트레이드오프 면에서 좋은 성능을 달성하였다. 일부 R-CNN 계열 모델에서 mAP가 여전히 높은 부분이 있지만 처리량을 생각하면 YOLO가 합리적인 부분이 있다.
- 이미지 전역 정보를 반영하여 추론한다. 기존 모델 들(ex.DPM)의 슬라이딩 윈도우 기법 및 R-CNN의 region proposal 기법 등과 달리 전체 이미지로 부터 객체의 위치를 암묵적으로 처리한다.
- 실험과정에서 예술 데이터 셋에 객체감지 성능을 확인하였는데 어느정도 잘 감지하는 것을 확인하였다. 이를 통해 학습한 도메인으로 부터 일반화 성능이 좋다는 것을 알 수 있다.
번역
Abstract
우리는 YOLO라는 새로운 객체 탐지 방법을 소개합니다. 기존의 객체 탐지 작업은 분류기를 재사용하여 탐지를 수행합니다. 대신에, 우리는 객체 탐지를 공간적으로 분리된 바운딩 박스와 관련된 클래스 확률을 예측하는 회귀 문제로 정의합니다. 단일 신경망이 한 번의 평가로 전체 이미지에서 직접 바운딩 박스와 클래스 확률을 예측합니다. 전체 탐지 파이프라인이 단일 네트워크로 구성되어 있기 때문에, 탐지 성능에 직접적으로 최적화될 수 있습니다. 우리의 통합된 아키텍처는 매우 빠릅니다. 기본 YOLO 모델은 초당 45프레임으로 실시간으로 이미지를 처리합니다. 더 작은 버전의 네트워크인 Fast YOLO는 초당 155프레임이라는 놀라운 속도로 처리하면서도 여전히 다른 실시간 탐지기의 두 배의 mAP를 달성합니다. 최신 탐지 시스템과 비교했을 때, YOLO는 위치 지정 오류(localization errors)가 더 많이 발생하지만 배경에 대한 거짓 긍정(없는데 있다고 하는)을 예측할 가능성은 적습니다. 마지막으로, YOLO는 매우 일반적인 객체 표현을 학습합니다. 자연 이미지부터 예술 작품과 같은 다른 도메인까지, 일반화할 때 DPM 및 R-CNN을 포함한 다른 탐지 방법보다 뛰어납니다.
1. Introduction
인간은 이미지를 한 번 보고 즉시 이미지에 어떤 객체가 있는지, 어디에 있는지, 어떻게 상호작용하는지 알 수 있습니다. 인간의 시각 시스템은 빠르고 정확하여, 운전과 같은 복잡한 작업을 거의 무의식적으로 수행할 수 있게 합니다. 빠르고 정확한 객체 탐지 알고리즘은 컴퓨터가 특수 센서 없이 자동차를 운전하게 하고, 보조 장치가 실시간 장면 정보를 사용자에게 전달할 수 있게 하며, 일반 목적의 반응형 로봇 시스템의 잠재력을 열어줄 것입니다.
현재의 탐지 시스템은 탐지를 수행하기 위해 분류기를 재사용합니다. 객체를 탐지하기 위해 이러한 시스템은 해당 객체의 분류기를 사용하여 테스트 이미지의 다양한 위치와 크기에서 평가합니다. deformable parts models(DPM)과 같은 시스템은 분류기를 전체 이미지의 균등하게 분산된 위치에서 실행하는 슬라이딩 윈도우 방식을 사용합니다 [10].
R-CNN과 같은 최근의 접근 방식은 영역 제안 방법을 사용하여 먼저 이미지에서 잠재적인 바운딩 박스를 생성한 다음 이러한 제안된 박스에 분류기를 실행합니다. 분류 후, 바운딩 박스를 정제하고 중복 탐지를 제거하며 장면의 다른 객체를 기반으로 박스를 재점수화하기 위해 후처리가 사용됩니다 [13]. 이러한 복잡한 파이프라인은 각각의 구성 요소를 개별적으로 훈련해야 하기 때문에 느리고 최적화하기 어렵습니다.
우리는 객체 탐지를 이미지 픽셀에서 바운딩 박스 좌표와 클래스 확률로 직접 연결하는 단일 회귀 문제로 재정의합니다. 우리의 시스템을 사용하면, 이미지를 한 번만 보고(YOLO) 어떤 객체가 있고 어디에 있는지 예측할 수 있습니다.
YOLO는 매우 간단합니다: 그림 1을 보세요. 단일 합성곱 신경망이 동시에 여러 바운딩 박스와 해당 박스의 클래스 확률을 예측합니다. YOLO는 전체 이미지를 학습하고 탐지 성능을 직접 최적화합니다. 이 통합 모델은 전통적인 객체 탐지 방법에 비해 여러 가지 이점이 있습니다.
1. Introduction
YOLO로 이미지를 처리하는 것은 간단하고 직관적입니다. 우리의 시스템은 (1) 입력 이미지를 448 x 448로 크기 조정하고, (2) 단일 합성곱 신경망을 이미지에 실행하며, (3) 모델의 신뢰도로 결과 탐지를 임계값 처리합니다.
첫째, YOLO는 매우 빠릅니다. 우리는 탐지를 회귀 문제로 정의하기 때문에 복잡한 파이프라인이 필요하지 않습니다. 우리는 테스트 시 새로운 이미지에서 신경망을 실행하여 탐지를 예측합니다. 우리의 기본 네트워크는 Titan X GPU에서 배치 처리를 하지 않고 초당 45프레임으로 실행되며, 빠른 버전은 초당 150프레임 이상으로 실행됩니다. 이는 우리가 25밀리초 이하의 지연 시간으로 실시간 스트리밍 비디오를 처리할 수 있음을 의미합니다. 게다가, YOLO는 다른 실시간 시스템의 평균 정밀도의 두 배 이상을 달성합니다. 웹캠에서 실시간으로 실행되는 시스템 데모는 우리의 프로젝트 웹페이지를 참조하세요: http://pjreddie.com/yolo/.
둘째, YOLO는 예측할 때 이미지에 대해 전역적으로 추론합니다. 슬라이딩 윈도우 및 영역 제안 기반 기술과 달리, YOLO는 훈련 및 테스트 시 전체 이미지를 보기 때문에 클래스의 맥락 정보뿐만 아니라 외형에 대한 정보를 암묵적으로 인코딩합니다. Fast R-CNN, 최상위 탐지 방법 [14]은 더 큰 맥락을 볼 수 없기 때문에 이미지에서 배경 패치를 객체로 잘못 인식합니다. YOLO는 Fast R-CNN에 비해 배경 오류 수가 절반 이하입니다.
셋째, YOLO는 객체의 일반화 가능한 표현을 학습합니다. 자연 이미지로 훈련되고 예술 작품에서 테스트되었을 때, YOLO는 DPM 및 R-CNN과 같은 최고 탐지 방법보다 크게 뛰어납니다. YOLO는 높은 일반화 가능성을 가지기 때문에 새로운 도메인이나 예상치 못한 입력에 적용될 때 성능이 떨어질 가능성이 적습니다. YOLO는 여전히 최신 탐지 시스템에 비해 정확도가 뒤처집니다. 이미지에서 객체를 빠르게 식별할 수 있지만, 일부 객체, 특히 작은 객체를 정확하게 위치 지정하는 데 어려움을 겪습니다. 우리는 실험에서 이러한 절충안을 더 자세히 조사합니다.
우리의 모든 훈련 및 테스트 코드는 오픈 소스입니다. 다양한 사전 훈련된 모델도 다운로드할 수 있습니다.
2. Unified Detection
우리는 객체 탐지의 개별 구성 요소를 단일 신경망으로 통합합니다. 우리의 네트워크는 전체 이미지에서 특징을 사용하여 각 바운딩 박스를 예측합니다. 또한 이미지를 위한 모든 클래스에 대해 동시에 모든 바운딩 박스를 예측합니다. 이는 우리의 네트워크가 전체 이미지와 이미지 내 모든 객체에 대해 전역적으로 추론한다는 것을 의미합니다. YOLO 설계는 높은 평균 정밀도를 유지하면서도 종단 간 훈련과 실시간 속도를 가능하게 합니다.
우리의 시스템은 입력 이미지를 $S\times S$ 그리드로 나눕니다. 객체의 중심이 그리드 셀에 포함되면, 해당 그리드 셀이 그 객체를 탐지하는 역할을 합니다.
각 그리드 셀은 $B$ 개의 바운딩 박스와 해당 박스의 신뢰도를 예측합니다. 이러한 신뢰도 점수는 모델이 해당 박스에 객체가 포함되어 있다고 얼마나 확신하는지와 예측한 박스의 정확성을 반영합니다. 공식적으로 신뢰도를 $\text{Pr(Object)}*\text{IOU}^{\text{truth}}_{\text{pred}}$ 로 정의합니다. 해당 셀에 객체가 존재하지 않으면, 신뢰도 점수는 0이 되어야 합니다. 그렇지 않으면, 우리는 신뢰도 점수가 예측된 박스와 실제 값 사이의 교집합 비율(IOU)과 같기를 원합니다.
각 바운딩 박스는 5개의 예측 값으로 구성됩니다: $x,y,w,h$, 그리고 신뢰도. $(x, y)$ 좌표는 그리드 셀의 경계에 상대적인 박스의 중심을 나타냅니다. 너비와 높이는 전체 이미지에 상대적으로 예측됩니다. 마지막으로 신뢰도 예측은 예측된 박스와 실제 박스 사이의 IOU를 나타냅니다.
각 그리드 셀은 또한 $C$ 개의 조건부 클래스 확률 $\text{Pr}(\text{Class}_i|\text{Object})$ 을 예측합니다. 이러한 확률은 그리드 셀이 객체를 포함하고 있는 경우에 조건부입니다. 우리는 그리드 셀당 하나의 클래스 확률 집합만 예측하며, 박스 수 $B$ 와는 상관없습니다.
테스트 시에는 조건부 클래스 확률과 개별 박스 신뢰도 예측을 곱합니다,
이는 각 박스에 대한 클래스별 신뢰도 점수를 제공합니다. 이러한 점수는 박스에 해당 클래스가 나타날 확률과 예측된 박스가 객체에 얼마나 잘 맞는지를 인코딩합니다.
PASCAL VOC에서 YOLO를 평가하기 위해 우리는 $S=7,B=2$를 사용합니다. PASCAL VOC는 20개의 라벨 클래스가 있으므로 $C=20$입니다. 우리의 최종 예측은 $7×7×30$ 텐서입니다.
우리의 시스템은 탐지를 회귀 문제로 모델링합니다. 이미지를 $S×S$ 그리드로 나누고, 각 그리드 셀에 대해 $B$ 개의 바운딩 박스, 해당 박스의 신뢰도, 그리고 $C$ 개의 클래스 확률을 예측합니다. 이러한 예측은 $S×S×(B×5+C)$ 텐서로 인코딩됩니다.
2.1. Network Design
우리는 이 모델을 합성곱 신경망으로 구현하고 PASCAL VOC 탐지 데이터셋 [9]에서 평가합니다. 네트워크의 초기 합성곱 층은 이미지에서 특징을 추출하고 완전 연결 층은 출력 확률과 좌표를 예측합니다.
우리의 네트워크 아키텍처는 이미지 분류를 위한 GoogLeNet 모델 [34]에서 영감을 받았습니다. 우리의 네트워크는 24개의 합성곱 층과 2개의 완전 연결 층으로 구성됩니다. GoogLeNet이 사용하는 인셉션 모듈 대신에, 우리는 Lin 등 [22]과 유사하게 $1×1$ 축소 층과 그 뒤를 잇는 $3×3$ 합성곱 층을 사용합니다. 전체 네트워크는 그림 3에 나와 있습니다.
우리는 빠른 객체 탐지의 한계를 넘어서기 위해 설계된 빠른 버전의 YOLO도 훈련시킵니다. Fast YOLO는 적은 합성곱 층(24개 대신 9개)과 적은 필터를 사용하는 신경망을 사용합니다. 네트워크 크기를 제외하고, 모든 훈련 및 테스트 매개변수는 YOLO와 Fast YOLO 간에 동일합니다. 우리의 네트워크의 최종 출력은 $7×7×30$ 예측 텐서입니다.
우리의 탐지 네트워크는 24개의 합성곱 층과 그 뒤를 잇는 2개의 완전 연결 층으로 구성됩니다. 교대로 배치된 $1×1$ 합성곱 층은 이전 층의 특징 공간을 줄입니다. 우리는 ImageNet 분류 작업에서 합성곱 층을 절반 해상도(입력 이미지 224 \times 224)로 사전 훈련한 다음, 탐지를 위해 해상도를 두 배로 늘립니다.
2.2. Training
우리는 우리의 합성곱 층을 ImageNet 1000-클래스 대회 데이터셋 [30]에서 사전 훈련합니다. 사전 훈련을 위해 우리는 그림 3의 첫 20개 합성곱 층과 평균 풀링 층, 그리고 완전 연결 층을 사용합니다. 우리는 이 네트워크를 약 일주일간 훈련하여 ImageNet 2012 검증 세트에서 88%의 단일 크롭 상위 5위 정확도를 달성했으며, 이는 Caffe의 Model Zoo에 있는 GoogLeNet 모델과 유사합니다 [24]. 우리는 모든 훈련과 추론에 Darknet 프레임워크를 사용합니다 [26].
그런 다음 모델을 탐지를 수행하도록 변환합니다. Ren 등은 사전 훈련된 네트워크에 합성곱 층과 연결 층을 추가하면 성능이 향상될 수 있음을 보여줍니다 [29]. 그들의 예를 따라, 우리는 랜덤으로 초기화된 가중치로 네 개의 합성곱 층과 두 개의 완전 연결 층을 추가합니다. 탐지는 종종 세밀한 시각적 정보를 필요로 하므로 우리는 네트워크의 입력 해상도를 224 × 224에서 448 × 448로 증가시킵니다.
우리의 최종 층은 클래스 확률과 바운딩 박스 좌표를 모두 예측합니다. 우리는 바운딩 박스의 너비와 높이를 이미지의 너비와 높이로 정규화하여 0과 1 사이에 위치하도록 합니다. 우리는 최종 층에 선형 활성화 함수를 사용하고 다른 모든 층에는 다음과 같은 Leaky Rectified Linear Activation을 사용합니다:
우리는 모델 출력의 합제곱 오차를 최적화합니다. 우리는 합제곱 오차가 최적화하기 쉽기 때문에 사용하지만, 이는 평균 정밀도를 최대화하려는 목표와 완벽하게 일치하지 않습니다. 이는 위치 오류와 분류 오류에 동일한 가중치를 부여하는데, 이는 이상적이지 않을 수 있습니다. 또한, 모든 이미지에서 많은 그리드 셀은 어떤 객체도 포함하지 않습니다. 이는 해당 셀의 “신뢰도” 점수를 0에 가깝게 밀어내며, 종종 객체를 포함한 셀의 그래디언트를 압도합니다. 이는 모델의 불안정성을 초래하여 훈련이 초기에 수렴하지 못하게 할 수 있습니다.
이를 해결하기 위해, 우리는 바운딩 박스 좌표 예측의 손실을 증가시키고 객체를 포함하지 않는 박스의 신뢰도 예측 손실을 감소시킵니다. 이를 달성하기 위해 우리는 두 개의 파라미터 $\lambda_{coord}$ 와 $\lambda_{noobj}$ 를 사용합니다. 우리는 $\lambda_{coord}= 5$ 와 $\lambda_{noobj}=0.5$ 로 설정합니다.
합제곱 오차는 큰 박스와 작은 박스의 오류에 동일한 가중치를 부여합니다. 우리의 오류 측정치는 큰 박스에서의 작은 편차가 작은 박스에서보다 덜 중요함을 반영해야 합니다. 이를 부분적으로 해결하기 위해 우리는 너비와 높이 대신에 바운딩 박스 너비와 높이의 제곱근을 예측합니다.
YOLO는 그리드 셀당 여러 개의 바운딩 박스를 예측합니다. 훈련 시 우리는 각 객체에 대해 하나의 바운딩 박스 예측기만 책임지기를 원합니다. 우리는 현재 IOU가 가장 높은 예측을 기준으로 객체를 예측할 “책임” 예측기를 할당합니다. 이는 바운딩 박스 예측기들 간의 특화를 초래합니다. 각 예측기는 특정 크기, 가로 세로 비율 또는 객체의 클래스를 예측하는 데 더 능숙해져서 전체 재현율이 향상됩니다.
훈련 중에 우리는 다음의 다중 부분 손실 함수를 최적화합니다:
\[\lambda_\text{coord} \Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B} \mathbb{1}_{ij}^\text{obj}[(x_i-\hat{x}_i)^2 (y_i-\hat{y}_i)^2] \\ + \lambda_\text{coord} \Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B} \mathbb{1}_{ij}^\text{obj}[(\sqrt{w_i}-\sqrt{\hat{w}_i})^2+(\sqrt{h_i}-\sqrt{\hat{h}_i})^2] \\ + \Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B} \mathbb{1}_{ij}^\text{obj} (C_i -\hat{C}_i)^2 \\ + \lambda_{\text{noobj}} \Sigma_{i=0}^{S^2}\Sigma_{j=0}^{B} \mathbb{1}_{ij}^\text{noobj}(C_i - \hat{C}_i)^2 \\ + \Sigma_{i=0}^{S^2} \mathbb{1}_{i}^\text{obj} \Sigma_{c \in \text{classes}} (p_i(c)-\hat{p}_i(c))^2\],여기서 $\mathbb{1}_i^\text{obj}$ 는 객체가 셀 $i$ 에 나타나는 경우를 나타내고, $\mathbb{1}_{ij}^\text{obj}$ 는 셀 $i$의 $j$ 번째 바운딩 박스 예측기가 해당 예측에 대해 “책임이 있는” 경우를 나타냅니다.
손실 함수는 객체가 해당 그리드 셀에 있는 경우에만 분류 오류에 패널티를 부과합니다 (따라서 앞서 논의한 조건부 클래스 확률). 또한 해당 예측기가 실제 값 박스에 대해 “책임이 있는” 경우에만 바운딩 박스 좌표 오류에 패널티를 부과합니다 (즉, 해당 그리드 셀의 모든 예측기 중 가장 높은 IOU를 가짐).
우리는 PASCAL VOC 2007 및 2012의 훈련 및 검증 데이터 세트에서 약 135 에포크 동안 네트워크를 훈련시킵니다. 2012년 데이터를 테스트할 때 우리는 VOC 2007 테스트 데이터를 훈련에 포함시킵니다. 훈련 전체에서 우리는 배치 크기 64, 모멘텀 0.9, 그리고 0.0005의 감쇠를 사용합니다.
우리의 학습률 일정은 다음과 같습니다: 첫 번째 에포크에서는 학습률을 $10^{−3}$ 에서 $10^{-2}$ 로 천천히 올립니다. 높은 학습률에서 시작하면 우리의 모델은 불안정한 그래디언트 때문에 종종 수렴하지 않습니다. 우리는 75 에포크 동안 $10^{−2}$ 로 훈련을 계속하고, 그 다음 30 에포크 동안 $10^{−3}$, 마지막으로 30 에포크 동안 $10^{-4}$ 로 훈련을 진행합니다.
과적합을 피하기 위해 우리는 드롭아웃과 광범위한 데이터 증강을 사용합니다. 첫 번째 연결 층 뒤에 드롭아웃 비율 .5를 사용하여 층 간의 공동 적응을 방지합니다 [18]. 데이터 증강을 위해 우리는 원본 이미지 크기의 최대 20%까지 무작위 크기 조정 및 변환을 도입합니다. 또한 우리는 HSV 색 공간에서 노출과 채도를 최대 1.5배까지 무작위로 조정합니다.
2.3. Inference
훈련과 마찬가지로, 테스트 이미지에 대한 탐지를 예측하는 데는 단 하나의 네트워크 평가만 필요합니다. PASCAL VOC에서 네트워크는 이미지당 98개의 바운딩 박스와 각 박스의 클래스 확률을 예측합니다. YOLO는 분류기 기반 방법과 달리 단일 네트워크 평가만 필요하므로 테스트 시 매우 빠릅니다.
그리드 설계는 바운딩 박스 예측에서 공간적 다양성을 강화합니다. 종종 객체가 어느 그리드 셀에 속하는지 명확하며, 네트워크는 각 객체에 대해 하나의 박스만 예측합니다. 그러나, 일부 큰 객체나 여러 셀의 경계 근처에 있는 객체는 여러 셀이 잘 위치를 지정할 수 있습니다. 비최대 억제(non-maximal suppression)를 사용하여 이러한 다중 탐지를 수정할 수 있습니다. R-CNN이나 DPM만큼 성능에 중요하지는 않지만, 비최대 억제는 mAP를 2-3% 증가시킵니다.
2.4. Limitations of YOLO
YOLO는 각 그리드 셀이 두 개의 박스만 예측하고 하나의 클래스만 가질 수 있기 때문에 바운딩 박스 예측에 강력한 공간 제약을 부여합니다. 이 공간 제약은 모델이 예측할 수 있는 인접 객체의 수를 제한합니다. 우리의 모델은 새 떼와 같이 그룹으로 나타나는 작은 객체를 다루는 데 어려움을 겪습니다.
우리의 모델은 데이터로부터 바운딩 박스를 예측하도록 학습하기 때문에 새로운 또는 비정상적인 종횡비나 구성을 가진 객체에 대해 일반화하는 데 어려움을 겪습니다. 우리의 모델은 입력 이미지에서 여러 다운샘플링 층을 가지기 때문에 바운딩 박스를 예측하기 위해 상대적으로 조잡한 특징을 사용합니다.
마지막으로, 우리는 탐지 성능을 근사하는 손실 함수로 훈련하지만, 우리의 손실 함수는 작은 바운딩 박스와 큰 바운딩 박스에서 오류를 동일하게 처리합니다. 큰 박스에서의 작은 오류는 일반적으로 무해하지만, 작은 박스에서의 작은 오류는 IOU에 훨씬 큰 영향을 미칩니다. 우리의 주요 오류 원인은 잘못된 위치 지정입니다.
3. Comparison to Other Detection Systems
객체 탐지는 컴퓨터 비전의 핵심 문제입니다. 탐지 파이프라인은 일반적으로 입력 이미지에서 강력한 특징 세트를 추출하는 것으로 시작합니다 (Haar [25], SIFT [23], HOG [4], 합성곱 특징 [6]). 그런 다음, 분류기 [36, 21, 13, 10] 또는 로컬라이저 [1, 32]를 사용하여 특징 공간에서 객체를 식별합니다. 이러한 분류기 또는 로컬라이저는 전체 이미지에서 슬라이딩 윈도우 방식으로 실행되거나 이미지의 일부 영역에서 실행됩니다 [35, 15, 39]. 우리는 YOLO 탐지 시스템을 여러 상위 탐지 프레임워크와 비교하여 주요 유사점과 차이점을 강조합니다.
Deformable parts models
변형 가능한 부분 모델(DPM)은 객체 탐지에 슬라이딩 윈도우 접근 방식을 사용합니다 [10]. DPM은 정적 특징을 추출하고, 영역을 분류하며, 높은 점수 영역에 대한 바운딩 박스를 예측하는 등의 분리된 파이프라인을 사용합니다. 우리의 시스템은 이러한 모든 이질적인 부분을 단일 합성곱 신경망으로 대체합니다. 네트워크는 특징 추출, 바운딩 박스 예측, 비최대 억제 및 맥락적 추론을 동시에 수행합니다. 정적 특징 대신, 네트워크는 특징을 인라인으로 훈련하고 탐지 작업에 맞게 최적화합니다. 우리의 통합된 아키텍처는 DPM보다 더 빠르고 정확한 모델을 만듭니다.
R-CNN
R-CNN 및 그 변형은 이미지에서 객체를 찾기 위해 슬라이딩 윈도우 대신 영역 제안을 사용합니다. Selective Search [35]는 잠재적인 바운딩 박스를 생성하고, 합성곱 신경망이 특징을 추출하며, SVM이 박스의 점수를 매기고, 선형 모델이 바운딩 박스를 조정하고, 비최대 억제가 중복 탐지를 제거합니다. 이 복잡한 파이프라인의 각 단계는 독립적으로 정밀하게 조정되어야 하며, 그 결과 시스템은 매우 느려서 테스트 시 이미지당 40초 이상 걸립니다 [14].
YOLO는 R-CNN과 몇 가지 유사점을 공유합니다. 각 그리드 셀은 잠재적인 바운딩 박스를 제안하고 합성곱 특징을 사용하여 해당 박스에 점수를 매깁니다. 그러나 우리의 시스템은 그리드 셀 제안에 공간적 제약을 두어 동일한 객체의 다중 탐지를 완화합니다. 우리의 시스템은 또한 훨씬 적은 바운딩 박스를 제안하며, 이미지당 약 2000개의 Selective Search와 비교하여 98개만 제안합니다. 마지막으로 우리의 시스템은 이러한 개별 구성 요소를 하나의 공동 최적화된 모델로 결합합니다.
Other Fast Detectors
Fast 및 Faster R-CNN은 Selective Search 대신 계산을 공유하고 신경망을 사용하여 영역을 제안함으로써 R-CNN 프레임워크를 가속화하는 데 중점을 둡니다 [14] [28]. 이들은 R-CNN보다 속도와 정확성의 개선을 제공하지만, 둘 다 여전히 실시간 성능에는 미치지 못합니다.
많은 연구 노력은 DPM 파이프라인을 가속화하는 데 중점을 둡니다 [31] [38] [5]. 그들은 HOG 계산을 가속화하고, 캐스케이드를 사용하며, 계산을 GPU로 전송합니다. 그러나 실제로 30Hz DPM [31]만이 실시간으로 실행됩니다.
큰 탐지 파이프라인의 개별 구성 요소를 최적화하려고 시도하는 대신, YOLO는 파이프라인을 완전히 제거하고 설계상 빠릅니다.
얼굴이나 사람과 같은 단일 클래스에 대한 탐지기는 훨씬 적은 변화를 처리해야 하기 때문에 고도로 최적화될 수 있습니다 [37]. YOLO는 다양한 객체를 동시에 탐지하는 법을 배우는 범용 탐지기입니다.
Deep MultiBox
R-CNN과 달리, Szegedy 등은 Selective Search 대신 관심 영역을 예측하기 위해 합성곱 신경망을 훈련시킵니다 [8]. MultiBox는 신뢰도 예측을 단일 클래스 예측으로 교체하여 단일 객체 탐지를 수행할 수 있습니다. 그러나 MultiBox는 일반 객체 탐지를 수행할 수 없으며 여전히 더 큰 탐지 파이프라인의 일부로서 이미지 패치 분류를 위한 추가 추론이 필요합니다. YOLO와 MultiBox는 모두 합성곱 신경망을 사용하여 이미지에서 바운딩 박스를 예측하지만, YOLO는 완전한 탐지 시스템입니다.
OverFeat
Sermanet 등은 합성곱 신경망을 훈련시켜 위치를 지정하고, 해당 위치 지정자를 탐지 작업에 맞추도록 조정합니다 [32]. OverFeat는 슬라이딩 윈도우 탐지를 효율적으로 수행하지만 여전히 분리된 시스템입니다. OverFeat는 탐지 성능이 아닌 위치 지정을 최적화합니다. DPM과 마찬가지로, 위치 지정자는 예측할 때 로컬 정보만 봅니다. OverFeat는 전역 맥락을 이해할 수 없으므로 일관된 탐지를 위해 상당한 후처리가 필요합니다.
MultiGrasp
우리의 작업은 Redmon 등 [27]의 그립 탐지 작업과 설계에서 유사합니다. 우리의 바운딩 박스 예측에 대한 그리드 접근 방식은 그립 회귀를 위한 MultiGrasp 시스템을 기반으로 합니다. 그러나 그립 탐지는 객체 탐지보다 훨씬 간단한 작업입니다. MultiGrasp는 하나의 객체를 포함하는 이미지에 대해 단일 잡을 수 있는 영역만 예측하면 됩니다. 객체의 크기, 위치 또는 경계를 추정하거나 클래스를 예측할 필요가 없으며, 단지 잡기에 적합한 영역을 찾기만 하면 됩니다. YOLO는 이미지 내 여러 클래스의 여러 객체에 대한 바운딩 박스와 클래스 확률을 예측합니다.
4. Experiments
먼저 우리는 YOLO를 PASCAL VOC 2007에서 다른 실시간 탐지 시스템과 비교합니다. YOLO와 R-CNN 변형 간의 차이를 이해하기 위해 우리는 YOLO와 Fast R-CNN이 만든 VOC 2007에서의 오류를 탐구합니다. Fast R-CNN은 R-CNN의 가장 높은 성능 버전 중 하나입니다 [14]. 다양한 오류 프로파일을 기반으로 우리는 YOLO가 Fast R-CNN 탐지를 재점수화하고 배경 거짓 양성 오류를 줄이는 데 사용될 수 있음을 보여주어 상당한 성능 향상을 제공합니다. 우리는 또한 VOC 2012 결과를 제시하고 현재 최첨단 방법과 mAP를 비교합니다. 마지막으로, 우리는 YOLO가 다른 탐지기들보다 두 개의 예술 작품 데이터셋에서 새로운 도메인으로 더 잘 일반화됨을 보여줍니다.
4.1. Comparison to Other Real-Time Systems
객체 탐지에서 많은 연구 노력은 표준 탐지 파이프라인을 빠르게 만드는 데 중점을 둡니다. [5] [38] [31] [14] [17] [28] 그러나 Sadeghi 등만이 실제로 실시간으로 실행되는 탐지 시스템을 만듭니다 (초당 30프레임 또는 그 이상) [31]. 우리는 YOLO를 30Hz 또는 100Hz로 실행되는 DPM의 GPU 구현과 비교합니다. 다른 노력들이 실시간 마일스톤에 도달하지 못하더라도 우리는 객체 탐지 시스템에서 사용 가능한 정확도-성능 절충안을 조사하기 위해 상대적인 mAP와 속도를 비교합니다.
Fast YOLO는 PASCAL에서 가장 빠른 객체 탐지 방법입니다. 우리가 아는 한, 이것은 현재 존재하는 가장 빠른 객체 탐지기입니다. 52.7% mAP로, 이전 실시간 탐지 작업보다 두 배 이상 정확합니다. YOLO는 여전히 실시간 성능을 유지하면서 mAP를 63.4%까지 끌어올립니다.
우리는 또한 VGG-16을 사용하여 YOLO를 훈련시킵니다. 이 모델은 더 정확하지만 YOLO보다 훨씬 느립니다. 이것은 VGG-16에 의존하는 다른 탐지 시스템과의 비교에 유용하지만, 실시간보다 느리기 때문에 논문의 나머지는 더 빠른 모델에 중점을 둡니다.
가장 빠른 DPM은 mAP를 많이 희생하지 않고 효과적으로 DPM을 가속하지만 여전히 실시간 성능에 두 배 정도 미치지 못합니다 [38]. 또한 신경망 접근 방식에 비해 DPM의 상대적으로 낮은 탐지 정확도로 인해 제한됩니다.
R-CNN minus R은 Selective Search를 정적 바운딩 박스 제안으로 대체합니다 [20]. R-CNN보다 훨씬 빠르지만 여전히 실시간에 미치지 못하며, 좋은 제안이 없어서 정확도가 크게 떨어집니다.
Fast R-CNN은 R-CNN의 분류 단계를 가속하지만 여전히 선택적 검색에 의존하여 바운딩 박스 제안을 생성하는 데 이미지당 약 2초가 걸립니다. 따라서 높은 mAP를 가지고 있지만 0.5 fps에서는 여전히 실시간과는 거리가 멉니다.
최근의 Faster R-CNN은 Szegedy 등 [8]과 유사하게 바운딩 박스를 제안하기 위해 선택적 검색을 신경망으로 대체합니다. 우리의 테스트에서, 가장 정확한 모델은 7 fps를 달성하는 반면, 더 작고 덜 정확한 모델은 18 fps로 실행됩니다. Faster R-CNN의 VGG-16 버전은 mAP가 10 더 높지만 YOLO보다 6배 더 느립니다. Zeiler-Fergus Faster R-CNN은 YOLO보다 2.5배 느리지만 정확도는 더 낮습니다.
4.2. VOC 2007 Error Analysis
YOLO와 최첨단 탐지기 간의 차이를 더 자세히 조사하기 위해, 우리는 VOC 2007에서의 결과를 상세히 분석합니다. 우리는 YOLO를 Fast R-CNN과 비교하는데, Fast R-CNN은 PASCAL에서 가장 성능이 높은 탐지기 중 하나이며, 그 탐지 결과가 공개적으로 이용 가능합니다.
우리는 Hoiem 등 [19]의 방법론과 도구를 사용합니다. 테스트 시 각 카테고리에 대해 해당 카테고리의 상위 N 예측을 살펴봅니다. 각 예측은 정확하거나 오류 유형에 따라 분류됩니다:
- Correct: 올바른 클래스 및 IOU > .5
- Localization: 올바른 클래스, .1 < IOU < .5
- Similar: 클래스가 유사함, IOU > .1
- Other: 클래스가 잘못됨, IOU > .1
- Background: 모든 객체에 대해 IOU < .1
그림 4는 모든 20개 클래스에 걸쳐 각 오류 유형의 평균 분포를 보여줍니다.
YOLO는 객체를 정확하게 위치 지정하는 데 어려움을 겪습니다. 위치 지정 오류는 모든 다른 출처를 합친 것보다 더 많은 YOLO의 오류를 차지합니다. Fast R-CNN은 위치 지정 오류는 훨씬 적지만 배경 오류는 훨씬 많습니다. 상위 탐지 중 13.6%는 객체를 포함하지 않는 거짓 긍정입니다. Fast R-CNN은 YOLO보다 배경 탐지를 예측할 가능성이 거의 3배 더 높습니다.
4.3. Combining Fast R-CNN and YOLO
YOLO는 Fast R-CNN보다 훨씬 적은 배경 오류를 발생시킵니다. Fast R-CNN의 배경 탐지를 제거하기 위해 YOLO를 사용하면 성능이 크게 향상됩니다. R-CNN이 예측한 모든 바운딩 박스에 대해 YOLO가 유사한 박스를 예측하는지 확인합니다. 만약 그렇다면, 우리는 YOLO가 예측한 확률과 두 박스 간의 겹침을 기반으로 해당 예측에 가중치를 부여합니다.
최고의 Fast R-CNN 모델은 VOC 2007 테스트 세트에서 71.8%의 mAP를 달성합니다. YOLO와 결합하면, mAP가 3.2% 증가하여 75.0%가 됩니다. 우리는 또한 최고의 Fast R-CNN 모델을 여러 다른 버전의 Fast R-CNN과 결합해 보았습니다. 이러한 앙상블은 mAP에서 0.3%에서 0.6% 사이의 작은 증가를 나타냈으며, 자세한 내용은 표 2를 참조하십시오.
YOLO에서의 성능 향상은 모델 앙상블의 부산물이 아닙니다. 왜냐하면 Fast R-CNN의 다른 버전을 결합하는 데서 얻을 수 있는 이점이 거의 없기 때문입니다. 오히려, 이는 YOLO가 테스트 시 다른 종류의 실수를 하기 때문에 Fast R-CNN의 성능을 향상시키는 데 매우 효과적입니다.
불행히도, 우리는 각 모델을 개별적으로 실행한 후 결과를 결합하기 때문에 이 조합은 YOLO의 속도에서 이점을 얻지 못합니다. 그러나 YOLO가 매우 빠르기 때문에 Fast R-CNN과 비교할 때 유의미한 계산 시간을 추가하지 않습니다.
4.4. VOC 2012 Results
VOC 2012 테스트 세트에서, YOLO는 57.9%의 mAP를 기록합니다. 이것은 현재 최첨단 기술보다 낮으며, VGG-16을 사용하는 원래 R-CNN에 더 가깝습니다. 표 3을 참조하십시오. 우리의 시스템은 가장 가까운 경쟁자들과 비교하여 작은 객체를 다루는 데 어려움을 겪습니다. 병, 양, TV/모니터와 같은 카테고리에서 YOLO는 R-CNN 또는 Feature Edit보다 8-10% 낮은 점수를 기록합니다. 그러나 고양이와 기차와 같은 다른 카테고리에서는 YOLO가 더 높은 성능을 달성합니다.
우리의 결합된 Fast R-CNN + YOLO 모델은 가장 높은 성능을 보이는 탐지 방법 중 하나입니다. Fast R-CNN은 YOLO와의 결합으로 2.3%의 향상을 얻어, 공개 리더보드에서 5단계 상승합니다.
4.5. Generalizability: Person Detection in Artwork
객체 탐지를 위한 학술 데이터셋은 훈련 및 테스트 데이터를 동일한 분포에서 가져옵니다. 실제 응용에서는 모든 가능한 사용 사례를 예측하기 어렵고 테스트 데이터가 시스템이 이전에 본 것과 다를 수 있습니다 [3]. 우리는 Picasso Dataset [12] 및 People-Art Dataset [3]에서 YOLO를 다른 탐지 시스템과 비교합니다. 이는 예술 작품에서 사람 탐지를 테스트하기 위한 두 가지 데이터셋입니다.
그림 5는 YOLO와 다른 탐지 방법 간의 성능 비교를 보여줍니다. 참조를 위해, 우리는 모든 모델이 VOC 2007 데이터로만 훈련된 VOC 2007에서 사람에 대한 탐지 AP를 제공합니다. Picasso 모델은 VOC 2012에서 훈련되고, People-Art에서는 VOC 2010에서 훈련됩니다.
R-CNN은 VOC 2007에서 높은 AP를 가지고 있습니다. 그러나 R-CNN은 예술 작품에 적용될 때 상당히 떨어집니다. R-CNN은 자연 이미지를 위해 조정된 바운딩 박스 제안을 위해 Selective Search를 사용합니다. R-CNN의 분류 단계는 작은 영역만 보고 좋은 제안이 필요합니다.
DPM은 예술 작품에 적용될 때 AP를 잘 유지합니다. 이전 작업에서는 DPM이 객체의 형태와 레이아웃에 대한 강력한 공간 모델을 가지고 있기 때문에 잘 수행된다고 이론화합니다. DPM이 R-CNN만큼 많이 저하되지는 않지만, 더 낮은 AP에서 시작합니다.
YOLO는 VOC 2007에서 좋은 성능을 보이며, 예술 작품에 적용될 때 다른 방법보다 AP가 덜 저하됩니다. DPM과 마찬가지로, YOLO는 객체의 크기와 형태뿐만 아니라 객체 간의 관계와 객체가 일반적으로 나타나는 위치를 모델링합니다. 예술 작품과 자연 이미지는 픽셀 수준에서는 매우 다르지만, 객체의 크기와 형태 측면에서는 유사하기 때문에 YOLO는 여전히 좋은 바운딩 박스와 탐지를 예측할 수 있습니다.
5. Real-Time Detection In The Wild
YOLO는 빠르고 정확한 객체 탐지기로, 컴퓨터 비전 응용에 이상적입니다. 우리는 YOLO를 웹캠에 연결하고, 카메라에서 이미지를 가져오고 탐지를 표시하는 시간을 포함하여 실시간 성능을 유지하는지 확인합니다.
그 결과 시스템은 상호작용적이고 매력적입니다. YOLO는 개별적으로 이미지를 처리하지만, 웹캠에 연결되면 객체가 이동하고 외형이 변할 때 추적 시스템처럼 작동합니다. 시스템 데모와 소스 코드는 프로젝트 웹사이트에서 찾을 수 있습니다: http://pjreddie.com/yolo/.
6. Conclusion
우리는 객체 탐지를 위한 통합 모델인 YOLO를 소개합니다. 우리의 모델은 구성하기 간단하며 전체 이미지에 대해 직접 훈련될 수 있습니다. 분류기 기반 접근법과 달리, YOLO는 탐지 성능에 직접적으로 대응하는 손실 함수로 훈련되며 전체 모델이 공동으로 훈련됩니다.
Fast YOLO는 문헌에서 가장 빠른 범용 객체 탐지기이며, YOLO는 실시간 객체 탐지에서 최첨단 기술을 추진합니다. YOLO는 또한 새로운 도메인에 잘 일반화되어, 빠르고 견고한 객체 탐지에 의존하는 응용에 이상적입니다.
Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi, You Only Look Once: Unified, Real-Time Object Detection
댓글남기기