선택적 탐색(Selective Search) 알고리즘 : 컴퓨터 비전에서의 물체 탐색 알고리즘

1. Selective Search란?

 

선택적 탐색(Selective Search)은 컴퓨터 비전에서 사용되는 알고리즘 중 하나로, 이미지 내에서 물체를 탐색하는데 사용됩니다. 이 알고리즘은 이미지 내의 가능한 모든 물체의 위치를 찾아내는 '영역 제안(Region Proposal)' 과정을 통해 작동합니다.

 


선택적 탐색은 다음과 같은 순서로 작동합니다.

 

  • 이미지 세그멘테이션 : 먼저, 이미지는 작은 지역들로 분할(세그멘테이션)됩니다. 이러한 세그멘테이션은 이미지의 각 부분이 어떻게 서로 연관되어 있는지를 파악하는데 도움을 줍니다.
  • 영역 제안 생성 : 다음으로, 유사한 세그먼트들이 그룹화되어 더 큰 영역을 형성합니다. 이러한 영역은 물체가 위치할 수 있는 잠재적인 위치를 나타냅니다.
  • 유사성 계산 : 마지막으로, 각 영역 간의 유사성이 계산됩니다. 이를 통해 각 영역이 얼마나 유사한지를 파악하고, 유사한 영역들을 병합하여 더 큰 영역을 형성합니다. 이렇게 생성된 영역들은 물체 탐지 알고리즘에 전달되어 사용됩니다.

 


2. 선택적 탐색의 작동 원리


2.1 이미지 세그멘테이션

 

이미지 세그멘테이션은 디지털 이미지를 여러 세그먼트(부분)으로 나누는 과정을 의미합니다. 이러한 세그먼트는 의미있는 정보를 포함하는 이미지의 영역을 나타냅니다. 즉, 세그멘테이션은 이미지 내의 관심 영역을 정의하거나 표시하는 데 사용됩니다.



선택적 탐색에서의 이미지 세그멘테이션은 '과잉 세그멘테이션'(over-segmentation)이라고도 불리는 초기 단계입니다. 이 단계에서 이미지는 아주 작은 지역들로 분할되며, 이들 각각은 개별 픽셀 또는 픽셀 그룹을 나타냅니다. 이러한 과잉 세그멘테이션의 목표는 가능한 모든 물체와 그 배경을 포착하는 것입니다.



이런 과정에서 사용하는 알고리즘은 Felzenszwalb and Huttenlocher의 방법이나 Mean-Shift와 같은 방법이 일반적입니다. 이러한 방법들은 각각의 픽셀이나 픽셀 그룹에 대해 색상, 질감, 방향 등의 특징을 이용하여 유사한 특징을 가진 그룹들을 세그먼트로 묶습니다. 따라서 이미지 세그멘테이션은 이미지의 전체적인 구조를 이해하고, 그 안에 있는 물체나 특징을 식별하는 데 근본적으로 중요한 단계입니다.

 


2.2 영역 제안 생성

 

영역 제안 생성은 이미지 세그멘테이션 후에 이루어지는 과정입니다. 이 과정에서는 초기에 생성된 세그먼트들을 조합하여 이미지의 보다 큰 부분을 나타내는 "영역 제안" 또는 "영역 후보"를 만들어냅니다. 이러한 영역 제안들은 원래 이미지에서 물체가 존재할 가능성이 있는 위치와 크기를 나타냅니다.



선택적 탐색에서는 유사한 세그먼트들을 하나의 그룹으로 병합하는 방식으로 이를 수행합니다. 이 때 유사성은 색상, 질감, 크기 및 형태 등의 특징을 기반으로 계산됩니다. 예를 들어, 두 세그먼트가 비슷한 색을 가지고 있다면 이 둘은 같은 그룹에 속하는 것으로 간주될 수 있습니다. 이 과정은 더 이상 병합할 유사한 세그먼트가 없을 때까지 반복적으로 수행됩니다.


병합 과정에서 생성되는 각각의 영역 제안은 물체 탐지 알고리즘에 사용될 수 있습니다. 이렇게 생성된 영역 제안들을 사용하면 전체 이미지를 검색하는 대신에, 이들 제안 영역 내에서만 물체를 탐색하므로 계산 효율성이 크게 향상됩니다. 이런 방식은 실제로 물체가 존재할 수 있는 영역을 정확하게 식별하는 데 도움을 주며, 이는 물체 탐지의 정확성을 높이는 데 중요한 요소입니다.

 


