열심히 코딩 하숭!
You Only Look Once: Unified, Real-Time Object Detection(2015) | Paper review 본문
You Only Look Once: Unified, Real-Time Object Detection(2015) | Paper review
채숭이 2024. 6. 6. 23:05You Only Look Once: Unified, Real-Time Object Detection(2015)
You Only Look Once: Unified, Real-Time Object Detection
컴퓨터 비전 스터디를 통해 책 한 권을 끝내고, 남은 주차 동안 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란?
|
- 다른 탐지 시스템들과 비교했을 때, 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 확률을 예측한다
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로 표현된다.)
📍 예측 차원 계산
|
2.1. Network Design (네트워크 설계)
설계
- convolutional layer에서는 이미지의 특징을 추출하고 fully connected layer에서는 출력 확률과 좌표를 예측한다 (GoogLeNet 아키텍처 활용)
- 24개의 convolutional layer와 2개의 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/
6. Conclusion (결론)
YOLO는 간단하면서도 강력한 객체 탐지 솔루션을 제공하여
기존의 복잡한 감지 시스템들과 차별화된 이점을 가진다!
참고