Instance Segmentation
인스턴스 세그멘테이션은 이미지의 모든 객체를 각각의 픽셀 마스크로 윤곽을 표시하여, 같은 클래스의 객체가 서로 맞닿아 있어도 구분합니다. 모델, 지표, 코드를 다룹니다.
인스턴스 세그멘테이션은 이미지에서 각 객체를 찾고 클래스를 지정한 다음, 객체별 픽셀 단위 마스크로 윤곽을 표시하는 컴퓨터 비전 작업입니다. 객체 탐지의 객체별 추론과 이미지 세그멘테이션의 픽셀 단위 정밀도를 결합합니다. 탐지기는 배경도 포함하는 직사각형 바운딩 박스를 그리지만, 인스턴스 세그멘테이션 모델은 각 객체에 속하는 픽셀을 정확하게 표시합니다. 어깨를 맞대고 서 있는 두 사람은 각각 별도의 레이블이 지정된 두 개의 마스크로 표현되므로 객체를 세고 측정하며 개별 객체를 잘라낼 수 있습니다.
인스턴스·시맨틱·파놉틱 세그멘테이션 비교#
인스턴스 세그멘테이션은 레이블의 의미가 서로 다른 세 가지 세그멘테이션 작업 중 하나입니다:
- 시맨틱 세그멘테이션: 모든 픽셀에 클래스를 지정하고 해당 클래스의 객체를 하나의 영역으로 합치므로, 주차된 자동차 세 대는 하나의 "자동차" 영역이 됩니다. 도로와 하늘 같은 배경 영역에도 레이블을 지정합니다.
- 인스턴스 세그멘테이션: 셀 수 있는 각 객체, 즉 "thing"에 고유한 마스크와 ID를 부여하므로 자동차 세 대는 자동차 1, 자동차 2, 자동차 3으로 구분됩니다. 탐지된 객체에 속하지 않는 픽셀에는 레이블을 지정하지 않습니다.
- 파놉틱 세그멘테이션: 모든 픽셀에 클래스를 지정하고 셀 수 있는 객체에는 인스턴스 ID도 부여해 두 관점을 하나의 출력에 결합합니다.
Meta의 Segment Anything Model (SAM)과 같은 프롬프트 기반 모델은 인터랙티브 세그멘테이션을 수행합니다. 고정된 클래스 목록 없이 클릭, 박스 또는 텍스트 프롬프트가 가리키는 대상의 마스크를 반환합니다.
인스턴스 세그멘테이션 모델의 작동 방식#
2단계 모델은 먼저 탐지한 다음 세그멘테이션을 수행합니다. 2017년에 제안된 오랜 기준 설계인 Mask R-CNN은 후보 영역을 제안하고 각 박스를 분류 및 정교화하며, 별도의 마스크 브랜치를 사용해 모든 박스 안에 28×28 크기의 작은 마스크를 예측합니다.
1단계 모델은 단일 패스에서 박스와 마스크를 예측하므로 실시간 추론에 적합합니다. YOLACT는 YOLO 세그멘테이션 모델도 사용하는 프로토타입 설계를 도입했습니다. 네트워크는 이미지 전체에 공유되는 프로토타입 마스크 세트와 탐지된 각 객체에 대한 짧은 마스크 계수 벡터를 예측합니다. 각 객체의 마스크는 계수로 가중한 프로토타입의 합이며, 객체의 박스 영역으로 잘라낸 뒤 임계값을 적용해 이진 마스크로 변환합니다.
Mask2Former와 같은 Transformer 기반 모델은 세 번째 접근 방식을 사용합니다. 고정된 마스크 쿼리 집합을 예측하고 시맨틱, 인스턴스 및 파놉틱 세그멘테이션에 동일한 아키텍처를 사용합니다.
마스크, 폴리곤 및 지표#
학습 레이블은 일반적으로 객체마다 윤곽을 따라 그린 폴리곤이며, COCO JSON이나 객체별 클래스 ID 하나와 정규화된 꼭짓점 목록을 담는 YOLO 텍스트 파일 같은 형식으로 저장됩니다. 추론 시 모델은 각 인스턴스를 이진 마스크로 출력하며, 저장하거나 그릴 수 있도록 폴리곤 윤곽으로 다시 변환할 수 있습니다. 정확도는 마스크 평균 정밀도(mAP)로 보고하며, 박스 mAP와 유사하게 계산하되 예측 마스크와 정답 마스크 간의 교집합 대비 합집합(IoU)을 측정합니다. 모든 객체 주변에 폴리곤을 그리는 작업은 박스를 그리는 것보다 훨씬 오래 걸리므로, SAM과 같은 프롬프트 기반 모델을 널리 사용해 클릭 한 번으로 초안 마스크를 생성한 다음 주석 작업자가 수정합니다.
-seg 접미사로 표시되는 Ultralytics YOLO26 세그멘테이션 모델은 탐지마다 프로토타입 32개와 계수 32개를 사용하는 프로토타입 설계를 채택하며, 각 인스턴스의 클래스, 박스, 마스크 및 폴리곤 윤곽을 반환합니다:
from ultralytics import YOLO
# Load a YOLO26 instance segmentation model pretrained on the 80 COCO classes
model = YOLO("yolo26n-seg.pt")
# Segment every object instance in the image
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Each instance has its own class and mask outline, even when classes repeat
for class_id, polygon in zip(result.boxes.cls.int().tolist(), result.masks.xy):
print(f"{result.names[class_id]}: outline with {len(polygon)} points")
result.save(filename="instance_segmentation.jpg")탐지된 각 사람은 고유한 윤곽과 함께 별도의 줄에 출력되고, 저장된 이미지에서는 각 인스턴스의 마스크를 서로 다른 색으로 표시합니다.
실제 적용 사례#
개별 객체의 정확한 모양이나 개수가 의사결정에 영향을 미치는 모든 분야에서 인스턴스 마스크가 중요합니다:
- 로봇 피킹: 뒤섞인 부품 통에서 부품을 집는 로봇 팔은 주변 부품을 피할 수 있는 파지 지점을 선택하기 위해 각 부품의 정확한 윤곽을 알아야 합니다.
- 세포 생물학: 현미경 이미지 처리 파이프라인은 서로 접촉한 세포를 포함해 개별 세포와 핵을 세그멘테이션하여 개수를 세고 크기와 모양을 측정합니다.
- 농업: 수확 로봇과 수확량 추정기는 빽빽한 수관에서 개별 과일을 분리해 개수를 세고 마스크 면적으로 크기를 추정합니다.
- 비디오 객체 추적: 인스턴스 마스크를 추적기와 결합하면 프레임마다 각 객체의 정확한 실루엣을 추적할 수 있습니다.
- 자율주행차: Cityscapes와 같은 주행 데이터셋은 사람과 차량의 8개 클래스에 대해 인스턴스 단위 레이블을 제공하므로, 인지 모델은 군중 속의 보행자를 각각 구분할 수 있습니다.