2.3 유사성 계산

 

선택적 탐색 알고리즘에서 유사성 계산은 영역 제안 생성 과정의 핵심 부분입니다. 이 과정에서는 서로 다른 세그먼트 또는 그룹간의 유사성을 계산하여, 그들을 병합할지 여부를 결정합니다. 유사성 계산은 다양한 요소를 기반으로 합니다. 선택적 탐색에서는 색상, 질감, 크기, 그리고 모양을 고려하여 유사성을 계산합니다.

 

  • 색상: 색상 분포가 유사한 세그먼트들은 높은 유사성 점수를 가집니다.
  • 질감: 질감(예: 세그먼트 내의 미세한 패턴 또는 변화)이 유사한 세그먼트들 역시 높은 유사성 점수를 가집니다.
  • 크기: 크기가 작은 세그먼트들은 먼저 병합됩니다. 이는 물체의 작은 부분이나 노이즈를 처리하기 위함입니다.
  • 모양: 서로 인접하며 비슷한 형태를 가진 세그먼트들은 높은 유사성을 가집니다.

 

유사성 계산은 이미지 내의 물체와 배경을 구분하고, 이미지에서 물체를 탐색하는 데 중요한 역할을 수행합니다. 이를 통해 물체 탐지 알고리즘의 효율성과 정확도를 향상시킬 수 있습니다.

 


3. 장, 단점

 

선택적 탐색(Selective Search) 알고리즘은 컴퓨터 비전에서 물체 탐지에 있어 다양한 장점을 가지고 있지만, 동시에 몇 가지 단점도 있습니다.

 

3.1 장점

 

  • 효율성: 전체 이미지를 탐색하는 대신, 선택적 탐색은 이미지 내의 특정 영역만을 집중적으로 검사합니다. 이를 통해 계산 효율성을 크게 향상시킬 수 있습니다.
  • 다양성: 선택적 탐색은 다양한 스케일과 모양의 물체를 잘 탐색할 수 있습니다. 이는 물체의 색상, 크기, 질감 등 다양한 특징을 고려하기 때문입니다.
  • 과잉 세그멘테이션: 초기 세그멘테이션 단계에서 모든 가능한 물체와 배경을 포착하려는 '과잉 세그멘테이션' 접근 방식을 사용합니다. 이를 통해 세부적인 물체 구조까지 포착할 수 있습니다.

 

3.2 단점

 

  • 정확성: 선택적 탐색은 영역 제안이라는 방법을 사용하므로, 어떤 물체를 완전히 놓치거나 부분적으로만 포착하는 경우가 있을 수 있습니다. 또한, 실제 물체가 아닌 배경을 물체로 잘못 탐지할 수도 있습니다.
  • 최적의 파라미터 설정: 선택적 탐색의 성능은 세그멘테이션 방법, 유사성 측정 기준 등 다양한 파라미터에 크게 의존합니다. 따라서, 특정 상황에 최적화된 파라미터를 찾는 것은 어려울 수 있습니다.

4. Selective Search 코드 구현

 

Selective Search에서는 픽셀 유사성에 따라 초기 세그먼트를 형성하고, 그런 다음 이 세그먼트를 병합하여 더 큰 region proposals를 형성하는 방식으로 작동합니다. 이 병합은 'fast' 모드와 'quality' 모드 중에서 선택할 수 있는데, 'quality' 모드는 보통 더 크고, 복잡한 region proposals를 생성합니다.

 

(좌) quality 모드, (우) Search 모드

 

import cv2
import matplotlib.pyplot as plt

# 이미지 로드
img = cv2.imread('image_path.jpg')

# Selective Search 시작
ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
ss.setBaseImage(img)

# Selective Search 모드 설정
#ss.switchToSelectiveSearchFast()

# Selective Search 모드를 'quality'로 변경
ss.switchToSelectiveSearchQuality()

# Region Proposals 생성
rects = ss.process()
print('Total Number of Region Proposals: {}'.format(len(rects)))

# 이미지에 Region Proposals 그리기
out_img = img.copy()

# 상위 100개의 Region Proposals만 그리기
for i, rect in enumerate(rects):
    if (i < 100):
        x, y, w, h = rect
        cv2.rectangle(out_img, (x, y), (x+w, y+h), (0, 255, 0), 1, cv2.LINE_AA)

plt.imshow(out_img)
plt.show()