열심히 코딩 하숭!

You Only Look Once: Unified, Real-Time Object Detection(2015) | Paper review 본문

paper review

You Only Look Once: Unified, Real-Time Object Detection(2015) | Paper review

채숭이 2024. 6. 6. 23:05

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

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

 

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

We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabili

arxiv.org

 

컴퓨터 비전 스터디를 통해 책 한 권을 끝내고, 남은 주차 동안 YOLO에 대해 알아보는 시간을 가졌다.

YOLO를 알고는 있었지만 구체적인 과정에 대해 알지 못 하고 있던터라, 즐거운 마음으로! 논문을 읽고 정리하였다

 

베이직한 개념부터 알아가기 위해 해당 논문을 선택하여 스터디하였다

 


 

Abstract (요약)

기존 연구

  • 기존 연구에서는 classifier를 사용하여 매우 복잡하게 탐지 과정을 수행

YOLO 소개

  • YOLO는 공간적으로 분리된 bounding box들, 그리고 그와 관련 class 확률에 대한 회귀 문제로 객체 탐지를 프레임화 한다

YOLO 특징

  • 단일 뉴럴 네트워크를 활용하여 한 번의 평가로 예측 수행이 가능하다
  • 직접 end-to-end단일 네트워크에서 예측을 수행하기 때문에 감지 성능을 최적화 할 수 있다
📍 단일 네트워크의 장점
  • 처리 과정에서 발생할 수 있는 정보의 손실을 최소화하고 성능을 극대화할 수 있음
  • 직접적인 구조와 간단한 출력 계층 덕분에, 비디오 스트림과 같은 실시간 데이터에 대해 빠르고 효과적인 객체 탐지 성능을 발휘할 수 있음
  • YOLO는 매우 일반적인 객체의 표현에 대해 학습한다

YOLO 성능

  • unified detection(통합 탐지) 기능은 매우 빠름
    • 기본 YOLO 모델을 통해 초당 45 frames의 속도로 실시간 이미지 처리를 할 수 있다
  • Fast YOLO는 초당 155frames의 놀라운 속도를 처리하면서도, 다른 탐지기의 두배에 해당하는 mAP를 달성한다 
📍 mAP란?
  • Mean Average Precision: 모든 클래스에 대한 Precision(정밀도)의 평균
    -> 모델이 객체를 얼마나 잘 탐지하는지를 종합적으로 나타내는 평가지표

 

  • 다른 탐지 시스템들과 비교했을 때, YOLO는 (1) 더 많은 Localization 오류가 있지만 (2) false positives로 예측하는 경우는 매우 낮다
📍 Localization(지역화) 오류
  • 객체의 위치를 정확하게 판단하지 못하는 오류
📍 false positive로 예측하는 확률이 매우 낮다
  • 실제로 객체가 존재하지 않는데 객체가 있다고 잘못 판단하는 경우(거짓 긍정 오류)가 드물다는 말

 

1. Introduction (서론)

 

과거

  • 과거의 탐지 시스템은 test 이미지에 있는 다양한 위치와 다양한 크기를 평가하여 물체를 분류함
    • ex) DPM(Deformable Parts Model)은 sliding window를 사용하며 classifier를 이미지 전체에 고르게 (모두) 시행한다
    • ex) 그보다 최근의 접근 방식인 R-CNN 같은 경우, 먼저 이미지 내에서 잠재적인 bounding box를 생성한 후, 제안된 box들 내에서 분류기를 시행한다 → (region proposal을 하고 proposal에서 분류를 해야하기 땜에 느림)
    • 분류 후에는 후처리를 통해 bounding box를 정제하고 중복 탐지를 제거하며 해당 이미지의 다른 객체들을 바탕으로 box들을 다시 점수화한다

⇒ 이와 같이 복잡한 파이프라인은 각각 개별 구성 요소를 따로 훈련시켜야 하기 때문에 최적화하기 어렵고 속도가 느리다

 

YOLO의 등장

  • YOLO: Detection을 하나의 회귀 문제로 생각하고, 바로 bounding box와 물체 클래스의 확률을 회귀로 예측한다
  • 이미지를 한 번만 봐도!(You Only Look Once) 그 이미지에서 어떤 객체들이 존재하는지와 그 위치를 예측할 수 있게 되는 것이다
  • Fig 1.을 통해 알 수 있듯이 단일 합성곱 신경망이 동시에 여러개의 box와 그 상자들의 class 확률을 예측한다

