귀퉁이 서재

컴퓨터 비전 - 9. 객체 탐지(Object Detection) 개요 본문

컴퓨터 비전

컴퓨터 비전 - 9. 객체 탐지(Object Detection) 개요

Baek Kyun Shin 2023. 3. 14. 22:38

이번 글에서는 객체 탐지에 관해 알아보겠습니다. 더불어 이미지 분류, Localization, 객체 탐지, 세그멘테이션이 무엇이고, 서로 어떻게 다른지 알아본 뒤, 객체 탐지의 구조와 객체 탐지가 어려운 까닭에 관해 알아보겠습니다.

1. 분류, Localization, 객체 탐지, 세그멘테이션

가장 먼저, 분류, Localization, 객체 탐지, 세그멘테이션이 각각 어떤 뜻인지 알아보겠습니다. 다음 그림을 보시죠.

출처 https://www.oreilly.com/library/view/deep-learning-for/9781788295628/4fe36c40-7612-44b8-8846-43c0c4e64157.xhtml

 분류(Classification)는 해당 이미지가 어떤 객체(물체)를 나타내는지 분류하는 작업입니다. 가장 간단한 딥러닝 작업이죠. 개와 고양이를 분류하는 예가 있습니다.

 Localization은 이미지 안에 있는 하나의 객체 위치를 찾아주는 작업입니다. 위 그림에서 보시는 바와 같이 네모 박스로 고양이 위치를 표시해줬습니다. 이렇게 객체 위치를 표시하는 네모 박스를 경계 박스(Bounding Box)라고 합니다. 객체의 위치를 찾는 작업은 회귀(Regression) 문제입니다. 위치, 곧 x, y 좌표를 찾는 문제죠. 좌표는 연속된 값이라서 회귀입니다. 정리하면 Localization은 이미지 분류와 회귀라는 두 문제가 합쳐진 작업입니다. 그만큼 분류 하나만 수행하는 일보다 어렵겠죠?  

<NOTE> 회귀란?
회귀란 독립변수(피처)와 종속변수(타깃값) 간 관계를 모델링하는 방법입니다. 회귀가 분류와 다른 점은 종속변수(타깃값)가 범주형 데이터가 아니라는 것입니다. 회귀 문제에서 ‘종속변수는 수치형 데이터’입니다. 위 예시에서 고양이와 개를 구분하는 작업은 분류이지만, 고양이와 개의 위치(연속된 값) 찾는 작업은 회귀입니다.

그럼 어떤 방식으로 분류와 Localization을 수행하는지 알아보시죠.

첫 번째는 이미지 분류를 수행하는 방식입니다. CNN을 활용해 원본 이미지에서 특성을 추출하고, 최종적으로 Softmax로 확률을 예측합니다. 위 예시에서는 고양이일 확률 90%, 개일 확률 10%로 나왔네요. 이렇듯 분류 작업은 해당 이미지가 어떤 객체(물체)인지 확률로 판별합니다. 우리가 흔히 신경망으로 하는 작업이죠.

