영상 처리 및 컴퓨터 비전

시맨틱 분할

반드시 알아야 할 3가지

시맨틱 분할이란?

시맨틱 분할은 이미지의 모든 픽셀에 레이블 또는 카테고리를 연관 짓는 딥러닝 알고리즘입니다. 시맨틱 분할은 서로 다른 카테고리를 구성하는 집합의 픽셀을 인식하는 데 사용됩니다. 예를 들어, 자율주행 차량은 자동차, 행인, 교통 표지판, 인도와 같은 다양한 도로상의 특징을 식별할 수 있어야 합니다.

시맨틱 분할은 자율주행, 의료영상, 산업 검사와 같은 다양한 분야에서 사용됩니다.

시맨틱 분할의 간단한 예로 이미지를 두 개의 클래스로 나누는 것을 들 수 있습니다. 예를 들어, 바닷가에 있는 사람을 나타내는 그림 1은 이미지의 픽셀이 '사람'과 '배경'이라는 두 개의 클래스로 구분된 버전과 페어링되어 있습니다.

시맨틱 분할 - 이미지와 레이블된 픽셀

그림 1: 이미지와 레이블된 픽셀.

시맨틱 분할은 두 개의 카테고리로만 제한되지 않습니다. 사용자는 이미지의 내용물을 분류할 때 사용할 카테고리의 개수를 변경할 수 있습니다. 동일한 이 이미지는 일례로 '사람', '하늘', '물', '배경'이라는 4개의 클래스로 구분될 수 있습니다.

시맨틱 분할과 객체 감지의 차이점

시맨틱 분할에서는 원하는 객체가 픽셀 수준에서 이미지의 여러 영역에 걸쳐 있어도 되기 때문에 객체 감지의 유용한 대안이 될 수 있습니다. 객체가 경계 상자 안에 있어야 하는 객체 감지와 달리 시맨틱 분할에서는 비정형 모양을 갖는 객체도 깔끔하게 감지됩니다(그림 2).

시맨틱 분할 - 객체 감지

그림 2: 객체 식별을 위해 경계 상자가 표시된 객체 감지.

시맨틱 분할의 용도

시맨틱 분할에서는 이미지의 픽셀에 분할 레이블을 적용하기 때문에 다른 형태의 객체 감지보다 훨씬 정밀합니다. 따라서 시맨틱 분할은 다음과 같이 정밀한 이미지 지도가 필요한 다양한 산업 분야에서 유용하게 사용됩니다.

  • 자율주행—행인, 보도, 가로등, 다른 자동차와 같은 장애물과 도로를 분리하여 차량이 주행 가능한 경로 식별
  • 산업 검사—재료에 포함된 결함 감지(웨이퍼 검사 등)
  • 위성 영상—산, 강, 사막과 같은 다양한 지형 식별
  • 의료 영상—세포에서 암과 같은 이형을 분석 및 감지
  • 로봇 비전—객체와 지형의 식별 및 탐색
시맨틱 분할 - 다분광 위성 영상

그림 3: 시맨틱 분할이 적용된 다분광 위성 영상.

시맨틱 분할의 작동 방식

시맨틱 분할 네트워크가 이미지를 분류하도록 훈련하는 과정은 다음과 같이 진행됩니다.

  1. 픽셀이 레이블된 집합의 이미지를 분석합니다.
  2. 시맨틱 분할 네트워크를 생성합니다.
  3. 이미지를 픽셀 카테고리로 분류하도록 해당 네트워크를 훈련시킵니다.
  4. 네트워크의 정확도를 평가합니다.

사례: 자율주행 분야에서의 적용

그림 4의 시퀀스에서는 자율주행에 사용된 시맨틱 분할의 실제 사례를 보여줍니다. 도로 이미지가 다른 자동차들로부터 자동으로 분할됩니다. 다음 섹션에서는 시맨틱 분할 네트워크가 어떻게 생성되는지 설명합니다.

자율주행 분야에 적용된 시맨틱 분할.

그림 4: 자율주행 분야에 적용된 시맨틱 분할.

아키텍처의 이해

시맨틱 분할을 적용하는 일반적인 방법은 CNN(컨벌루션 뉴럴 네트워크) 아키텍처 기반의 SegNet을 생성하는 것입니다. 그림 5에서 전형적인 CNN 아키텍처를 볼 수 있습니다.

이 CNN은 전체 이미지를 사전 정의된 여러 개의 카테고리 중 하나로 분류합니다.

시맨틱 분할 - CNN의 전형적인 구조

그림 5: CNN의 전형적인 구조.

CNN의 아키텍처를 역으로 추가하면 전체 이미지가 아닌 픽셀 수준에서 분류를 수행할 수 있습니다. 최종 이미지의 크기가 입력 이미지의 크기와 같도록 업샘플링 프로세스가 다운샘플링 프로세스 횟수만큼 실시됩니다. 마지막으로, 각 픽셀을 특정 클래스로 매핑하는 픽셀 분류 출력 레이어가 사용됩니다. 이로 인해 시맨틱 분할을 지원하는 인코더-디코더 아키텍처가 형성됩니다.

