Skip to main content

Panoptic Segmentation — 전체 장면 이해

Panoptic Segmentation은 Semantic Segmentation(배경 영역)과 Instance Segmentation(개별 객체)을 통합하여, 이미지의 모든 픽셀에 대해 클래스와 인스턴스 ID를 동시에 부여합니다.

핵심 아이디어

카테고리예시세그멘테이션 방식
Things (셀 수 있는 객체)사람, 자동차, 의자Instance 방식 (개별 ID 부여)
Stuff (셀 수 없는 영역)하늘, 도로, 풀밭Semantic 방식 (영역 분류만)
기존에는 Things와 Stuff를 별도의 모델로 처리했지만, Panoptic Segmentation은 하나의 통합된 출력을 생성합니다.

동작 방식

구현

Detectron2 활용

from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog
import cv2

# Panoptic FPN 설정
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file(
    "COCO-PanopticSegmentation/panoptic_fpn_R_50_3x.yaml"
))
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(
    "COCO-PanopticSegmentation/panoptic_fpn_R_50_3x.yaml"
)
cfg.MODEL.DEVICE = 'cuda'
predictor = DefaultPredictor(cfg)

# 추론
image = cv2.imread("image.jpg")
panoptic_seg, segments_info = predictor(image)["panoptic_seg"]

# 시각화
metadata = MetadataCatalog.get(cfg.DATASETS.TRAIN[0])
visualizer = Visualizer(image[:, :, ::-1], metadata)
vis = visualizer.draw_panoptic_seg(panoptic_seg.cpu(), segments_info)
cv2.imwrite("panoptic_result.jpg", vis.get_image()[:, :, ::-1])

Panoptic Quality (PQ)

PQ는 Panoptic Segmentation의 표준 평가 지표입니다.
PQ = SQ * RQ

SQ (Segmentation Quality) = 매칭된 세그먼트 쌍의 평균 IoU
RQ (Recognition Quality) = TP / (TP + 0.5*FP + 0.5*FN)
지표의미범위
PQ전체 품질0~1
SQ세그멘테이션 정밀도0~1
RQ인식 정확도0~1
자율주행의 전체 장면 이해, 로봇의 환경 인식 등 이미지의 모든 영역을 동시에 이해해야 하는 경우에 사용합니다. 단순히 객체 탐지나 영역 분류만 필요하면 각각의 전문 모델이 더 효율적입니다.
Mask2Former는 Semantic, Instance, Panoptic Segmentation을 하나의 아키텍처로 통합한 모델입니다. 마스크 분류(Mask Classification) 방식을 사용하여, 태스크에 관계없이 동일한 구조로 학습할 수 있습니다.

참고 논문

논문학회/연도링크
Panoptic SegmentationCVPR 2019arXiv:1801.00868
Panoptic FPNCVPR 2019arXiv:1901.02446
Masked-attention Mask Transformer (Mask2Former)CVPR 2022arXiv:2112.01527