(1) 입력이미지를 448 x 448 크기로 조정 (2) 이미지에 단일 합성곱 신경망 적용 (3) 모델의 확신도에 따라 탐지 결과를 처리

 

 

YOLO의 이점 3가지

 

1) 매우 빠르다!

2) 이미지를 전체적으로 본다!

  • 맥락적 정보와 외형을 암묵적으로 파악할 수 있다 (Fast R-CNN와 같은 탐지 방법들은 이미지의 배경을 객체로 오인한다)

3) 객체의 보편적인 형태를 잘 학습한다

  • 그러나 정확도 면에서, 작은 객체의 정확한 위치 파악에 어려움을 겪기 때문에 이에 대한 절충안을 실험에서 더 자세히 조사할 예정이라고 한다~

 

  •  

2. Unified Detection (통합 탐지)

YOLO란?

  • YOLO는 객체 탐지의 개별 구성 요소를 단일 신경망으로 통합한다
  • 네트워크에서 전체 이미지와 이미지 속 모든 객체에 대해 global(전역적으로) 추론
  • 끝까지 end-to-end로 하나의 과정으로 훈련 가능하며 real-time에 대해 높은 정밀도를 유지

YOLO의 시스템

  • (1) 입력 이미지를 S x S 그리드로 나눈다
  • (2) 신경망을 통해 이미지에서 특징을 추출한다
  • (3) 각 그리드 셀에 대해 여러 바운딩 박스와 박스들의 confidence score(신뢰 점수) 그리고 해당 셀의 class 확률을 예측한다
  • (4) 각 바운딩 박스 중 객체 존재 확률과 박스의 정확도가 미리 정한 임계값 이상인 박스만 선택
  • (5) 선택된 바운딩 박스 중 겹치는 박스를 제거하고 가장 신뢰도가 높은 박스만 남긴다 [비최대 억제(Non-Maximum Suppression, NMS)]
  • (6) 최종적으로 남은 바운딩 박스와 해당 객체의 클래스를 결과로 출력한다

1-1) bounding box 계산 - 박스 범위 예측

  • bounding box는 5가지 예측으로 구성 → x, y, w, h, 신뢰도
    • (x, y) 좌표: grid 셀에서의 위치 좌표
    • (w, h): 전체 이미지를 기준으로 너비와 높이
    • 신뢰: 예측된 박스와 실제 박스 사이의 IOU

1-2) bounding box 계산 - Confidence score (신뢰 점수)

  • 신뢰도 ⇒ 모델이 객체를 얼만큼 가지고 있는지, 박스가 예측한대로가 맞을지에 대한 확신
    • Pr(Object) → 해당 박스 내에 객체가 존재할 확률
    • IOU truth_pred → 예측된 bounding box와 실제 객체 bounding box의 교집합 비율
    • 셀에 객체가 존재하지 않을 경우 신뢰도 점수는 0이 된다
    • 객체가 존재할 경우 Pr(Object)는 1 또는 1에 가까운 값이 되므로, IOU값이 높을수록 높은 신뢰도를 가지게 됨

 

2) class 확률 계산 - 조건부 클래스 확률 (class probabilities)

  • 각 grid들은 조건부 확률 C를 예측하여 구한다
  • 특정 grid 셀에 객체가 존재한다는 조건 하에, 그 객체가 Class i에 속할 확률!
    • 예를 들어) 그리드 셀에 객체가 있을 경우, 그 객체가 ‘고양이’ 클래스에 속할 확률

  • grid에 몇개의 box가 들어가든 상관없이, grid 셀 내에 객체가 존재할 경우 그 객체가 각 클래스에 속할 확률을 구함
  • 각 그리드 셀 내의 모든 바운딩 박스는 동일한 클래스 확률 세트를 공유함
    • ex) 하나의 그리드 셀에서 3개의 바운딩 박스를 예측하더라도 ‘고양이’, ‘개’, ‘차’ 등 각 클래스에 대한 확률은 그리드 셀 단위로 한 번만 계산되고 모든 바운딩 박스는 같은 확률을 사용하게 됨
  • 한 grid에 대해 class 마다의 Pr(class i | object) 값의 합은 1이다 ⭐

 

