본 글은 'Standford University CS231n, Spring 2017'의 lecture 11 강의를 참고하여 작성하였으며
semantic segmentation에서 가장 간단하게 적용 및 생각할 수 있는 방법론인 sliding window 방법에 대해 살펴보고자 합니다.
※ 다른 computer vision task(→ Classifcation 500)와의 차이점에 대한 설명은 아래 글을 참고하시기 바랍니다.
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]에는 각각 (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]의 경우 총 $5$개의 카테고리가 존재하며 각 픽셀마다 어떤 카테고리에 속하는지에 대한 라벨을 구해줬습니다.
그 다음, 각 픽셀별로 각 카테고리에 속하면 $1$, 아니면 $0$( → 원-핫 인코딩(one-hot encoding))으로 포함 여부를 계산하면 총 $5$개의 출력 채널이 만들어집니다.
$5$개의 출력 채널에 대해서 argmax를 통해 하나의 출력 맵을 구합니다.
결국, 같은 카테고리에 속하는 객체끼리의 구분은 불가능함을 알 수 있습니다.
만약, 같은 카테고리에 속하는 객체끼리도 구분(segmentation)이 필요하다면 Instance Segmentation을 사용해야 합니다.
Instance Segmentation의 경우, 같은 카테고리에 속해도 구분이 가능하지만 그만큼 계산 비용이 큽니다. 따라서, 각 상황에 맞게 Semantic Segmentation과 Instance Segmentation 중 선택해서 사용하시면 됩니다. Instance Segmentation에 대한 자세한 내용은 추후에 살펴볼 예정이고 본 글에서는 Semantic Segmentation에 초점을 맞추었습니다.
1. Sliding window approach
Semantic segmentation 방법론 중 가장 직관적으로 생각할 수 있는 기법인 'Sliding window' 방법론에 대해 살펴보겠습니다.
Sliding window 방법론은
이미지를 아주 작은 패치(patch or window)로 분할하여 각 패치별로 image classification model을 적용하는 기법입니다.
[예시]
[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 |