카테고리 없음

[컴퓨터 비전] 이미지 분할 (Image segmentation)

외손잡이 2024. 9. 10. 21:05
작성자 장원준
일 시 2024. 9. 10  (화) 18:00 ~ 21:00
장 소 미래관 429호 자율주행스튜디오
참가자 명단 임혜진, 이재영, 성창민, 김명원, 장원준
 사 진

이미지 분할

바운딩 박스(Bounding box)를 사용해 물체를 찾아내는 객체 검출(Object detection)과 달리, 이미지 분할(Image segmentation)은 각 픽셀을 분류하는 문제입니다. 이 방법에서는 네트워크가 입력 이미지 내 모든 픽셀을 특정 클래스 중 하나로 분류하는 것을 목표로 합니다.

 

이미지 분할은 Semantic Segmentation과 Instance Segmentation으로 세분화됩니다. Semantic Segmentation은 각 픽셀이 어떤 클래스에 속하는지 식별하는 작업이고, Instance Segmentation은 같은 클래스 내에서도 서로 다른 객체(Instance)를 구분하는 작업입니다.

 

이미지 분할 네트워크는 아래의 첫번째 이미지와 같이 각 pixel이 N개의 클래스 중 어떤 클래스에 속하는지를 나타낸 Segmentation map을 출력합니다.
(Segmentation map은 클래스의 개수와 동일하게 N개의 체널로 구성되어 있습니다)
최종적으로는 두번째 이미지와 같이 Segmentation map에 argmax를 통해서 아래 이미지처럼 1체널 이미지를 출력으로 내보냅니다.

 

 

 

 

 

이미지 분할 네트워크의 기본 구조 : 인코더 - 디코더(Encoder - Decoder)

 

이미지 분할에 사용되는 많은 네트워크는 Encoder-Decoder 구조로 설계됩니다. 이 구조는 이미지의 크기를 줄이고 중요한 정보를 추출한 뒤, 다시 원래 크기로 복원하는 과정을 통해 분할된 결과를 생성하는 방식입니다. 구체적으로, 이 구조의 핵심 과정과 아이디어는 다음과 같습니다.

1. Encoder(인코더): 인코더는 입력 이미지의 가로(W)와 세로(H) 크기를 점진적으로 줄이며, 대신 채널 수를 늘려 피처의 개수를 증가시킵니다. 이 과정은 주로 ConvNet(합성곱 신경망)과 Pooling(풀링) 연산을 통해 이루어집니다. 이를 통해 이미지의 공간적 해상도는 감소하지만, 더 많은 고수준의 피처(특징)를 학습할 수 있습니다. 인코더의 목적은 이미지 내에서 중요한 정보들을 추출하는 것이며, 이때 이미지의 디테일이 일부 손실될 수 있지만, 중요한 특징이 유지됩니다.

2. Bottleneck(병목 구간): 인코더와 디코더 사이의 중간 단계로, 이 단계에서는 매우 압축된 형태의 피처 맵이 존재하게 됩니다. 이 구간에서 네트워크는 이미지의 고차원적인 추상적 특성을 학습합니다.

3. Decoder(디코더): 디코더는 인코더에서 줄어든 W와 H를 다시 원래 크기로 복원하는 역할을 합니다. 이 과정에서는 Up-sampling(업샘플링)이나 Transpose Convolution(전치 합성곱) 등의 방법을 사용해 이미지의 해상도를 높여 나갑니다. 디코더는 이미지의 크기를 복원하면서도, 각 픽셀이 어느 클래스에 속하는지에 대한 정보를 담는 Segmentation map을 생성합니다. 이때, 채널 수는 클래스의 개수에 맞춰 조정됩니다.

- 인코더 단계에서는 주로 점진적인 차원 축소와 다양한 피처 추출을 통해 이미지의 중요한 패턴을 학습합니다. 이는 컨볼루션 필터들이 점점 더 복잡한 패턴을 감지하도록 설계되어, 이미지의 저차원 정보는 줄어들고, 고차원의 추상적인 정보가 많이 남도록 하는 과정입니다.
  
- 디코더는 Skip Connection(스킵 연결)을 사용하여 인코더의 초기 레이어에서 얻은 정보를 복원하는 과정에서 활용하기도 합니다. 이는 이미지의 세부적인 정보를 더욱 잘 보존할 수 있게 해줍니다. 대표적인 예로 U-Net 같은 모델이 있습니다.

결과적으로, 입력 이미지의 W와 H를 유지하면서 피처를 추출하는 것이 이상적이지만, 메모리 및 계산 복잡도 문제로 인해 인코더-디코더 구조를 사용해 해상도를 줄였다가 다시 복원하는 방식을 채택합니다. 이 구조를 기반으로 학습을 진행하면, 네트워크는 Instance 또는 Semantic별로 각 픽셀을 분할할 수 있도록 가중치를 학습하게 됩니다.

 

 

이미지 분류와 이미지 분할에 대해 알 수 있었고 인코더 디코더의 과정을 공부하면서 이미지 분할의 원리를 더 이해할 수 있었습니다.