각 box에 대한 클래스별 신뢰도 계산

  • 이후, test 시 그리드 셀의 조건부 class 확률과 각 box의 신뢰도 예측을 곱하여, 각 box에 대한 특정 클래스별 신뢰도 점수를 산출

 

 

⇒ 이미지를 S x S로 나누고 각 cell마다 B bounding box, 박스마다의 신뢰도, C class probabilities를 구함

                → 이는 S x S x (B * 5 + C) 의 텐서로 표현됨

(PASCAL VOC에서 YOLO를 평가하기 위해 S=7, B=2를 사용한다. PASCAL VOC에는 20개의 레이블이 지정된 클래스가 있으므로 C=20이다. 최종 예측은 7∗7∗30(box 2개의 좌표(42)+신뢰점수(12)+20개 클래스) tensor로 표현된다.)

📍 예측 차원 계산
  • S X S개의 그리드 각 하나씩마다
  • 박스 당 5개의 정보(x,y,w,h,신뢰도)를 계산하고
  • 또 그와 별개로 셀별로 조건부 클래스도 계산
  • 그래서 이렇게 3차원으로 표현된 텐서로 나타낼 수 있게 됨! 

 

2.1. Network Design (네트워크 설계)

 

설계

  • convolutional layer에서는 이미지의 특징을 추출하고 fully connected layer에서는 출력 확률과 좌표를 예측한다 (GoogLeNet 아키텍처 활용)
    • 24개의 convolutional layer2개의 fc layer를 쌓아 만들었다
    • GoogLeNet 에서 사용하는 인셉션 모듈 대신, 3 x 3 의 conv layer 뒤에 1x1의 축소 층을 사용

- 24개의 conv 계층과 2개의 fc 계층을 가짐 (3x3x192← 이게 하나의 conv layer라고 보면 됨)

- 번갈아 나오는 1x1 합성곱 계층은 이전 계층에서의 특징 공간(채널수)을 축소하는 역할을 수행

- 이미지넷 데이터를 사용하여 절반 해상도(224x224)로 분류에 대한 사전 훈련시킨 후, 객체 탐지를 위한 데이터일 때는 이미지 해상도를 448x448로 늘려 세밀한 특징을 잡아내도록 훈련시킨다

  • 최종 출력은 7x7x30의 텐서

 

📍 절반 해상도(224x224)로 사전 훈련시킨 후, 해상도를 448x448로 늘려 훈련시킨다

1️⃣ 사전 훈련
: 일반적인 시각적 특징을 학습하도록 하기 위해 224x224 픽셀 이미지 사용 이점: 계산 비용을 줄이고 더 빠른 훈련을 가능하게 함

2️⃣ 세부 훈련(파인튜닝): 객체 탐지에 집중하여 파인튜닝 시키기 위해 448 x 448 픽셀과 같은 높은 해상도의 이미지를 사용

 

 

Fast YOLO

  • YOLO의 빠른 버전
  • 적은수의 conv 계층(24개 대신 9개)과 더 적은 필터를 사용하여 신경망을 구성
  • 네트워크 크기 이외, YOLO와 Fast YOLO 간의 모든 훈련 및 테스트 매개변수는 동일

 

2.2. Training (훈련)

사전 학습

  • ImageNet 1000-class 대회의 데이터셋을 활용하여 1주일 간 사전 학습 시킴
    • Fig 3의 처음 20개의 Conv layer와 average pooling layer, fc layer를 사용
    • (ImageNet 2012 검증 데이터셋에서의 top-5 정확도는 GoogLeNet과 유사하게 88%)

세부 학습

  • 모델이 탐지 기능을 수행할 수 있도록 변환
    • 무작위로 초기화 된 가중치를 가진 4개의 conv layer와 2개의 fc layer를 추가함!
    • 탐지에는 fine-grained visual information(세밀한 시각정보)가 필요하기 때문에, 입력 해상도를 224x224에서 448x448로 증가시킨다

최종 layer

  • 최종 layer에서 class 확률과 bounding box 좌표를 모두 예측한다
  • bounding box의 너비와 높이는 이미지의 너비와 높이를 기준으로 정규화하여 0과 1 사이가 되도록 함
    • 박스 크기와 이미지 크기 간의 상대적인 비율로 표시되도록 하여, 다양한 크기의 이미지에서도 일관되게 객체를 감지할 수 있도록 함
    • x, y 좌표 또한 0과 1 사이 값으로 표현함. grid 셀의 오프셋(기준점으로부터의 차이. 위치)으로 파라미터화 되었다고 할 수 있음
  • 최종 layer는 linear activation function를 사용 (그냥 y = ax와 같은 느낌)
  • 다른 layer들에는 아래와 같은 leaky rectified linear activation를 사용

