본문 바로가기

Deep Learning/Convolution Neural Network

Semantic Segmentation (1): Sliding Window

본 글은 'Standford University CS231n, Spring 2017'의 lecture 11 강의를 참고하여 작성하였으며

semantic segmentation에서 가장 간단하게 적용 및 생각할 수 있는 방법론인 sliding window 방법에 대해 살펴보고자 합니다.

 

[Figure 1] Semantic Segmentation

※ 다른 computer vision task(→ Classifcation 500)와의 차이점에 대한 설명은 아래 글을 참고하시기 바랍니다.

 

Computer Vision Task 개요

▶ 개요 Computer vision에는 크게 4가지의 task가 존재합니다. 1. Semantic Segmentation 이미지 안의 모든 픽셀(pixel)들에 대해서 classification(or categorize)을 합니다. (예시) [Figure 1]에서의 'senmantic segmentation'은

iy322.tistory.com


0. Semantic Segmentation이란?

먼저, [Section 0]에서 Semantic segmentation에 대해 설명하고자 합니다.

Semantic Segmentation은 이미지 안의 모든 픽셀(pixel)들에 대해서 classification(or categorize)을 합니다.

 

Semantic Segmentation의 입력값은 이미지이고 출력값은 이미지의 모든 픽셀(pixel)의 라벨입니다.

  • Input(입력값): Image data
  • Output(산출값): 이미지에 존재하는 모든 픽셀(pixel)의 label(or class, category)

[예시]

[Figure 2] Example of Semantic Segmentation

[Figure 2]에는 각각 (Fig 2.1). 고양이가 잔디 위에 그림과 (Fig 2.2) 소가 잔디 위에 있는 그림입니다.

 

  • 입력값은 이미지 데이터이며
  • 출력 값은 (Fig 2.1)의 경우는 모든 각 픽셀에 대해서 'Cat', 'Sky', 'Trees', 'Grass' 중 하나로 분류합니다.
    (Fig 2.2)의 경우는 모든 각 픽셀에 대해서 'Cow', 'Sky', 'Trees', 'Grass' 중 하나로 분류합니다.

이처럼 Semantic segmentation에서도 Image classification에서처럼 카테고리가 존재합니다.

다만, Image Classification처럼 이미지 전체에 카테고리가 하나가 아니라 모든 픽셀(pixel)에 카테고리가 매겨지는 형태입니다.


▶ Key point

(Fig 2.2)에서 알 수 있듯이 같은 카테고리에 속하는 개별 객체끼리는 서로 구분이 불가능합니다. Semantic Segmentation의 경우, 각 픽셀들이 각 클래스에 대해 포함 여부(→ 포함되면 $1$, 아니면 $0$)를 확인하기 때문입니다.

 

[예시]

먼저, 이미지 안의 모든 픽셀(pixel)에 대해서 어떤 카테고리에 속하는지에 대한 'Semantic Label'을 구해줍니다.

[Figure 3] Example of Semantic Segmentation

[Figure 3]의 경우 총 $5$개의 카테고리가 존재하며 각 픽셀마다 어떤 카테고리에 속하는지에 대한 라벨을 구해줬습니다.

그 다음, 각 픽셀별로 각 카테고리에 속하면 $1$, 아니면 $0$(   원-핫 인코딩(one-hot encoding))으로 포함 여부를 계산하면 총 $5$개의 출력 채널이 만들어집니다. 

 

$5$개의 출력 채널에 대해서 argmax를 통해 하나의 출력 맵을 구합니다. 

 

결국, 같은 카테고리에 속하는 객체끼리의 구분은 불가능함을 알 수 있습니다.


만약, 같은 카테고리에 속하는 객체끼리도 구분(segmentation)이 필요하다면 Instance Segmentation을 사용해야 합니다.

 

Instance Segmentation의 경우, 같은 카테고리에 속해도 구분이 가능하지만 그만큼 계산 비용이 큽니다. 따라서, 각 상황에 맞게 Semantic SegmentationInstance Segmentation 중 선택해서 사용하시면 됩니다. Instance Segmentation에 대한 자세한 내용은 추후에 살펴볼 예정이고 본 글에서는 Semantic Segmentation에 초점을 맞추었습니다.


1. Sliding window approach

Semantic segmentation 방법론 중 가장 직관적으로 생각할 수 있는 기법인 'Sliding window' 방법론에 대해 살펴보겠습니다.

 

Sliding window 방법론은

이미지를 아주 작은 패치(patch or window)로 분할하여 각 패치별로 image classification model을 적용하는 기법입니다.

 

[예시]

[Figure 4]. Sliding window

[Step 1]. 소의 머리 주변 영역에서 3개의 패치(patch)를 추출하였습니다.

[Step 2]. 각 패치별로 CNN 모델을 활용하여 어떤 카테고리에 속하는지 classification을 진행하였습니다. 

 

즉, 해당 패치가 어떤 카테고리에 속하는지를 예측하기 위해 이미지 한 장을 분류하기 위해 만든 image classification model을 이용해서 이미지의 작은 영역인 패치에 적용한 것입니다. 

 

이미 짐작하셨을수도 있듯이 계산 비용이 엄청 크다는 단점이 존재합니다.

 

[Disadvantage: Expensive cost]

이미지를 작은 영역(→ 패치)으로 쪼개고 이 모든 영역에 대하여 개별적으로 모델을 적용하여 forward propagation(순전파)/backward propagation(역전파)를 진행하면 상당히 비효율적으로 비용이 엄청나게 큽니다. 

 

또한, 만약 서로 다른 패치끼리 인접해 있거나 겹쳐있는 경우(    overlap) 같은 특징들을 공유해버리는 computation sharing 문제도 발생합니다.

 

 현재 sliding window 기법은 계산 비효율성 문제로 사용을 거의 안 하며 이를 보완한 방법론인 fully convolution network에 대해서 다음 글에서 살펴보고자 합니다.

 

'Deep Learning > Convolution Neural Network' 카테고리의 다른 글

Computer Vision Task 개요  (0) 2024.03.20
LeNet-5  (0) 2024.03.19
Convolution Layer 개요  (0) 2024.03.18