객체 탐지에는
1. 영역 제안을 하는 경우: R-CNN의 종류들
2. 정해진 위치와 정해진 크기의 객체만 찾는 경우 : YOLO 등
의 큰 두 가지 카테고리를 정의할 수 있다.
객체가 있을 법한 영역을 제안하는 Two-Stage Methods는 (Faster R-CNN 등) 영역을 제안하는 파트와 회귀, 분류를 하는 두 개의 파트로 이루어진다.
따라서 위 두 과정을 한 번에 수행하여 Single-Stage Methods보다는 정확도가 높은 만큼 속도가 많이 느리다.
이 Single-Stasge Methods방식의 대표 주자가 YOLO이다.
영역을 제안하는 방식은 Selective search, RPN과 같은 방식을 사용하고 따라서 제안된 영역의 수가 상당히 크다.
YOLO는 grid 방식을 채용하여 훨씬 작은 수의 영역을 검사하여 속도를 줄인다.
높은 FPS와 mAP가 장점인 모델이다.
속도가 빠른 만큼 실시간으로 객체를 탐지해야 하는 애플리케이션에 활용된다.
YOLO는 'Bounding Box 탐지'와 '클래스 분류'의 두 가지를 하나의 네트워크에서 수행한다.
YOLO의 수행 과정을 간단히 설명하면 아래와 같다.
YOLO는 이미지를 S*S의 그리드로 나누어주고 각 그리드 셀마다 B개의 Bounding Box를 예측한다.
위의 그림에서는 7*7 사이즈의 그리드 셀로 나누어준 것을 확인할 수 있다.
이렇게 되면 경계 박스는 총 49*B개가 생성된다.
여기서 박스들은 객체가 존재할 확률이 높은 박스들과 높지 않을 박스들로 선별하고 영역이 겹치는 박스들 중에서는 NMS 알고리즘을 사용하여 최대 신뢰도를 지니는 박스만 남긴다.
박스가 남으면 박스가 클래스들에 대해서 가지는 점수를 가지고 가장 높은 점수를 가진 클래스를 박스의 클래스로 결정한다.
이 때, 모든 점수가 0에 가까우면 해당 박스에는 객체가 존재하지 않거나 객체를 판별할 수 없는 경우이므로 박스를 삭제한다.
이 과정을 전부 거치면 이미지의 가장 오른쪽 그림처럼 객체를 판별하는 박스만 남게 된다.
알고리즘의 수행 과정에서도 어느 정도 추측되는 데 YOLO는 작은 객체들이 겹쳐있는 경우에 검출에 어려움을 보인다.