최적화

  • 오차제곱합(Sum-Squared Error)를 최소화하여 최적화 진행
    • 장점) 최적화하기 쉬움
    • 단점 1) 위치 추정 오류와 분류 오류를 구분하지 않고 동일하게 취급한다
    • 단점 2) 객체를 포함하지 않는 수많은 그리드 셀들에 대해 신뢰도 점수가 대부분 0으로 학습 된다 (객체가 없는 셀들의 신뢰도 점수가 지나치게 낮게 예측되어, 모델이 불균형해짐)
    • 단점 3) 작은 box와 큰 box에 대해 같은 가중치가 사용되는데, 이 때 크기에 따른 중요성이 반영되지 않는다
  • 방법 1, 2) λ_coord (= 5)와 λ_noobj (= 0.5)의 파라미터 추가
    • λ_coord: 바운딩 박스 좌표(coordinates) 예측 손실의 가중치
    • λ_noobj: 객체 없는 박스의 신뢰도 예측 손실의 가중치
  • 방법 3) 바운딩 박스의 너비와 높이 대신 제곱근을 예측
    • 제곱근을 사용하면 작은 값들에 대해서는 민감하고 큰 값들에 대해서는 덜 민감하게 반응
    • 모델이 작은 박스의 정확도를 높이는 데 초점을 맞추도록 도움
  • 추가적인 방법) 한 셀 당 여러개의 바운딩 박스를 가지는데, 그 중 IOU가 가장 높은 단 하나의 바운딩 박스만 선정!

multi-part loss function

  • 다음의 loss function을 최적화한다

 

훈련 세부 사항

  • PASCAL VOC 2007, 2012 훈련 및 검증 데이터 세트
  • epoch: 135
  • batch size: 64
  • momentum: 0.9
  • decay: 0.0005 (매개변수 최적화 시 가중치 크기 조절)
  • learning rate scheculing: 첫 epoch 0.001 → 75 epoch까지 0.01으로 학습 → 이후 30 epochs 동안 0.001로 학습하고 → 마지막 30 epochs 동안 0.0001으로 학습시킴
  • dropout: 0.5
  • data augmentation 적용

 

2.3. Inference (추론)

예측

  • 이미지 한 장 당 98개(7x7x2)의 bounding box와 각 box에 대한 클래스 확률을 제공

경계에 위치한 객체 처리

  • 하나의 object를 여러 grid 셀이 동시에 검출할 수 있음! (다중 검출 문제)
    • 해결: 각 클래스별로 Non-maximal supperssion (NMS)를 사용 → 여러 개의 겹치는 바운딩 박스들 중 가장 정확하다고 판단되는 하나를 선택 (클래스가 여러개일 경우, 겹치는 것만 중복 제거함!)

 

2.4. Limitations of YOLO (YOLO의 한계)

공간적 제약

  • 각 그리드 셀이 하나의 클래스만 가질 수 있기 때문에, 여러개의 작은 객체가 모여있을 경우 잘 검출하지 못 함

형태의 일반화

  • 박스 형태로 일반화 되어있기 때문에, 다른 비율의 객체 모양일 경우 일반화하기 어렵다

손실함수에서는 작은 박스와 큰 박스의 오류를 동일하게 취급

  • 작은 박스에서의 오류가 IOU에 훨씬 더 큰 영향을 미침
  • 위치를 잘못 지정할 가능성이 있음

 

3. Comparison to Other Detection Systems (다른 탐지 시스템과의 비교)

YOLO와 다른 detection 모델들과의 유사점과 차이점

 

Deformable parts models (DPM)

  • 슬라이딩 윈도우 접근 방식 사용
  • 특징 추출, 영역 분류, 바운딩 박스 예측 등을 분리된 파이프라인으로 처리

⇒ YOLO는 분리된 부분들을 하나의 컨볼루션 신경망으로 대체하여 동시에 수행

 

R-CNN

  • 슬라이딩 윈도우 대신 영역 제안(selective search)을 사용하여 이미지 내 객체를 찾음
  • 영역 제안: 세분화된 초기 영역을 점차적으로 합쳐 나감
  • 복잡한 파이프라인을 독립적으로 정밀 조정해야 함

