Image Segmentation
이미지 세그멘테이션은 이미지를 각 클래스나 객체가 정확히 어디에 있는지 보여 주는 픽셀 영역으로 나눕니다. 시맨틱, 인스턴스, 파놉틱 유형을 비교합니다.
이미지 분할은 이미지의 각 픽셀에 라벨을 지정해 이미지를 여러 영역으로 나누는 컴퓨터 비전 작업입니다. 출력은 각 클래스나 객체에 속하는 픽셀을 정확히 보여 주는 마스크 집합입니다. 각 객체의 위치를 배경까지 포함하는 직사각형 바운딩 박스로 표시하는 객체 감지와 비교하면, 분할은 각 객체나 영역의 실제 윤곽을 추적합니다. 이미지 전체에 하나의 라벨을 지정하는 이미지 분류보다 훨씬 더 상세합니다. 종양의 크기를 측정하는 작업부터 자동차 앞의 빈 공간을 찾는 작업까지, 면적, 윤곽 또는 객체 간 접촉이 의사 결정에 영향을 미치는 모든 경우에 이러한 정밀도가 중요합니다.
이미지 분할의 유형#
분할 작업은 픽셀 레이블의 의미에 따라 달라집니다. 컴퓨터 비전에서는 사람이나 자동차처럼 셀 수 있는 객체인 "things"와 도로, 잔디, 하늘처럼 명확한 경계가 없는 영역인 "stuff"를 구분합니다.
- 시맨틱 분할: 모든 픽셀에 클래스를 할당하여 things와 stuff를 모두 다루며, 같은 클래스의 모든 객체를 하나의 영역으로 합칩니다.
- 인스턴스 분할: 셀 수 있는 객체를 각각 탐지해 고유한 마스크와 ID를 부여하므로, 서로 맞닿은 두 사람도 별도로 구분됩니다. 배경 픽셀에는 레이블을 지정하지 않습니다.
- 파놉틱 분할: 모든 픽셀에 클래스를 할당하고 셀 수 있는 객체의 픽셀에 인스턴스 ID를 추가하여 앞의 두 방식을 통합합니다.
- 인터랙티브 분할: Segment Anything Model (SAM)과 같은 프롬프트 기반 모델처럼 사용자의 클릭, 박스 또는 텍스트 프롬프트가 가리키는 대상의 마스크를 반환합니다.
앞의 세 방식은 서로 다른 질문에 답하므로, 선택 과정은 간단합니다.
분할 모델의 작동 방식#
전통적인 방법은 강도, 색상, 에지와 같은 저수준 단서로 픽셀을 그룹화합니다. 여기에는 Otsu 방법을 사용하는 임계값 처리, 영역 확장, 워터셰드 변환, k-means 색상 클러스터링, 그래프 컷이 있습니다. OpenCV는 이러한 방법 중 여러 가지를 구현하며, 컨베이어 위 역광 부품처럼 조건이 통제된 깨끗한 이미지에서 여전히 유용합니다. 이러한 방법은 각 그룹이 무엇을 나타내는지 알지 못한 채 픽셀을 그룹화합니다.
딥러닝 모델은 레이블이 지정된 마스크를 통해 영역의 경계와 의미를 모두 학습합니다. U-Net과 같은 인코더-디코더 네트워크는 문맥을 포착하도록 이미지를 다운샘플링한 뒤 픽셀 단위 예측을 위해 전체 해상도로 업샘플링합니다. Mask R-CNN과 YOLO 분할 모델 같은 인스턴스 모델은 객체 검출기에 마스크 헤드를 연결하며, Mask2Former와 같은 Transformer 모델은 하나의 아키텍처로 시맨틱, 인스턴스, 파놉틱 분할을 처리합니다. 프롬프트 기반 파운데이션 모델은 임의의 객체까지 분할할 수 있도록 확장되었습니다. SAM은 2023년에 이미지 1,100만 장의 마스크 11억 개로 학습한 뒤 출시되었고, SAM 2는 2024년에 비디오 기능을 추가했습니다. 이어서 SAM 3는 2025년 11월에 출시되어 텍스트 프롬프트로 지정한 개념의 모든 인스턴스를 분할합니다. 분할 레이블은 폴리곤 또는 픽셀 단위 마스크 형태이며 박스보다 그리는 데 훨씬 오래 걸리므로, 이러한 프롬프트 기반 모델은 이제 클릭 한 번으로 다수의 학습용 마스크 초안을 생성합니다.
작업 유형에 따라 출력 형태도 달라집니다. Ultralytics YOLO26은 별도의 두 모델 제품군으로 제공됩니다. 인스턴스 분할용 -seg과 시맨틱 분할용 -sem입니다. 두 모델을 같은 사진에 적용하면 차이를 확인할 수 있습니다.
from ultralytics import YOLO
# 인스턴스 분할 모델과 시맨틱 분할 모델을 불러옵니다.
instance_model = YOLO("yolo26n-seg.pt")
semantic_model = YOLO("yolo26n-sem.pt")
# 두 모델로 같은 거리 이미지를 분할합니다.
image = "https://ultralytics.com/images/bus.jpg"
instance_results = instance_model(image)
semantic_results = semantic_model(image)
# 인스턴스 출력: 탐지된 객체마다 이진 마스크 하나를 반환하며, 형태는 (objects, height, width)입니다.
print(instance_results[0].masks.data.shape)
# 시맨틱 출력: 이미지 전체에 대한 클래스 맵 하나를 반환하며, 형태는 (height, width)입니다.
print(semantic_results[0].semantic_mask.data.shape)인스턴스 출력의 첫 번째 차원은 탐지된 객체 수와 같으므로, 인스턴스 결과를 셀 수 있습니다. 출력 유형별로 고유한 지표가 있습니다. 인스턴스 분할에는 마스크 평균 정밀도 (mAP), 시맨틱 분할에는 평균 교집합 대비 합집합 (IoU), 파놉틱 분할에는 파놉틱 품질(PQ)을 사용합니다.
실제 적용 사례#
- 의료 영상 분석: 방사선 영상 도구는 CT 및 MRI 스캔에서 장기, 종양, 병변의 윤곽을 표시해 부피를 측정하고 수술이나 방사선 치료를 계획합니다.
- 자율주행: 인지 시스템은 주행 가능 공간을 파악하기 위해 모든 프레임에서 도로, 인도, 차량, 보행자를 분할합니다.
- 위성 이미지 분석: 토지 피복 지도는 시간에 따른 변화를 추적하기 위해 모든 픽셀을 물, 숲, 농경지, 건물로 분류합니다.
- 사진 및 동영상 편집: 배경 제거, 인물 모드 블러, 하늘 교체에는 기기에서 계산한 사람 및 하늘 마스크가 사용됩니다.
- 로보틱스 및 제조: 로봇은 객체 마스크를 사용해 불규칙한 부품의 파지점을 계산하고, 검사 시스템은 긁힘이나 균열 같은 결함의 정확한 면적을 측정합니다.










