Object Detection 이란?

객체검출은 이미지 내 객체의 위치를 특정(Localization)하고 그 속성(Classification)을 부여하는 작업을 말합니다. 데이터헌트에서 진행되는 다양한 프로젝트는 객체의 일반적인 속성을 분류하는 것 뿐만 아니라 이미지 내의 위치까지 제공할 필요가 있고, 상황에 따라서 그 속성이 ‘동물의 종류’와 같은 한 개의 속성이 아니라, ‘동물의 종류’, ‘색상’, ‘자세’ 등 다양한 속성을 부여해야 하는 경우도 있습니다.
하나의 객체에 다양한 속성을 부여하기도 합니다. 예를 들어 사진에 부여되는 객체의 속성은 ‘강아지’ 인 것 뿐만 아니라 동물의 위치가 ‘중앙’, 동물의 자세는 ‘앉은자세’, 색상은 ‘흰색’ 처럼 다양한 속성을 부여하고 비교합니다.
구체적인 데이터 라벨링으로 위의 사진처럼 앉은자세의 강아지 인형과의 공통적인 속성을 캐치하고 부여합니다. 다양한 객체 검출 레이블링 작업은 요즘 큰 관심을 받는 자율주행 뿐 아니라, 패션, 건설업, 의료 등 다양한 분야에서 인공지능을 도입하기 위해 필요한 과정입니다.
YOLO를 주제로 선정한 이유
데이터헌트가 가지는 가장 큰 장점 중 하나는 데이터 가공 작업이 진행될 때 작업자들의 작업 능률 향상을 위해 AI 모델을 활용하고 있다는 것입니다.
그렇기 때문에 작업자들의 능률향상을 지원하는 AI 모델에 대해 많은 고민이 필요한데, 빠르게 레이블을 전달하더라도 정확하지 않으면 차후에 추가적인 수정이 필요해지고, 최대한 정확한 레이블이더라도 전달에 너무 오랜 시간이 걸린다면 작업 효율에 큰 도움이 되지 못합니다.
따라서 많은 객체 검출 모델 중에서 속도와 정확도의 균형이 잘 잡힌 모델을 고민해야했고, 그 결과 YOLO를 눈여겨보게 되었습니다.

YOLO가 다른 모델에 비해 속도와 정확도 모두 좋은 결과를 냈을까요? 현재 YOLO는 v1 부터 v5 모델까지 많은 개선이 이루어졌고, 현재도 개선 중 입니다. 이번에는 그 시작이 되는 YOLO v1에서부터 이후의 시리즈까지 관통하는 핵심 개념을 다른 모델과의 차이점, 장단점과 함께 리뷰하겠습니다.
One-stage Detector
Two-stage Detector로 분류되는 R-CNN 계열의 모든 모델은 이미지의 많은 영역에 걸쳐 후보 영역군을 만들고 각 영역에 대해 Objectness와 객체 영역, 그리고 클래스를 예측하는 작업을 수행하게 됩니다.
장점은 후보 영역군을 만드는 일부터 이후 과정이 많은 연산량을 필요로 하고 직렬적으로 수행되기 때문에 보다 정확합니다. 하지만, 그만큼 느리게 동작하는 단점도 있습니다.
YOLO에서는 위의 속도의 문제를 개선하기 위해 One-stage Detector의 구조를 제안했습니다. Backbone을 통해 나온 feature map이 곧 원본 이미지를 격자(grid)로 잘라 놓은 역할을 하기 때문에, 후보 영역군을 생성할 필요도 없이 각 격자에서 물체가 유무를 포함한 나머지 일들을 수행할 수 있습니다.

이것은 네트워크 전체에 걸친 Convolution 연산이 Spatial-invariant 하기 때문에 가능한 일이라고 생각할 수 있습니다.
다시 말해, 연산을 해도 이미지 내 픽셀의 상대적 위치가 변하지 않는다는 특징으로 인해 내 양 옆자리에 지수, 재윤이라면 사무실을 옮기고 몇번의 이사를 가도 양옆에 지수와 재윤이가 앉아 있는 것은 변하지 않습니다.
Predict at Once
위의 그림에서 알 수 있듯, YOLO에서는 마지막 layer를 통해 한 번에 모든 정보를 추론하게 되는데 그 내용물은 아래의 그림과 같습니다.

각 격자에서 서로 다른 크기와 비율을 가진 영역을 사전에 정의 (이것을 Anchor라고 명칭), 그 Anchor의 개수만큼 영역의 위치와 크기(x, y, w, h) 그리고 objectness를 추론합니다.
그리고 그와 별개로 해당 Anchor가 포함하는 영역의 객체의 클래스를 분류할 수 있게 설계합니다. 이러한 구조를 통해 YOLO는 원하는 정보(영역 위치, Objectness, 클래스)를 한 번에 얻어내도록 구성되었습니다.
Two-stage 구조에서는 각 영역 후보마다 이 과정을 각자 따로 계산하는 반면, YOLO에서는 추론해야 할 결과의 수가 영역의 수에서 격자의 수로 변하게 됩니다. 그리고 보통 영역의 수는 1k 단위로 설계되는 반면 격자의 수는 10, 100개의 단위로 만들어지기 때문에 연산 속도를 크게 줄일 수 있습니다.
YOLO 모델의 장 단점
여기까지 YOLO 모델을 간단히 살펴봤습니다. 언급했듯 위의 내용은 앞으로의 시리즈에서도 큰 변화 없이 공통되는 내용이므로 앞서 정리한 YOLO 모델의 특징, 장단점을 짚어봐야 할 필요가 있습니다.
장점
- Two-stage에 비해 빠르다.
- 배경에 대한 positive error가 낮다.
단점
- 작은 물체에 대한 검출 성능이 낮다.
- 겹쳐있는 물체에 대한 성능은 다소 떨어집니다.
YOLO는 결론적으로 정확도를 조금 낮추는 대신 빠른 추론을 얻어낸 모델입니다. 하지만 소폭의 정확도 감소를 충분히 상쇄하고도 남을 빠른 속도를 얻어냅니다. 이미 다양한 실서비스에서 활용되고 있으며 이후 YOLO 시리즈에서는 위의 단점을 개선하기 위한 여러 구조를 제안하여 발표되었으니, 이후 포스트에서 더 다뤄보겠습니다.