귀퉁이 서재

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

딥러닝 컴퓨터 비전

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

Baek Kyun Shin 2022. 4. 24. 13:47

※ 이 글은 권철민 님의 딥러닝 컴퓨터 비전 완벽 가이드 강의를 바탕으로 작성했습니다.

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

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

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

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

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

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

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

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

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

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


일반적인 객체 탐지 모델의 구조

객체 탐지 모델은 다음과 같은 구조로 이루어져 있습니다. 크게 세 가지 구조입니다. Backbone(척추), Neck(목), Head(머리)인데요, 사람의 몸을 본 딴 것이죠.

출처: Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, and Piotr Dollar. Focal loss for dense object detection. In Proceedings of the IEEE international conference on computer vision, pages 2980-2988, 2017

① Backbone은 척추에 해당하는 부분으로, 이 구조에서는 이미지 분류 모델을 사용합니다. 특성 검출기(Feature Extractor) 역할을 합니다.

② Neck은 원래 객체 탐지 모델에 없던 영역입니다. 원래는 Backbone과 Head만 있었는데 FPN(Feature Pyramid Network)라는 구조를 사용하면서 Neck이 더해졌습니다. Backbone에서 사용하는 특성 검출기의 문제는 작은 객체를 잘 찾지 못한다는 점입니다. 그런데 FPN을 사용하면 작은 객체도 잘 찾을 수 있습니다. FPN에 관해서는 차차 알아볼 예정입니다.

마지막으로 ③ Head에서는 여러 객체의 경계 박스를 찾아주고(경계 박스 회귀), 해당 경계 박스에 있는 객체가 무엇인지 분류합니다. 앞서 말했듯 회귀와 분류를 동시에 하는 거죠. 

전체 구조만 간단히 알아봤습니다. 자세한 내용은 다음에 다루겠습니다.


객체 탐지가 어려운 까닭

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

  1. 분류(객체 분류)와 회귀(경계 박스의 위치를 찾는 일)를 모두 적용해야 하기 때문에
  2. 다양한 크기와 모양을 갖는 객체가 섞여 있기 때문에
  3. 객체 탐지를 실시간으로 해야 하는 요구가 많아져서
    (객체 탐지 성능이 좋으면 탐지 시간이 느려지고, 탐지 시간을 빠르게 하려면 성능이 나빠짐)
  4. 전체 이미지에서 배경이 차지하는 비중이 크기 때문에
  5. 훈련할 수 있는 데이터셋(Dataset)이 부족해서
    (이미지마다 annotation(객체 클래스명과 경계 상자 위치 등의 정보)을 만들어야 하므로 데이터셋 생성이 힘듦)

이상으로 객체 탐지에 관해 개괄적으로 알아봤습니다.

0 Comments
댓글쓰기 폼