YOLO: You Only Look Once 부수기 [백 병장의 CV 부수기 6편]
드디어 백 병장의 CV 부수기 마지막 편이다.
마지막으로 살펴볼 CV 논문은 YOLO라는 약칭으로 유명한 You Only Look Once: Unified, Real-Time Object Detection이다.
이름에서 알 수 있듯이 1-stage Object Detection 모델이고, CV를 배우기 전부터 여러 차례 들은 기억이 있을 정도로 파급력이 있는 모델이다.
저자들을 보는데 Ross Girshick님이 3저자로 있는게 눈에 띄었다.
이 분은 어째 굵진한 CV 논문에 빠지는 일이 없는 것 같다. 대단하다.
YOLO 소개
R-CNN으로 대표되는 기존 Object Detection 모델들은 Classification 모델을 활용하여 Detection을 수행한다.
이미지를 여러 개의 영역으로 나누고(Region Proposal), 이 영역들에 대해 Classification과 Bounding Box Regression을 수행하기 때문에 속도가 오래 걸릴 수밖에 없게 된다.
YOLO는 그 이름처럼, 이미지를 한 개의 신경망에 단 한번 통과시켜 Detection을 수행한다.
기존에는 Classification과 Bounding Box Regression으로 나누어 수행하던 Task를 한 개의 Regression Task로 재정의해 한번에 수행하는 새로운 방식을 제안한다.
end-to-end 학습이 가능하며, 기존 모델들에 비해 굉장히 빠른 예측 속도를 갖는다.
(동시기에 등장한 Faster R-CNN이 초당 17프레임을 처리한 반면 YOLO는 45프레임, Fast YOLO는 51프레임을 처리한다고 한다.)
또한, 기존 모델들의 문제 중 하나였던 background error (배경을 객체로 잘못 인식하는 오류)가 1/2 수준이며, 학습한 데이터 외의 분포에서도 예측을 잘 수행하는 일반화 성능이 더욱 뛰어나다고 한다.
다만, SOTA 모델들에 비해 정확도는 약간 떨어진다고 한다.
Unified Detection
기존 OD 모델들은 객체가 있어 보이는 영역들을 추출하고, 그 영역들에 대해 Classification을 수행했다.
YOLO는 OD를 Classification이 아닌, Regression 방법으로 접근했다.
먼저, 입력 이미지를 $S \times S$개의 grid로 분할한다. (위 이미지 좌측)
만약 어떤 객체의 중심이 특정 grid 안에 있다면, 그 grid가 해당 객체의 Detection을 수행한다.
각 그리드는 $B$개의 Bounding Box를 예측한다.
Bounding Box 예측 하나는 $(x,y,w,h)$와 confident score로 구성된다. (위 이미지 중앙 상단, 선의 굵기가 confident score)
$(x,y)$는 해당 grid안에서 Bounding Box 중심이 존재하는 상대 위치로, $0~1$의 값을 갖는다.
$(w,h)$는 Bounding Box의 상대 너비와 높이로, 이미지 전체의 가로와 세로 길이에 대한 Box의 크기를 나타낸다. 역시 $0~1$ 값을 갖는다.
confident score는 해당 Bounding Box가 객체를 적절히 표현하는지를 나타내는 값으로, 아래와 같이 계산된다.
$$Pr(\text{Object}) \times \text{IoU}^{truth}_{pred}$$
$Pr(\text{Object})$는 해당 Bounding Box안에 객체가 존재하는지 여부로, 존재한다면 1, 아니면 0이다.
IoU는 실제 Bounding Box와 예측 Bounding Box가 겹치는 영역을 말한다. 예측과 실제가 완전히 겹치면 1, 겹치지 않을 수록 0에 가까운 값을 갖는다.
즉, $Pr(\text{Object})$와 IoU가 모두 1인 것이 가장 이상적이다.
각 grid는 $C$개의 클래스에 대한 Conditional Class Probablity도 예측한다. 이는 해당 grid 안에 특정 객체가 있다는 전제 하에 해당 객체가 존재할 확률이다. (위 이미지 중앙 하단, 각 색상이 클래스)
예를들어, grid 안에 사과가 존재할 확률과 배가 존재할 확률을 각각 구하는 것이다. (전체 클래스 $C$개에 대하여)
모든 값을 예측했다면, 각 Bounding Box의 Confident Score와 grid의 Conditional Class Probability를 곱한다.
이는 (Bounding Box안에 객체가 있을 확률)과 (그 Bouding Box가 어떤 Class일 확률)을 곱하는 것과 같다.
이 값을 Class Specific Confident Score라 한다.
출력은 $S \times S$개의 grid에 대해 Bounding Box 갯수 $B$개와 클래스 개수 $C$에 대하여 $(5B + C)$ 예측을 진행하므로, $S \times S \times (5B + C)$ 크기가 된다. (5는 각 BB에 대한 $(x,y,w,h,c)$)
결과 해석
각 Grid별로 계산한 Class Specific Confident Score 중, 임계값 이상의 것들을 골라 취한다. 같은 객체에 대해 여러 개의 Bounding Box가 생기는 중복 검출 문제를 해결하기 위해 Non Max Suppression을 적용한다.
모델 구조
YOLO에는 일반적인 CNN 구조가 사용되었다.
(지금까지 본 OD 중에 가장 단순한 구조라 너무 좋다...)
Image Classification에서 사용되는 GoogLeNet을 약간 변환한 구조로, 24개의 합성곱 계층과 2개의 Fully Connected 계층으로 구성된다.
더 빠른 속도를 위해 합성곱 계층을 9개로 줄인 Fast YOLO모델도 존재한다고 한다.
학습
YOLO의 학습과 추론에는 Darknet 프레임워크가 사용되었다.
이 프레임워크는 논문 저자인 Joseph Redmon가 개발한 딥러닝 프레임워크라 한다.
먼저, 20개의 합성곱 계층을 ImageNet 데이터에서 Classification을 수행하도록 사전학습시켰다고 한다.
사전학습이 완료된 후에는 뒤에 4개의 합성곱 계층과 2개의 완전 연결 계층을 추가하여 최종 YOLO 모델 구조를 만들고, 각 계층에는 leaky ReLU를 활성화 함수로 사용하였다. (마지막 계층에는 회귀 예측을 위해 Linear 함수를 썼다.)
연구진은 모델을 SSE(Sum-Sqruared Error)를 손실 함수로 적용하여 학습시켰는데, 그러면서 이는 좋은 방법이 아니라고 한다.
Detection 문제의 평가 지표는 Bounding Box가 객체의 위치를 제대로 찾았는지 보는 Localization Error와, 객체 분류가 적절한지 판단하는 Classification Error가 있는데, SSE는 이 Error들에 가중치를 두지 않고 그냥 합쳐서 계산하기 때문이다.
학습에 사용된 이미지에는 객체가 존재하는 grid보다 객체가 없는 배경 grid가 훨씬 많은데, 이런 grid에는 Confident Score를 0을 줄 수 밖에 없어, 학습에 불균형을 초래한다.
때문에 연구진은 객체가 없는 grid에 낮은 가중치를 주고, 객체가 있는 grid에 높은 가중치를 주었다고 한다.
또한 SSE의 한계 상, 큰 Bounding Box와 작은 Bounding Box에 같은 가중치를 두게 되어서, 작은 Bounding Box는 조금만 오류가 있어도 Loss가 너무 커지는 문제가 있었다. Bounding Box의 너비와 높이에 Square Root을 취해서 영향을 적게 했지만 완벽한 해결책은 아니다.
에러를 계산하기 위해, 정답 Bounding Box 하나당 예측 Bounding Box 하나만을 매칭해야 하는 문제도 있었는데, 이는 정답 Box와 IoU가 가장 높은 예측을 사용하는 것으로 했다.
YOLO의 한계와 장점
YOLO는 한 grid 당 무조건 한 개의 객체만을 검출하기 때문에, 만약 한 grid 안에 객체가 여러개 들어있다면 하나밖에 인식하지 못하는 공간적 제약이 있다.
또한, Bounding Box 예측을 기존에 봤던 데이터들 기반으로 수행하기 때문에, 흔히 등장하지 않았던 종횡비의 객체가 등장하면 고전한다.
작은 Bounding Box와 큰 Bounding Box에 같은 Loss를 부여하기 때문에, 큰 Box는 약간 오류가 있어도 문제가 되지 않는 반면에, 작은 Box의 오류를 잘 잡지 못하는 문제도 있다.
그럼에도, 이미지 전체를 자르지 않고 CNN에 투입하기 때문에 더욱 빠르고, 이미지 전체를 학습하기 때문에 일반화에도 더 강한 모습을 보이는 장점이 있다.
결론
복잡한 OD 모델들 때문에 어질어질 했는데, YOLO는 모델이 단순해서 좋았다.
난 항상 뭔가를 개선하려 할 때, 뭔가 복잡도를 올려야 한다고만 생각하는데, 문제를 Regression으로 재정의하여 복잡도를 낮추고 속도를 개선한 연구진이 대단하다.
이렇게 백 병장의 CV 부수기가 끝났다.
전역까지 3일 남았고, 이제 정말 쉬면서 군 생활을 마무리하려 한다.
학계를 발전시키고 이끌어나가는 논문 저자님들, 어려운 논문들을 쉽게 정리하여 CV 부수기 시리즈에 큰 도움을 주신 선배님들, 그리고 항상 읽어주시는 독자님들께 감사드린다.
참고자료
- You Only Look Once: Unified, Real-Time Object Detection - Joseph Redmon et al. arxiv
- 논문 리뷰 - YOLO(You Only Look Once) 톺아보기 - Baek Kyun Shin
- You Only Look Once - Paper Review - 모두를 위한 Object Detection
'Deep Learning > 공부 노트' 카테고리의 다른 글
R-FCN: Object Detection via Region-based Fully Convolutional Networks 요약 (0) | 2023.01.20 |
---|---|
SSD: Single Shot MultiBox Detector 요약 (0) | 2023.01.11 |
OHEM 부수기 [백 병장의 CV 부수기 5편] (1) | 2022.12.10 |
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편] (0) | 2022.12.04 |
Fast R-CNN 부수기 [백 병장의 CV 부수기 3편] (0) | 2022.12.03 |
댓글
이 글 공유하기
다른 글
-
R-FCN: Object Detection via Region-based Fully Convolutional Networks 요약
R-FCN: Object Detection via Region-based Fully Convolutional Networks 요약
2023.01.20 -
SSD: Single Shot MultiBox Detector 요약
SSD: Single Shot MultiBox Detector 요약
2023.01.11 -
OHEM 부수기 [백 병장의 CV 부수기 5편]
OHEM 부수기 [백 병장의 CV 부수기 5편]
2022.12.10 -
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편]
Faster R-CNN 부수기 [백 병장의 CV 부수기 4편]
2022.12.04