티스토리 뷰
[논문 리뷰]You Only Look Once: Unified, Real-Time Object Detection
ProWiseman 2023. 1. 22. 05:28들어가며
본 글은 논문 You Only Look Once: Unified, Real-Time Object Detection을 리뷰한 글입니다.
내용
기존 탐지 시스템
- 기존 시스템은 분류기(classifier)가 detection을 수행하도록 용도를 변경하였다. 이를 위해 추론 과정에서 다음 과정을 수행한다.
- 객체에 대한 분류를 진행한다.
- 다양한 위치(location)과 스케일(scale)에서 평가를 진행한다.
- DPM의 경우 분류기가 전체 이미지에서 균일한 간격의 위치에서 실행되는 sliding window 접근 방식을 이용한다.
- R-CNN의 경우RPM(region proposal method)로 이미지에서 박스의 잠재적 위치를 생성한 후 제안된 박스에 분류기를 실행한다.
- 각자 분류 후 박스를 정제하고 중복되는 탐지를 제거하기 위해 후처리를 진행한다.
- 또한 해당 이미지의 다른 개체로 박스를 재채점한다.
기존 탐지 시스템의 문제
이와 같이 복잡한 파이프라인은 각 컴포넌트가 따로따로 학습 돼야 하기 때문에 느리고 최적화하기 힘들다.
키 아이디어
- 객체 탐지(object detection)을 하나의 회귀 문제로 재구성한다.
- 하나의 합성곱 네트워크가 이미지에서 곧바로 여러 박스의 좌푯값과 해당 박스의 클래스의 확률을 동시에 예측한다.
YOLO : you only look once
YOLO의 장점
- 극도로 빠르다.
- 탐지를 회귀 문제로 구성하기 때문에 복잡한 파이프라인이 필요 없다.
- 예측할 때 이미지 전역적으로 추론한다.
- sliding window나 RPM 기반 기술과 달리 학습과 테스트시 이미지 전체를 보기 때문에 클래스에 대한 맥락적인 정보와 모양을 암시적(implicitly)으로 인코딩한다.
- Fast R-CNN의 경우도 이미지의 객체에 대해 더 큰 맥락적 정보를 보지 못하기에 배경을 객체로 잘못 예측하는 실수를 많이 한다.
- YOLO는 객체의 일반화 가능한 표현을 학습한다.
- 고도로 일반화 되어있기 때문에 새로운 도메인이나 예상치 못한 입력을 받았을 때 DPM이나 R-CNN보다 훨씬 탁월한 성능을 보인다.
YOLO의 단점
- SOTA 탐지 시스템에 비해 정확도가 떨어진다.
- 각 그리드 셀당 두 개의 박스와 하나의 클래스 밖에 예측 못하기 때문에 강력한 공간적 제약을 지닌다.
- 이 공간적 제약은 주변 객체의 수를 제한한다.
- 동물 무리나 새와 같은 작이 객체가 뭉쳐 있는 경우 문제가 된다.
- 데이터로 학습하기 때문에 새롭거나 비정상적인 종횡비나 구성의 객체에 대해 일반화 하는데 어려움을 겪는다.
- 아키텍쳐가 입력에 대해 여러 downsampling 레이어를 지니기 때문에 박스를 예측하는 데에 있어 상대적으로 coarse feature를 이용한다. (coarse feature에 대해서는 이 블로그를 참고하면 될 것 같습니다.)
- 손실 함수가 작은 박스와 큰 박스의 오차를 동일하게 취급한다.
- 큰 박스에서의 사소한 에러는 보통 유한(benign) 반면 작은 박스에서의 사소한 에러는 IOU에 훨씬 더 많은 영향을 끼친다.
Unified Detection
YOLO는 객체 탐지의 분리된 컴포넌트를 단일 신경망으로 통합한다. 또한 YOLO의 디자인은 end-to-end 학습과 높은 AP를 유지하며 동시에 실시간의 속도를 가능케한다. 본 시스템의 구성을 소개하겠다.
시스템 구성
본 시스템은 입력 이미지를 \(S×S\) 그리드로 나눈다. 객체의 중앙이 그리드 셀에 있으면 그 그리드는 해당 객체를 담당(responsible)한다. 각 그리드는 바운딩 박스 \(B\)와 그 박스에 대한 신뢰도(confidence) 점수를 예측한다. 여기서 신뢰 점수는 모델이 얼만큼 객체를 가지고 있을지, 박스가 예측한대로가 맞을지에 대한 확신을 반영한다.
신뢰도는 \(Pr(Object) * IOU_{pred}^{truth}\) 로 정의된다. 만약 셀에 객체가 존재하지 않는다면 신뢰도 점수는 0이 될 것이다. 이 경우가 아닐 때 신뢰 점수가 예측된 상자와 ground truth 사이의 IOU와 같아야 한다.
각 바운딩 박스는 \(x, y, w, h\)와 신뢰, 5가지의 예측으로 구성되어 있다. \((x, y)\)는 그리드 셀의 경계에 대해 상대적인 박스의 중심 좌표를 나타낸다. 너비와 높이는 전체 이미지에 대해 상대적인 좌표로 예측된다. 그리고 예측된 신뢰도는 예측된 박스와 다른 모든 ground truth와의 IOU로 표현된다.
각 그리드 셀은 클래스의 조건부 확률인 \(C\)를 예측한다. 식은 \(Pr(Class_{i}|Object)\)이다. 이러한 확률은 객체를 포함하는 그리드 셀에 따라 결정된다. 박스 \(B\)의 개수와 상관없이 그리드 셀별로 클래스의 확률 집합은 하나만 예측된다. 테스트시에는 개별 박스 신뢰도 예측값에 클래스 조건부 확률을 곱하여 클래스별 신뢰도 점수를 제공한다.
\[Pr(Class_{i}|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_{i}*IOU_{pred}^{truth})\]
이 점수는 박스에 보여지는 클래스의 모습의 확률과 객체에 맞게 박스를 얼마나 잘 예측하고 있는지 인코딩한다.
PASCAL VOC에서 YOLO를 평가할 땐 \(S=7, B=2\)를 주었고 PASCAL VOC 데이터셋은 클래스가 20개 있으므로 \(C=20\)으로 주어진다. 따라서 예측값은 \(7×7×30\)의 텐서이다.
네트워크 디자인
네트워크의 초기 Convolution 층은 이미지의 피처를 추출하고 완전 연결층은 출력의 확률과 좌푯값을 예측한다. 네트워크 아키텍쳐는 GoogLeNet으로부터 영감을 받았으며 본 논문의 네트워크는 24개의 Convolution 층과 2개의 완전 연결층을 쌓았다. 또한 GoogLeNet에서 사용된 inception module 대신 3×3의 Convolution 층 뒤에 1×1의 축소 층을 사용했다. 전체 네트워크 디자인은 다음과 같다.
본 논문에선 YOLO의 빠른 버전인 Fast YOLO도 소개한다. 아키텍처는 기존 모델은 24개의 Convolution 층 대신 9개층을 사용하고 각 층의 필터도 기존 모델보다 적다. 네트워크 크기 외에 학습 및 테스트 파라미터는 기존 모델과 동일하다.
학습
Convolution 층은 ImageNet 1000-class 대회 데이터셋으로 약 1주일간 사전학습하였고 ImageNet 2012 검증 데이터셋에서 top-5 정확도는 GoogLeNet과 유사하게 88%였다. 학습과 추론시 Darnet 프레임워크를 이용하였다.
탐지는 종종 fine-grained 시각 정보를 요하기 때문에 네트워크 인풋 해상도를 224×224에서 448×448로 수정하였다. 마지막 레이어는 클래스 확률과 바운딩 박스 좌표를 예측한다. 바운딩 박스의 너비와 높이는 이미지의 너비와 높이로 정규화 되며 따라서 0과 1 사이의 값을 가지게 된다. 바운딩 박스의 \(x\)와 \(y\) 좌표값은 특정 그리드 셀의 오프셋으로 파라미터화 했으므로 이들 또한 0과 1 사이의 값을 가지게 된다.
마지막 층에는 선형 활성화 함수를 사용하였으며 다른 층은 leaky rectified linear activation을 사용하였다. leaky rectified linear activation은 다음과 같다.
\[\phi(x)=\left\{\begin{matrix}
x,&if\,x>0 \\
0.1x,&otherwise \\
\end{matrix}\right.\]
손실 함수
sum-square error는 최적화(optimize)하기 쉽기 때문에 손실 함수로는 sum-squared error를 사용하였다.
sum-square error의 문제
1. 위치 에러와 분류 에러를 동일한 비중으로 다루기 때문에 average precision을 최대화 하고자 하는 논문에서의 목표와는 완벽하게 들어맞지는 않는다. 모든 이미지의 많은 그리드 셀은 객체를 포함하지 않기 때문에 그러한 셀들의 신뢰도 점수를 0으로 향하게 하며 종종 개체를 포함하는 셀의 기울기를 압도한다. (객체를 포함하지 않는 셀이 학습을 방해한다고 받아들였습니다.) 이는 모델이 불안정하기 해져 학습이 조기에 발산될 수 있다.
2. 큰 박스와 작은 박스의 에러를 동일한 비중으로 다룬다.
이에 대한 해결책
1번 문제를 해결하기 위해 바운딩 박스의 좌표 예측 손실을 증가시키고 객체를 포함하지 않는 박스의 신뢰도 예측 손실을 감소시킨다. 이를 \(\lambda_{coord}\)와 \(\lambda_{noobj}\) 두 파라미터로 이용하였고 논문에선 각각 5와 .5로 설정하였다.
2번 문제를 해결하기 위해 손실 함수가 큰 상자에서의 작은 편차가 작은 상자보다 덜 중요하다는 것을 반영하도록 해야한다. 따라서 본 논문에선 바운딩 박스의 너비와 높이의 값을 그대로 예측 하는 것이 아닌 루트값을 예측하도록 하였다.
YOLO는 그리드 셀당 여러 바운딩 박스를 예측한다. 학습시에는 각 객체별로 하나의 바운딩 박스만을 갖기를 바라기 때문에 예측값이 ground truth와 가장 높은 IOU 값을 가지지를 기반으로 하나의 객체를 담당하도록 한다. 이는 바운딩 박스 예측자 사이의 전문화(specialization)로 이어진다. 각 예측자는 특정 사이즈나 종횡비, 객체의 클래스에 대해 더 나아지고 전반적인 recall값도 개선된다.
이를 수식화하면 다음과 같다.
\[\lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{i\,j}^{obj}\left [ (x_{i}-\widehat{x}_{i})^{2}+(y_{i}-\widehat{y}_{i})^{2} \right ]\]\[+\lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{i\,j}^{obj}\left [ (\sqrt{w_{i}}-\sqrt{\widehat{w}_{i}})^{2}+(\sqrt{h_{i}}-\sqrt{\widehat{h}_{i}})^{2} \right ]\]\[+\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{i\,j}^{obj}(C_{i}-\widehat{C}_{i})^{2}\]\[+\lambda_{noobj}\sum_{i=0}^{S^{2}}\sum_{j}^{B}\mathbb{1}_{i\,j}^{noobj}(C_{i}-\widehat{C}_{i})^{2}\]\[+\sum_{i=0}^{S^{2}}\mathbb{1}_{i\,j}^{obj}\sum_{c\in classes}(p_{i}(c)-\widehat{p}_{i}(c))^{2}\]
여기서 \(\mathbb{1}_{i}^{obj}\) 는 객체가 \(i\)번째 셀 속에 존재한다는 것을 의미한다.
\(\mathbb{1}_{i\,j}^{obj}\) 는 \(i\)번째 셀 속 \(j\)번째 박스 예측자가 해당 예측을 담당한다는 것을 의미한다.
이는 손실 함수가 그리드 셀 속에 객체가 있을 때에만 classification error를 처벌(penalize)한다는 것을 의미한다. 또한 예측자가 ground truth 박스를 담당할 경우에만 바운딩 박스의 coordinate error를 처벌한다.
추론시엔 NMS(non-maximal suppression)을 적용하여 큰 객체나여러 셀 경계에 있는 객체가 잘 자리를 잡을 수 있도록 한다.
실험
다른 실시간 시스템들과 비교했을 때 현격히 빠르며 다른 실시간 시스템보다 훨씬 정확하다.
IOU가 .1 아래인 것을 배경이라 가정했을 때 배경 에러가 Fast R-CNN에 비해 YOLO가 훨씬 적은 것을 확인할 수 있다.
YOLO가 배경 예측 실수를 덜 한다는 점을 이용해 이와 같은 잘못된 예측을 지우기 위해 YOLO를 사용하면 확실한 성능의 개선을 보여준다. 또한 YOLO가 워낙 빨라 기존 Fast R-CNN에 비교해 속도가 떨어지지도 않는다.
'공부한 내용 정리 > 인공지능' 카테고리의 다른 글
인공지능 기초 1 (0) | 2023.02.24 |
---|---|
[논문 리뷰]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks (0) | 2023.02.07 |
[논문 리뷰]EfficientNetV2: Smaller Models and Faster Training (0) | 2023.01.19 |
[논문 리뷰]Sequence to Sequence Learning with Neural Networks (0) | 2023.01.19 |
[논문 리뷰]Deep contextualized word representations (1) | 2023.01.16 |