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 스캔에서 장기, 종양, 병변의 윤곽을 표시해 부피를 측정하고 수술이나 방사선 치료를 계획합니다.
- 자율주행: 인지 시스템은 주행 가능 공간을 파악하기 위해 모든 프레임에서 도로, 인도, 차량, 보행자를 분할합니다.
- 위성 이미지 분석: 토지 피복 지도는 시간에 따른 변화를 추적하기 위해 모든 픽셀을 물, 숲, 농경지, 건물로 분류합니다.
- 사진 및 동영상 편집: 배경 제거, 인물 모드 블러, 하늘 교체에는 기기에서 계산한 사람 및 하늘 마스크가 사용됩니다.
- 로보틱스 및 제조: 로봇은 객체 마스크를 사용해 불규칙한 부품의 파지점을 계산하고, 검사 시스템은 긁힘이나 균열 같은 결함의 정확한 면적을 측정합니다.