시맨틱 분할 - 이미지 관련 함수를 적용하는 CNN

그림 6: 각 레이어에서 이미지 관련 함수를 적용한 다음 풀링 레이어(녹색)를 사용하여 이미지를 다운샘플링하는 CNN. 네트워크의 처음 절반에 대해 이 과정이 여러 차례 반복됩니다. 이 다이어그램의 처음 절반에 대한 출력이 도출된 뒤 이와 동일한 양의 언풀링 레이어(주황색)가 적용됩니다.

MATLAB을 활용한 시맨틱 분할

 

MATLAB에서 시맨틱 분할을 수행하는 워크플로는 다음과 같은 다섯 가지 단계에 따라 이루어집니다.

  1. 데이터에 레이블을 적용하거나 레이블이 적용된 데이터를 확보합니다.
  2. 원본 이미지와 레이블이 적용된 이미지를 위한 데이터저장소를 생성합니다.
  3. 데이터저장소를 파티션으로 나눕니다.
  4. CNN을 가져온 다음 SegNet이 되도록 수정합니다.
  5. 네트워크를 훈련하고 평가합니다.

1단계: 데이터에 레이블을 적용하거나 레이블이 적용된 데이터를 확보합니다.

딥러닝 모델은 다량의 데이터를 바탕으로 구축됩니다. 시맨틱 분할도 예외는 아닙니다. 다량의 데이터를 확보하기 위한 한 가지 옵션은 인터넷에서 레이블이 적용된 데이터를 찾는 것입니다. 자체적인 데이터셋이 이미 확보되어 있다면 MATLAB의 Image Labeler 앱을 사용할 수 있습니다. 이 데이터셋을 사용하여 SegNet을 훈련시킬 수 있습니다.

시맨틱 분할 - Image Labeler 앱

그림 7: 시맨틱 분할을 위해 이미지에 레이블을 적용하는 MATLAB Image Labeler 앱 

추가 정보

2단계: 원본 이미지와 레이블이 적용된 이미지를 위한 데이터저장소를 생성합니다.

다량의 데이터로 작업할 때는 모든 정보를 메모리에 로드할 수 없는 경우가 자주 있습니다. 데이터저장소를 사용하면 대규모 데이터셋을 관리할 수 있습니다. 데이터저장소는 사용자가 액세스하려는 파일의 위치를 포함하고 있으며, 해당 파일에 연산을 수행해야 하는 경우에만 이를 메모리에 로드할 수 있습니다.

SegNet을 생성하려면 다음과 같은 두 가지 데이터저장소가 필요합니다.

  1. ImageDatastore - 원본 이미지를 포함하는 데이터저장소
  2. PixelLabelDatastore - 레이블이 적용된 이미지를 포함하는 데이터저장소

3단계: 데이터저장소를 파티션으로 나눕니다.

SegNet을 생성하려면 데이터저장소를 다음과 같은 두 개의 파티션으로 나누어야 합니다.

  1. 훈련 세트 - SegNet 훈련에 사용할 파티션
  2. 테스트 세트 - 네트워크의 정확도를 평가하는 데 사용할 파티션
시맨틱 분할 - 고속도로 이미지 레이블 적용

그림 8: 컬러 이미지(왼쪽)와 여기에 대응하는 레이블이 적용된 픽셀(오른쪽)을 보여주는 고속도로 이미지.

4단계: CNN을 가져온 다음 SegNet이 되도록 수정합니다.

VGG16과 같은 사전 학습된 네트워크를 로딩하고 SegNetLayers 명령을 활용해 픽셀 수준 레이블 지정에 필요한 인코더-디코더 아키텍처를 만듭니다.

시맨틱 분할 - 아키텍처 생성에 사용할 코드

그림 9: MATLAB에서 코드 한 줄을 사용하여 SegNet 아키텍처 생성하기.

5단계: 네트워크를 훈련하고 평가합니다.

마지막 단계에서는 네트워크의 하이퍼파라미터를 설정하고 네트워크를 훈련시킵니다.

시맨틱 분할에 대해 자세히 알아보는 방법

이미지 분석에 시맨틱 분할을 사용할 수 있는 제품에는 MATLAB, 픽셀 레이블 적용을 위한 Computer Vision Toolbox, 네트워크 생성 및 훈련을 위한 Deep Learning Toolbox가 있습니다.

계산 기능이 3.0 이상인 CUDA® 지원 GPU에서는 훈련과 예측이 지원됩니다. 이때 GPU를 사용하는 것이 권장되며, 이를 위해서는 Parallel Computing Toolbox가 필요합니다.

소프트웨어 참조

30일 무료 평가판

시작하기