[Paper Review] You only look once : Unified, Real-Time Object Detection
[Background]
기존의 객체 탐지 방식은 느리고 복잡하다. 슬라이딩 윈도우나 Region Proposal 방식은 부분만 보고 탐지를 하므로 시간도 오래 걸리고 정확도도 제한된다.
Object detection
◎ DPM
DPM은 물체를 여러 부분으로 나누어 탐지하는 방식이다. 수동으로 특징을 추출하고 슬라이딩 윈도우 방식으로 이미지 전체를 스캔한 후 SVM 기반의 분류기로 객체 존재 여부를 판단한다.
당시에는 정확한 탐지 기능을 보여주었지만 딥러닝이 아니므로 성능의 한계가 존재하고 파이프라인이 복잡하고 속도도 느리다는 단점이 존재한다.
◎ R-CNN
R-CNN은 딥러닝을 이용하여 객체 탐지를 하려는 연구로 동작 방식은 다음과 같다.
- Selective Search로 약 2,000개의 Region Proposals을 생성한다.
- 각 Region을 CNN에 통과하여 특징을 추출한다.
- 특징들을 SVM을 이용하여 분류한다.
- 박스는 Bounding box regressor로 조정한다.
R-CNN은 딥러닝을 이용하여 정확도를 향상시켰지만 각 Region마다 CNN을 반복 시행하여 매우 느린 모델이다. 또한 여러 개의 독립적인 모델을 사용하여 비효율적이며 최적화에 어려움이 있다.
◎ Fast R-CNN
Fast R-CNN은 R-CNN 연산 속도를 개선하고자 한 연구로 CNN 연산을 공유하여 속도를 높이고자 하였다.
- 전체 이미지를 CNN에 한 번 통과하여 전체 특징맵을 생성한다.
- Region Proposal도 사용한다.
- 특징맵 위에 RoI Pooling을 적용하여 각 Region의 크기를 통일한다.
- Fully Connected Layer를 통해 이미지의 클래스 및 박스 좌표를 예측한다.
Fast R-CNN은 CNN을 한 번만 사용하여 기존 R-CNN보다 속도를 높였으며 RoI Pooling으로 다양한 크기의 박스도 처리 가능하다. 또한 Classification과 box regression을 한 네트워크에서 처리하도록 하였다. 하지만 Region Proposal은 여전히 느린 Selective Search를 사용하여 속도가 아직 느리다.
◎ Faster R-CNN
Faster R-CNN은 Fast R-CNN에서 사용하는 Region Proposal 또한 CNN으로 만들고자 한 연구이다.
- Fast R-CNN과 동일하게 이미지를 CNN을 거쳐 특징맵을 생성한다.
- Region Proposal Network으로 Object일 가능성이 있는 박스를 300개 정도 추출한다.
- 해당 박스를 RoI Pooling 후 분류 및 box regression을 수행한다.
시간이 오래 걸리는 Selective Search를 제거하여 속도를 크게 향상시켰지만 실시간 수준의 객체 탐지는 불가능하고 구조가 여전히 복잡하다는 단점이 존재한다.
기존의 객체 탐지 알고리즘의 문제점을 해결하고자 나온 논문이 바로 YoLo(You only Look once)이다.
[Summary]
본 논문은 객체 탐지 알고리즘을 하나의 회귀 문제로 정의한다. 이미지 전체를 한 번에 처리하는 단일 CNN 네트워크로 end to end 학습을 수행하고자 하였다.
Unified Detection Model
객체 탐지를 하나의 신경망에서 통합하여 한 번의 연산으로 예측하는 모델 구조로 기존 R-CNN 계열의 복잡한 구조와는 달리 YOLO는 객체 탐지를 단일 네트워크에서 한 번에 해결한다.
먼저, 이미지 입력을 S x S 그리드로 분할한다. 각 셀은 B개의 bounding box와 C개의 클래스 확률을 계산한다.
최종 출력 텐서는 S x S x (B x 5 + C)이다.
B : (x, y, w, h, confidence)로 구성.
- x, y : 예측 박스의 중심 좌표
- w, h : 박스의 너비와 높이
- confidence : 해당 박스가 실제 물체일 확률 x IOU(예측 박스와 실제 박스의 겹침 정도)
객체 탐지에 대한 최종 Score는 다음과 같이 계산한다.
$$ Score = Pr(class_{i}|object)\cdot Pr(object)\cdot IOUpred^{truth} = Pr(class_{i})\cdot IOU$$
Network Design
YOLO는 24개의 Convolution layer와 2개의 Fully Connected Layer로 구성된다.
Fast YOLO는 9개의 Convolution layer를 적용하여 속도를 극대화하였다.
Training
CNN 학습은 ImageNet 데이터셋으로 사전 학습 되었다. 사용한 이미지의 크기는 224x224이며 사전학습된 모델은 top-5 accuracy 기준 88%의 성능을 기록하였다. 사전학습에는 20개의 Conv Layer과 하나의 FCL를 학습하였다.
사전학습된 모델을 객체 탐지용 모델로 fine-tuning하기 위해 입력 크기를 448x448로 변경하였다. 또한 Fully Connected Layer를 탐지 목적에 맞게 다시 초기화하고 전체 네트워크를 미세 조정하였다. 이때, Object detection networks on convolutional feature maps 논문에서 소개한 방법처럼 4개의 Conv Layer와 FCL을 학습하여 효과를 높이고자 하였다.
활성화 함수 : Conv Layer -> Leaky ReLU, 최종 출력층 -> 선형 활성화 함수 사용
Loss Function
본 논문에서 손실 함수로 제곱 오차항을 사용하지만 이 방법은 위치 오류와 분류 오류를 똑같은 오류로 인식한다는 문제가 있다. 또한 객체가 없는 셀이 대부분이기 때문에 해당 셀들의 confidence 오류가 너무 크게 반영되면 객체가 있는 셀들의 학습이 방해받고, 결과적으로 모델이 불안정하게 학습되거나 발산될 가능성이 존재한다. 따라서 YOLO에서는 이 문제를 다음과 같이 해결하고자 한다.
먼저, bounding box 좌표 예측 오차의 손실량을 증가시키고 객체가 포함되지 않은 박스에 대한 confidence 손실은 줄이고자 두 개의 파라미터인 $\lambda_{coord}$와 $\lambda_{noobj}$를 각각 5와 0.5로 설정한다. 또한 제곱 오차를 손실 함수로 사용하면 큰 박스의 오차와 작은 박스의 오차를 동일하게 취급하게 된다. 이를 해결하고자 박스와 높이를 직접 예측하는 대신, 제곱근을 예측하도록 하여 작은 박스의 오차를 민감하게 반영하고 큰 박스는 덜 민감하게 반응하도록 한다.
Inference
YOLO는 다른 객체 탐지 알고리즘과 달리 단 한번의 평가만 수행하기에 추론 속도가 매우 빠르다는 장점을 가지고 있다.
Limitations
그리드 영역 내의 객체를 예측하므로 그리드 셀 안에 여러 무리의 객체들이 있는 경우는 탐지하기 어렵다. 또한 매우 작은 물체에 대해서도 탐지하는 것에 한계를 보인다.
[Experiments]
mAP(mean Average Precision)에서 YOLO는 63.4%의 정확도를, Fast R-CNN은 66.0%, Faster R-CNN은 73.2%의 정확도를 보여줬지만 속도면에서 YOLO는 45FPS, Fast R-CNN은 0.5FPS, Fast YOLO는 155FPS를 보여주었다. 이렇듯 YOLO는 객체의 위치를 정확히 예측하는 데 어려움이 있지만 배경을 객체로 잘못 인식하는 경우가 적다. 반면, Fast R-CNN은 객체의 위치를 정확히 예측하지만 배경을 객체로 잘못 인식하는 경우가 많다. 본 논문은 서로의 장점을 보완하는 모델을 통해 더 나은 성능을 얻었다.
[Results]
본 논문은 객체 탐지를 기존 접근방법이 아닌 더 간단한 구조를 통해 빠르게 수행할 수 있는 방법인 YOLO(You only look once)를 제안한다. YOLO는 간단한 CNN구조를 통해 객체에 대한 분류를 기존 방법들보다 빠르게 수행할 수 있다. 하지만 그리드를 구분지어 각각 예측을 수행하므로 한 그리드 내에 여러 객체들이 존재할 경우, 잘 분류하지 못하며 작은 객체에 대해서는 정확히 탐지하는 데 한계가 존재한다. 현재는 YOLO의 여러 개선된 버전이 출시되었다. 현재 주로 사용되는 YOLOv8과 YOLOv11은 탐지 뿐만 아니라 다양한 기능을 제공하여 사용자들이 쉽게 사용할 수 있도록 구현해두었다. 이러한 YOLO의 발전의 시초인 해당 논문을 읽어보았는데 어려운 방법이 아닌 간단한 구조를 통해 문제를 해결하였다는 점이 인상깊었다. 오히려 복잡한 문제 해결에 원시적인 접근방법도 괜찮은 접근법이라고 생각했다.(물론 현재는 이런 식으로 해결할 수 있는 문제가 거의 존재하지 않을 것 같다..)