인턴일지

[인턴일지] 아홉번째 인턴일지 : segmentation

부농쿼카 2023. 12. 6. 13:11
728x90

드디어 Classification 과제가 모두 끝났습니다.. 한 과제를 끝내고나니 프로젝트 내 새 과제를 받았습니다. 바로 사진 내 특정 부분을 segmentation하는 것인데요, segmentation은 처음 보는 파트이니 우선 개념부터 차례대로 공부해보도록 하겠습니다. 여기서 모델은 U-Net을 우선 사용할 예정입니다. 공부하면서 기록하는 부분이니, 혹시 틀린 부분이 있다면 알려주시면 감사하겠습니다:)

Segmentation 정의

Segmentation이란, 직역하면 분할이라는 의미를 가집니다.  이미지의 Pixcel 수준에서, 각 영역이 어떤 의미를 갖는지 분리해 내는 것을 말합니다.

실생활에서 우리가 만나는 기술 중, 아이폰의 인물사진 모드가 있습니다.

출처 : https://blog.research.google/2017/10/portrait-mode-on-pixel-2-and-pixel-2-xl.html

인물사진 모드는 사진에서, 인물과 배경을 분리합니다, 즉, 인물 pixel과 배경 pixel을 segmentaiton 해냅니다. 그 후 배경 pixel에 blur 처리 한 것을 말합니다.

 

Segmentation 종류

이런 Segmentation도 간단하게 두 종류로 나눌 수 있습니다.

Sementic segmentation

sementic segmentation은 한 이미지 내에 object가 존재하지 않습니다. 픽셀 내에서 위치를 인식하고, 판별하는 동작만을 진행합니다.

Instance segmentation

Instance segmentation은 segmentic segmentation과 다르게, 이미지 내 multi-object가 존재합니다.

 

자세하게 설명을 하자면, 위의 Instance segmentation과 같은 사진을 segmentic segmentation한다면, 개1,개2,고양이3 이렇게 분리될 것입니다. 그러나 위 사진을 Instance segmentation하면서, 닥스훈트, 푸들, 고양이 이런 식으로 개의 종류를 구분할 수 있습니다. 쉽게 말해, segmentation과 object detection이 함께 진행된다고 보시면 됩니다.

 

Sementic segmentation

위 두 종류 중, 제가 맡은 task에서 사용할 segmentation은 sementic  segmentation입니다.  Sementatic segmentation에는 모두 Down sampling과 Upsampling이 사용됩니다.

U-net의 구조

기존 CNN에선 parameter와 차원의 수를 줄이는 layer가 있습니다. 게다가, 마지막 Fully Connected layer를 거치면서 위치데이터가 아예 소실됩니다. 기존엔, CNN을 사용하여 특징을 추출한 후 특징을 통해 뭔가 task를 풀었기 때문에, 위치 데이터가 없어도 큰 문제가 없었습니다. 그러나, segmentation의 경우, 해당 feature(특징)가 어느 위치에 있는지가 중요한 문제가 되기 때문에 기존 CNN처럼 사용할 수 없었습니다.

 

그렇기 때문에, 최대한 위치데이터를 살리면서 동시에 연산량을 좀 줄여주기 위해 Segmentation task에서는 주로 Down sampling과 Up sampling을 사용합니다.

Down sampling

Down sampling을 차원을 축소하여 연산량을 줄여주는 역할을 합니다. 정확한 위치 데이터를 받기 위해선 차원을 축소하지 않는 것이 가장 좋습니다. 그러나 현실적으로 우리가 가지고 있는 GPU의 메모리에는 한계가 있기 때문에, 최대한 위치데이터를 살리며 차원을 축소합니다.

 주로 stride 2 이상의 Convolution을 사용하거나, pooling layer를 사용하여 차원을 축소해줍니다. 우리는 이러한 Down sampling 부분을 Encoder(인코더)라고 부릅니다. 

 

Upsampling

Upsampling은 output으로 나오는 결과의 차원이 input 데이터와 같은 차원으로 나올 수 있도록 하기 위해 차원을 확장해줍니다. 주로 Stride Transpose Convolution을 사용합니다. 우리는 이러한 Up sampling 부분을 Decoder(디코더)라고 부릅니다. 

 

이렇게 간단하게 Segmentation의 정의에 대해 알아보았습니다. 다음 포스팅에서 이번 task에 사용할 U-net 구현과정에 대해 설명드리겠습니다.

728x90