YOLO 는 가장 빠른 객체 탐지 알고리즘의 하나다. 최신 버전인 YOLOv3 는 크기가 256*256 인 이미지에 대해 초당 170 프레임의 속도로 실행될 수 있다.
YOLO 의 강점과 한계
최근 Faster R-CNN 이 정ㅈ확도 층면에서 YOLO 를 능가, 게다가 YOLO는 객체를 탐지하는 방식 때문에 작은 크기의 물건을 탐지하는데 어려움을 겪는다. 훈련 세트에서 너무 많이 벗어난 객체(가로/세로 비율이 이례적인 경우) 를 적절히 탐지하는 일에도 어려움을 겪는다.
YOLO 의 주요 개념
YOLO 의 핵심 아이디어는 객체 탐지를 단일 회귀 문제로 다시 구성하는 것이다. 슬라디이 윈도우나 복잡한 기법을 사용하는 대신 입력을 w*h 그리드로 나누는 것이다.
그리드의 각 부분에 대해 B 개의 경계 상자를 정의, 그런 다음 각 경계 상자에 대해 다음을 예측하면 된다.
- 상자의 중심
- 상자의 너비와 높이
- 이 상자가 객체를 포함하고 있을 확률
- 앞서 말한 객체의 클래스
이 모든 예측은 숫자로 객체 탐지 문제를 회귀 문제로 변환하였다.
YOLO 로 추론하기
추론과 훈련으로 나누어 모델을 이해,
추론 inference 는 이미지 입력을 받아 결과를 계산하는 절차, 훈련은 모델의 가중치를 학습하는 절차,
YOLO 백본
대부분의 이미지 탐지 모델처럼 YOLO 는 백본 모델 backbone model 을 기반으로 한다. 이 모델의 역할은 마지막 계층에서 사용될 의미 있는 특징을 이미지로부터 추출하는 것이다. 이 때문에 백본 모델을 특징 추출기 feature extractor 라고도 부른다.
최종 모델의 성능은 특징 추출기 아키텍처로 무엇을 사용했는지에 따라 크게 달라진다.
ㅂㄱ본의 마지막 계층은 크기가 w*h*D 인 특징 볼륨을 출력하는데, w*h 는 그리드의 크기이고 D 는 특징 볼륨의 깊이다.
그리드 크기인 w*h 는 다음 두 요인에 따라 달라진다.
- 전체 특징 추출기의 보폭
- 입력 이미지의 크기
YOLO 의 마지막 계층은 입력으로 특징 볼륨을 받는다. 마지막 계층은 1*1 합성곱 필터로 구성된다. 이는 특징 볼륨의 공간 구조에 영향을 주지 않고 깊이를 바꾸는데 사용될 수 있다.
YOLO 의 계층 출력
YOLO 의 마지막 출력은 w*h*M 행렬로, w*h 는 그리드 크기이며 M 은 공식 B*(C+5) 에 해당한다. B 와 C 는 다음과 같이 정의할 수 있다.
- B 는 그리드 셀당 경계 상자 개수다.
- C 는 클래스 개수다.
클래스 개수에 5를 더한 것은 경계 상자마다 (C+5) 개의 숫자를 예측해야 하기 때문이다.
- t_x, t_y 는 경계 상자의 중심 좌표를 계산하기 위해 사용된다.
- t_w, t_h 는 경계 상자의 너비와 높이를 계산하기 위해 사용된다.
- c 는 객체가 경계 상자 안에 있다고 확신하는 신뢰도
- p_1 ~ p_C 는 경계 상자가 클래스 1,...,C 의 객체를 포함할 확률
이 행렬을 사용해 최종 경계 상자를 계산하기 전 앵커박스 anchor box 의 소개
앵커 박스 anchor box
t_x,y,w,h 가 경계 상자의 좌표를 계산하는데 사용된다
왜 네트워크에 좌표를 직접 출력할 것을 요청하지 않을까? 실제로 YOLOv1 에서는 그 방법을 사용했다. 하지만 이는 객체의 크기가 다양하기 때문에 수많은 오차가 발생한다.
훈련 데이터셋의 객체 대부분이 크면 네트워크는 w 와 h 가 매우 크다고 예측할 것이다. 그리고 작은 객체에서 훈련된 모델을 사용할 때 이 네트워크는 대체로 실패할 것, 이 문제를 해결하기 위해 YOLOv2 에서 앵커 박스를 도입했다.
앵커박스(사전 정의 상자 prior box) 는 네트워크를 훈련시키기 전에 결정되는 일련의 경계 상자 크기다.
보행자 탐지 신경망의 ㄱ여우 크고 가는 앵커 박스를 선택한다.
앵커 박스의 집합은 일반적으로 작으며 다양한 크기를 갖는다. 그러한 상자가 모든 객체와 정확히 일치할 수는 없으므로 네트워크는 가장 근접한 앵커 박스를 개선하는 데 사용된다.
이는 t_x,y,w,h, 가 필요한 이유로 앵커 박스 보정에 해당한다.
앵커 박스의 크기가 데이터셋마다 다르기에 모델을 훈련시키기 전 데이터를 분석해 앵커 박스의 크기를 선택할 것을 권고
YOLO 가 앵커 박스를 개선하는 방법
YOLOv2 는 다음 공식을 사용해 최종 경계 상자 좌표를 각각 계산한다.
- t_x,y,w,h, 는 마지막 계층의 출력이다.
- b_x,y,w,h 는 각각 예측된 경계 상자의 위치와 크기다
- p_w,h 는 앵커 박스의 원래 크기를 나타낸다.
- c_x,y 는 현재 그리드 셀의 좌표다.
- exp 는 지수 함수
앵커 박스를 정교화하고 위치를 정하는 방법
왼쪽의 직선은 앵커 박스이며 점선은 정교화된 경계 상자이다. 오른쪽의 점은 해당 경계 상자의 중심이다.
신경망의 출력은 원시 숫자로 이뤄진 행렬로 경계 상자 목록으로 변환해야 한다.
상자를 사후 처리하기
결국 예측된 경계 상자의 좌표와 크기와 함께 신뢰도와 클래스 확률을 얻게 된다. 이제 신뢰도를 클래스 확률과 곱하고 높은 확률만 유지하게 임곗값을 설정하면 된다.
수많은 경계 상자가 겹쳐 있다. 비행기가 여러 그리드 셀에 걸쳐 있으므로 한 번 이상 탐지된다. 이를 보정ㅇ하기 위해 비최댓값 억제 non-maximum suppression 이 필요하다.\
NMS
NMS 의 기본 아이디어는 확률이 가장 높은 상자와 겹치는 상자들을 제거하는 것이다. 따라서 최댓값을 갖지 않는 상자들을 제거한다.
YOLO 추론 요약
- 입력 이미지를 받아 CNN 백본을 사용해 특징 볼륨을 계산한다.
- 합성곱 계층을 사용해 앵커 박스 보정, 객체성 점수, 클래스 확률을 계산한다.
- 이 출력을 사용해 경계 상자의 좌표를 계산한다.
- 임곗값보다 낮은 상자는 걸러내고 남은 상자는 비최댓값 억제 기법을 사용해 사후 처리한다.
전체 프로세스가 합성곱, 필터링 연산으로 구성되기 때문에 이 네트워크는 크기와 비율에 상관없이 어떤 이미지라도 받을 수 있다. 이 네트워크는 유연하다.
YOLO 모델은 백본과 YOLO 헤드라는 두 개의 주요 부분으로 구성된다.
YOLO 손실
마지막 계층의 출력이 상당히 일반적이지 않아서 그에 대응하느 ㄴ손실 또한 그렇다.
이 네트워크는 다음처럼 여러 종류의 정보를 예측한다.
- 경계 상자 좌표와 크기
- 객체가 경계 상자 안에 있을 신뢰도
- 클래스에 대한 점수
오차가 높을 때 손실도 높아야 한다는 기본 개념, 손실이 부정확한 값에 패널티를 부여할 것
경계 상자 손실
네트워크가 경계 상자 좌표와 크기를 예측하기 위해 가중치를 학습하는 데 가이드를 제공한다.
- 람다는 손실에 가중치를 부여한다. 이것은 훈련동안 경계 상자 좌표에 얼마만큼의 중요도를 부과할지를 반영한다.
- 그리드 각 부분에 대해 합계를 내고 그리드의 이 부분에 포함된 각 상자에 대해 합계를 낸다.
- 1^obj 는 그리드의 i 번째 부분의 j 번째 경계 상자가 해당 객체를 탐지한다면 1이 되는 함수다.
- x,y,w,h 는 경계 상자 크기와 좌표에 해당.ㅏ 예측값과 목푯값 사이의 차이를 구한다. 예측값에 햇의 사용
- 차이를 제곱하여 양수
- w,h 의 제곱근을 구한다. 크기가 작은 ㄱ여계 상자에 대한 오차에 크기가 큰 경계 상자에 대한 오차보다 더 큰 패널티를 부과한다.
이 손실의 핵심은 지시 함수 indicator function 이다. 해당 상자가 객체를 탐지할 때만 좌표가 정확하다. 여기서 이미지 내의 객체마다 어느 경계 상자가 탐지하는지를 결정하는 일이 어려운 부분이다.
YOLOv2 에서는 탐지된 객체를 포함하면서 IoU 가 가장 높은 앵커 박스가 해당 객체를 탐지한 것으로 간주한다.
각 앵커 박스를 한 가지 유형의 객체에 특화시키는 것이다.
객체 신뢰도 손실
경계 상자가 객체를 포함하는지 여부를 예측하기 위해 가중치를 학습하도록 네트워크를 가르친다.
- C : 그리드의 i 번째 부분에서 j 번째 상자에 객체가 포함될 신뢰도.
- 1^noobj : 객체가 없으 ㄹ경우에 대한 지시함수 그리드의 i 번재 부분에서 j 번째 경계 상자에서 객체가 탐지되지 않을 때 1이 되는 함수
분류 손실
네트워크가 각 경계 상자에 대해 적절한 클래스를 예측하게 해준다.
전체 YOLO 손실
전체 손실은 3개 손실의 합이다.
'객체 탐지' 카테고리의 다른 글
Faster R-CNN (0) | 2023.04.06 |
---|---|
객체 탐지 모델 (0) | 2023.04.05 |