Segmentation과 보간법

김태훈·2023년 10월 26일
0
post-thumbnail

Image Segmentation 과정을 진행하면서 Mask 파일을 Resize를 할 때 주의해야할 점이 있다.

바로 보간법에 따른 결과 차이이다.

우선 보간법이란 무엇인가?

보간(Interpolation)이란?

보간은 두 점을 사이의 값을 어떠한 값으로 채워 연결하는 방법이다. 이미지에서 두 점은 두 픽셀을 의미한다.

이미지의 크기를 변환하는 과정에서 보간이 자주 쓰인다.

가령 3×33 \times 3의 해상도를 갖는 이미지를 5×55\times 5 크기의 이미지로 키운다고 해보자

이미지의 빈 공간을 어떻게 채울까?

이미지의 빈 공간을 채우기 위해서 결국 보간법이 사용된다.

대표적으로 사용하는 이미지 보간법에는 두가지가 있다.

이웃보간법(Neighborhood Interpolation)

빈 공간을 이웃한 값으로 채우는 방법으로 가장 간단한 방법이다.

양선형보간법(Bi-Linear Interpolation)

두 점 사이의 빈 공간을 각 거리간 비율로 계산하는 방법이다.

가령 두 점의 값이 x, y이며 두 점 사이를 양선형 보간법으로 채우는 경우 다음과 같다.

이를 활용해 이미지에 적용하면 다음과 같다.

Mask Resize에서 문제점

Segmentation Mask 파일에서 각 픽셀의 값은 클래스의 값을 의미한다.

가령 {0: 배경, 1: 강아지, 2: 비행기, 3: 고양이}의 클래스 값을 가진다고 정의해보고 이를 이용해 가상의 Segmentation Mask를 만들면 다음과 같다.

이 Segmentation Mask에 위 두 보간법을 적용한 결과를 보이고 문제점을 보면 다음과 같다.

이웃 보간법

무난한 보간법이지만 주변의 픽셀들을 고려하지 않는다는 점이 있다.

양선형 보간법

주변픽셀들을 고려하여 보간을 하지만 적절하지 않다.

그 이유는 클래스 번호 사이의 관계 때문이다.

0번과 2번 사이에서 양선형 보간을 통해 1을 얻어냈다고 하지만 0(배경)과 2(비행기)사이의 평균이 1(강아지)를 의미하지 않는다.

특히 양선형 보간법의 특성상 정수 값이 나오지 않게 되는데 이는 클래스 번호의 의미와도 맞지 않는다.

이러한 특성 때문에 Mask를 Resize 해주기 위해서는 보간법을 주의하며 해야한다.

그렇다면 만약 양선형보간법을 쓰고 싶다면 어떻게 해야할까?

Mask에서의 양선형보간법

Mask에서 양선형보간법을 사용하기 위해서는 One-Hot Encoding과 argmax를 활용하면 된다.

One-Hot Encoding이란?
클래스의 갯수에 맞게 픽셀의 공간을 확장시켜 클래스 번호에 맞는 공간에는 1 나머지 공간에는 0을 통해 클래스를 인식시키는 방법

Argmax란?
특정 축으로 볼 때 제일 큰 값의 인덱스를 리턴하는 것

양선형 보간법을 적용하는 과정은 다음과 같다.

  1. One-Hot Encoding을 적용한다.

  1. Resize를 진행한다.

  1. Argmax를 적용한다.

결과 비교

결론

이웃 보간법도 충분히 쓸만하지만 주변 픽셀의 관계를 고려하여 Resize를 하고 싶은 경우에는 One-Hot Encoding과 Argmax를 같이 사용하는 것이 좋다.

profile
👋 인공지능을 통해 다음 세대가 더 나은 삶을 살도록

0개의 댓글