Localization은 물체의 위치 좌표를 찾는 일이라고 했죠. 이미지 분류와 더불어 Localization까지 수행하려면 출력 단계의 신경망 구조를 조금 바꿔야 합니다. 곧, 경계 박스의 좌표를 나타내는 네 가지 출력을 더해야 합니다. 곧, 회귀 구조를 더해야 합니다. 경계 박스의 좌표값을 찾아주는 '경계 박스 회귀'를 수행하는 방식입니다. 이때는 원본 이미지와 함께 Annotation(객체 클래스명과 경계 박스 위치 좌표값 등의 정보)이 데이터로 필요합니다. 그래야 해당 객체가 어떤 위치에 있는지 학습할 수 있습니다. Localization을 수행하도록 신경망의 마지막 계층을 조금 수정해주면 최종적으로 객체 예측 확률과 경계 박스 좌표까지 출력합니다. 이렇게 네 가지 경계 박스 좌표 변수를 더해서 객체 분류 확률뿐 아니라 경계 박스의 위치를 나타내는 네 가지 변수도 함께 학습하는 것입니다.

 객체 탐지(Object Detection)는 이미지 안에 있는 여러 객체들의 위치를 찾아내고, 각각 분류까지 하는 작업입니다. 여러 객체를 탐지해야 하므로 하나의 객체 위치만 찾는 Localization에 비해 더 어렵습니다.

 세그멘테이션(Segmentation)은 객체 탐지보다 더 발전된 단계로, 픽셀 단위로 객체를 탐지하는 작업입니다. 맨 위 그림에서 보시는 바와 같이, 경계 박스가 아니라 고양이와 개의 형태에 따라 정확히 위치를 찾았습니다. 픽셀 단위로 말이죠. 위치를 정확히 찾아야 하니 객체 탐지보다 더 어렵겠죠? 곧, 세그멘테이션 > 객체 탐지 > 분류 + Localization > 분류순으로 어려운 작업입니다.

① 분류와 ② Localization은 하나의 객체를 바탕으로 수행하고, ③ 객체 탐지와 ④ 세그멘테이션은 여러 객체를 바탕으로 수행합니다. 아울러, Localization, 객체 탐지, 세그멘테이션은 객체 위치까지 찾아냅니다.

2. 객체 탐지가 어려운 까닭

앞서 객체 탐지가 분류나 Localization에 비해 어렵다고 했죠? 그 까닭은 크게 네 가지입니다.

  1. 분류(객체 분류)와 회귀(경계 박스의 위치를 찾는 일)를 모두 적용해야 하기 때문에 -
    • 당연하겠죠. 하나의 작업이 둘로 늘어났으니 말입니다.
  2. 다양한 크기와 모양을 갖는 객체가 섞여 있기 때문에 -
    • 이미지 안에 여러 객체가 있다면, 이 모든 걸 다 검출하기가 쉽지 않습니다. 
  3. 객체 탐지를 실시간으로 해야 하는 경우가 많아서 -
    • 자율 주행차를 생각해보죠. 자율 주행차에서 객체 탐지를 이용하려면 실행 시간이 즉각이어야 합니다. 지연 시간이 있어서는 안 되죠. 그만큼 객체 탐지 속도가 빨라야 합니다. 그런데 객체 탐지 성능이 좋으면 탐지 시간이 느려지고, 탐지 시간을 빠르게 하려면 성능이 나빠집니다. 트레이드오프(Trade-off) 관계죠. 실시간으로 하면서도 성능을 높여야 하니 객체 탐지가 쉬운 작업이 아닙니다.
  4. 전체 이미지에서 배경이 차지하는 비중이 크기 때문에 -
    • 전체 이미지를 샅샅이 훑어가면서 객체를 찾는다고 합시다(실제로 다음 글에서 알아볼 영역 추정 기법은 이런 방식으로 후보 객체 영역을 찾습니다). 그런데 전체 이미지에서 배경이 차지하는 영역이 크다면 객체를 찾는 일이 어려울 겁니다. 넓은 백사장에서 특정 물건을 찾아야 하는 경우를 생각해보면 이해가 쉽습니다. 객체의 영역이 넓다면 객체를 쉽게 찾겠지만 대부분의 이미지는 배경이 차지하는 영역이 넓습니다. 이러한 이미지 특성도 객체 탐지를 어렵게 하는 요인이 되겠죠.

이상으로 객체 탐지에 관해 개괄적으로 알아봤습니다. 다음 글에서는 초기 객체 탐지 모델인 R-CNN, SPP-net, Fast R-CNN, Faster R-CNN에 대해 살펴보겠습니다.


참고 자료

DeepLearningAI - "C4W3L01 Object Localization"

권철민 - "딥러닝 컴퓨터 비전 완벽 가이드"

Comments