⇒ YOLO는 공간적 제약을 통해 같은 객체의 중복 감지를 줄이고 바운딩 박스 수를 크게 줄여 전체 모델을 단일화하고 최적화함

 

OverFeat

  • 로컬라이저를 훈련하여 감지 수행을 시키는데, 전역의 맥락은 잘 이해하지 못 함

 

MultiGrasp

  • 단일 객체 예측

⇒ YOLO는 이미지 내 다수의 객체에 대해 바운딩 박스와 클래스 확률을 모두 계산

 

4. Experiments (실험)

  • PASCAL VOC 2007 데이터셋 사용

4.1. Comparison to Other Real-Time Systems (다른 실시간 시스템과의 비교)

  • Fast YOLO가 물체 감지기 중 가장 빠르면서도(FPS 155) 높은 mAP 성능을 제공

4.2. VOC 2007 Error Analysis (VOC 2007 오류 분석)

  • Fast R-CNN과 YOLO 비교!

사용한 error 측정 방법

  • Correct: class를 맞게 예측했고, IOU > 0.5인 경우
  • Localization : class를 맞게 예측했고, 0.1 < IOU < 0.5인 경우
  • Similar : class가 유사하고, IOU > 0.1인 경우
  • Other : class는 틀렸으나, IOU > 0.1인 경우
  • Background : 어떤 object라도 IOU < 0.1인 경우

분석

  • YOLO
    • 객체의 위치를 정확하게 지정하는데에 어려움을 겪음 (Localization)
  • Fast R-CNN
    • 배경 오류가 훨씬 더 많이 발생함

4.3. Combining Fast R-CNN and YOLO (Fast R-CNN과 YOLO의 결합)

둘을 결합하면 단점을 보완하여 높은 성능을 낼 수 있을 것이다!

 

 

Fast R-CNN과 YOLO 앙상블

  • 가장 좋은 Fast R-CNN 모델은 71.8%의 mAP를 가짐
  • YOLO와 결합하면 증가하여 75.0%의 mAP를 가짐

그러나!

  • 앙상블 모델은 각 모델을 개별적으로 실행한 다음 결과를 결합하기 때문에, YOLO의 속도로부터 오는 이익을 얻지 못 한다
  • 낫배드다~

4.4. VOC 2012 Results (VOC 2012 결과)

  • VOC 2012 테스트 세트에서 YOLO는 57.9%의 mAP를 가짐 (현존하는 최고 수준의 기술보다는 낮은 수치)
  • YOLO는 작은 객체 (bottle, sheep, tv/monitor)를 탐지하는 데 어려움을 느낌
  • Fast R-CNN + YOLO 앙상블 모델은 성능이 더 높다!

4.5. Generalizability: Person Detection in Artwork (일반화: 예술 작품에서의 인물 탐지)

  • 피카소 데이터셋(Picasso Dataset)과 인물-예술 데이터셋(People-Art Dataset) 사용

⇒ YOLO의 경우 예술품에 적용했을 때 다른 방식들보다 성능이 저하되지 않는 것을 확인할 수 있다!

비표준 이미지에 적용될 때도 비교적 일관된 성능을 유지한다

 

5. Real-Time Detection In The Wild (야외에서의 실시간 탐지)

  • YOLO는 빠른 처리 속도와 높은 정확도 덕분에 다양한 컴퓨터 비전 응용 분야에 적합하다
  • 웹캠에 연결 시, YOLO는 동적인 추적 시스템처럼 작동하여 변화하는 객체들을 실시간으로 감지
  • https://pjreddie.com/darknet/yolo/
 

YOLO: Real-Time Object Detection

YOLO: Real-Time Object Detection You only look once (YOLO) is a state-of-the-art, real-time object detection system. On a Pascal Titan X it processes images at 30 FPS and has a mAP of 57.9% on COCO test-dev. Comparison to Other Detectors YOLOv3 is extremel

pjreddie.com

 

6. Conclusion (결론)

YOLO는 간단하면서도 강력한 객체 탐지 솔루션을 제공하여

기존의 복잡한 감지 시스템들과 차별화된 이점을 가진다!

 

 

 

 

참고

https://hhhhhsk.tistory.com/11

https://www.youtube.com/watch?v=RLNx_tOHGiY