[Image Segmentation]
[목적]
computer vision 및 digital image processing의 sub-domain이며
이미지의 유사한 영역 또는 부분(segment)를 해당 클래스 레이블로 그룹화 하는 것을 목표로 함
object가 있는 위치, 해당 object의 모양, 어떤 pixel이 어떤 object에 속하는지 등을 알려고 할 때
[개요]
전체 프로세스가 디지털이기 때문에, 아날로그 이미지를 pixel 형태로 표현할 수 있으므로,
부분(segment)를 구성하는 작업이 픽셀을 그룹화하는 작업과 동일
[Recognition + Localization]
Image segmentation은 Image recognition의 확장으로 recognition 외에도 localization을 수행한다.
Image Segmentation은 object의 boundary를 참조하여
해당 object가 있는 location를 정확히 가리키는(pinpointing) 모델을 사용하는 이미지 분류의 superset.
[Encoder + Decoder]
Computer vision에서 대부분의 image segmentation model은 encoder-decoder 구조로 구성.
Encoder : Input의 latent space representation을 encoding하고
Decoder : encoder로부터 encoding된 정보로부터 decoding하고 segment map을 형성한다.
Decoder로부터 나온 segment map은 이미지에서 각 개체의 위치를 나타내는 지도로 볼 수 있다.
Image Segmentation tasks의 종류
Image segmentation task는 전달하는 정보의 양과 유형에 따라 세 그룹으로 분류 가능
[1. Semantic segmentation]
- Image의 pixel을 semantic(의미론적)으로 분류하는 것.
- 특정 클래스에 속하는 pixel은 단순히 해당 클래스로 분류(다른 정보나 context를 고려하지 않음)
- 위와 같은 특징 때문에 이미지에 동일한 클래스의 여러 instance가 밀접하여 단일로 그룹화된다는 단점이 있다(instance를 각각 구분하지 못함).
- 이로 인해, 이미지에 대한 심층적인 세부 정보 또는 정보가 거의 제공되지 않음.
[2. Instance segmentation]
- 클래스가 아닌 "Instance"를 기반으로 픽셀을 범주로 분류
- 분류된 영역이 속한 클래스에 대한 개념이 없지만 boundary를 기반으로 겹치거나,
매우 유사한 object region을 분리할 수 있다.
- 만약 군중의 이미지가 있다면 (이상적으로는) 각각의 사람을 모두 분리할 수 있지만,
각 영역/객체가 어떤 instance인지는 예측할 수 없음.
[3. Panoptic segmentation]
- Object의 각 Instance를 분리하고 Object의 identity을 예측하는
semantic segmentation과 instance segmentation의 조합
- 주변 환경에 대한 방대한 양의 정보를 캡처해야 하는 환경에서 적용 가능성 있음
(자율 주행 시스템 등)
[Traditional Image Segmentation Techniques]
Region growing 및 snakes 알고리즘과 같은 방법을 사용하여
초기 영역을 설정하고 알고리즘이 픽셀 값을 비교하여 segment map에 대해 아이디어를 얻는다.
[local veiw]
이는 이미지의 feature를 local view로 가지고, pixel 단위의 local difference와 gradient에 중점을 두었다.
[global view]
Input 이미지에 대한 global view를 가지는 알고리즘은, 고전적인 image processing method 중에서
adaptive thresholding, Otsu의 알고리즘, clustering algorithms과 같은 방법과 함께 등장.
[Thresholding]
- Pixel을 두 class로 나누기 위해 threshold가 설정됨
- threshold 보다 큰 pixel 값을 가지면 pixel은 1로 설정되고, threshold 보다 작은 값을 가지는 pixel은 0으로 설정됨
(if pixel > threshold 1, else 0)
- Thresholding의 결과로 이미지가 binary map으로 변환되어, 종종 binarization이라고 하는 프로세스가 발생
(binarization)
- Threshold 값은 두 대상 class 간의 pixel difference가 매우 큰 경우에 매우 유용 -> 보통 평균값을 threshold로 삼음
Image binarization에 자주 사용되므로 binary image에서만 작동하는
contour detection 및 identification과 같은 추가 알고리즘을 사용할 수 있음.
[Region-Based Segmentation]
- 인접한 픽셀 간의 유사성을 찾고, 공통 클래스로 그룹화하여 작동
일반적인 segmentation procedure은 일부 pixels에 대하여 seed pixels로 설정하고,
알고리즘은 seed pixels의 immediate boundaries를 감지하여, similar or dissimilar를 분류한다
- immediate neighbors는 시드로 처리되고 전체 이미지가 segmented 될 때까지 반복.
ex) watershed algorithm
[Edge Segmentation]
- 이미지의 모서리를 감지하는 작업(edge detection)
- segmentation-based 관점에서 edge detection은 이미지의 어떤 pixel이 edge pixel인지 분류하고
그에 따라 별도의 클래스에서 해당 edge pixel을 선별하는 것으로 볼 수 있다.
- 일반적으로 convolution 시 이미지의 edge를 제공하는 특수 필터를 사용하여 수행.
- 이러한 필터는 spatial plance의 x 및 y 좌표에서 이미지 gradients를 추정하는 전용 알고리즘에 의해 계산.
ex) Canny edge detector
[Clustering-based Segmentation]
- 다른 알고리즘보다 성능이 우수하고 짧은 시간에 합리적으로 좋은 output을 낼 수 있음.
- 공통 속성을 가진 픽셀을 특정 segment에 속하는 것으로 함께 clustering하여 작동되는 unsupervised 알고리즘
ex) K-means clustering
[Deep Learning-based method]
Semantic segmentation model은 제공되는 입력에 해당하는 출력으로 segment map을 제공
이런 segment map은 종종 n 채널로 구성되며, n은 모델이 segment해야 하는 클래스 수.
이러한 각각의 n 채널은 본질적으로 binary하여 object location은 1로 채워지고 empty region은 0으로 구성
Ground truth map은 input과 size가 같고, 범위가 n인 single channel integer array,
각 segment는 해당 클래스의 index 값으로 채워진다.
(클래스는 0에서 n-1로 indexing 됨)
(위 그림에서 Plant/Grass의 그림이 잘못 표현된 거 같다. 3이 아닌 1이 되어야 할거다)
n channel binary format의 model output은 prediction의 2차원 one-hot encoding 표현.
segmentation을 수행하는 신경망은 일반적으로 encoder 다음에 bottleneck 구조가 있으며,
bottleneck으로부터 decoder 혹은 upsampling layers가 있다.
[Convolutional Encoder-Decoder Architecture]
Semantic segmentation을 위한 encoder-decoder 구조는 SegNet을 통해 인기를 얻음.
SegNet은
(encoder)
convolutional과 downsampling block을 조합하여 사용해
정보를 bottleneck 상태로 압축하고, input의 representation을 형성.
(decoder)
decoder는 입력 정보를 재구성하여 입력의 영역을 강조 표시하고
해당 클래스 아래에 그룹화하는 segment map을 형성.
Decoder의 마지막 부분에서는 (0, 1) 범위의 output으로 표현하기 위해서 sigmoid activation을 가진다.
U-Net은
(skip-connection)
- 일반적인 encoder-decoder 구조의 downsampling layer에서 확인되는,
information loss에 대한 해결책으로 skip connection을 도입
- Skip connection은 bottleneck layer를 거치지 않고 encoder에서 decoder로 직접 이동하는 연결
- 이는, 다양한 level의 encoded representations가 캡쳐되어 decoder의 feature map에 concatenate 됨.
- 이는 pooling 및 downsampling을 통해 발생하는 data loss를 줄이는데 도움이 됨
Deeplab은
pooling 작업을 대체하고 down-sampling 중 심각한
information loss를 방지하는 atrous convolution을 사용
Atrous Spatial Pyramid Pooling의 사용으로 multi-scale feature extraction을 도입하여
object 크기에 상관없이 segmentation을 수행
Boundary information를 복구하기 위해 fully connected CRF(Conditional Random Fields)를 사용.
참고
https://www.v7labs.com/blog/image-segmentation-guide
'딥러닝관련 > Segmentation' 카테고리의 다른 글
Segmentation 작업시 참고해야 할 것들 (간략히 정리 중) (0) | 2022.03.26 |
---|---|
MMSegmentation 사용하기 (구성 확인) (0) | 2022.03.03 |
MMSegmentation 사용하기 (Installation, env setting, inference with pre-trained models) (2) | 2022.03.03 |
Fully Convolutional Networks for Semantic Segmentation (FCN) (0) | 2021.04.19 |