Mask2Former와 OneFormer: 🤗 Transformers의 범용 이미지 분할 모델
TL;DR
Mask2Former와 OneFormer가 이제 🤗 Transformers에서 사용 가능해졌으며, 작업‑특정 모델 없이 인스턴스, 의미, 파노프틱 분할을 수행할 수 있는 통합 아키텍처를 제공합니다.
이미지 분할 작업
Instance segmentation은 각 객체 인스턴스(예: 각 사람)를 식별하고 인스턴스당 이진 마스크를 출력합니다.
Semantic segmentation은 각 픽셀에 단일 클래스 레이블을 할당하며, 동일 클래스의 별도 인스턴스를 구분하지 않습니다.
Panoptic segmentation은 두 가지를 결합합니다: 겹치지 않는 세그먼트 집합을 생성하고, 각 세그먼트는 이진 마스크와 클래스 레이블을 가지며, “things”(인스턴스)와 “stuff”(배경 카테고리)를 모두 포괄합니다.
이 세 가지 하위 작업은 과거에 서로 다른 모델군을 필요로 했지만, 최근 연구는 모든 작업을 동일하게 처리하는 단일 “마스크 분류” 패러다임으로 수렴하고 있습니다.
범용 이미지 분할
2020년 이후 DETR과 같은 모델은 트랜스포머 기반 디코더를 도입하여 이진 마스크와 클래스 레이블 집합을 병렬로 예측함으로써 통합된 접근 방식으로 파노프틱 분할을 가능하게 했습니다. MaskFormer는 동일한 패러다임이 의미 분할에도 적용될 수 있음을 보여주었습니다.
Mask2Former는 백본, 픽셀 디코더, 트랜스포머 디코더를 개선하여 이 아이디어를 인스턴스 분할에 확장합니다. 아키텍처는 다음으로 구성됩니다:
- 백본(ResNet 또는 Swin Transformer)으로 저해상도 특징 맵을 생성합니다.
- 픽셀 디코더가 이러한 맵을 고해상도 특징으로 업샘플링합니다.
- 트랜스포머 디코더가 고정된 쿼리 집합을 받아 이진 마스크 제안과 클래스 로짓을 출력합니다.
Mask2Former는 여전히 최첨단 성능을 달성하기 위해 작업별 별도 학습이 필요합니다.
OneFormer는 Mask2Former에 텍스트 인코더를 추가하여 모델을 작업 설명(“instance”, “semantic”, 또는 “panoptic”)에 조건화합니다. 파노프틱 스타일 데이터셋만으로 학습된 OneFormer는 세 작업 모두에서 최첨단 결과를 달성하지만, 추가 텍스트 인코더로 인해 추론 지연 시간이 증가합니다. Swin Transformer 또는 DiNAT 백본을 지원합니다.
Transformers 라이브러리를 이용한 추론
두 모델 모두 AutoImageProcessor(또는 OneFormerProcessor)와 적절한 모델 클래스를 사용하여 한 줄의 코드로 로드할 수 있습니다:
from transformers import AutoImageProcessor, Mask2FormerForUniversalSegmentation
processor = AutoImageProcessor.from_pretrained(
"facebook/mask2former-swin-base-coco-panoptic"
)
model = Mask2FormerForUniversalSegmentation.from_pretrained(
"facebook/mask2former-swin-base-coco-panoptic"
)
라이브러리는 다양한 데이터셋과 백본을 포괄하는 30개 이상의 사전 학습 체크포인트를 제공합니다.
전형적인 추론 파이프라인:
from PIL import Image, ImageDraw
import requests, torch
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# Convert raw mask proposals to panoptic output
prediction = processor.post_process_panoptic_segmentation(
outputs, target_sizes=[image.size[::-1]]
)[0]
print(prediction.keys()) # dict_keys(['segmentation', 'segments_info'])
prediction['segmentation']은 각 픽셀 값이 인스턴스 ID를 인코딩하는 (H, W) 맵이며, segments_info는 클래스 ID, 점수 및 기타 메타데이터를 포함합니다.
Matplotlib을 사용하여 각 세그먼트 ID를 고유 색상에 매핑하고, 클래스 이름과 인스턴스 수를 표시하는 레전드를 추가함으로써 시각화할 수 있습니다.
OneFormer 추론은 동일한 API를 따르지만 추가 텍스트 프롬프트가 필요합니다. 예를 들어 파노프틱은 "segment everything", 인스턴스는 "segment instances", 의미 분할은 "segment semantics"와 같이 입력합니다. 전체 데모 노트북은 Hugging Face Transformers‑Tutorials 저장소에서 확인할 수 있습니다.
사용자 정의 데이터에 대한 파인튜닝
파인튜닝은 MaskFormer와 동일한 고수준 API를 사용합니다. MaskFormerForInstanceSegmentation을 Mask2FormerForUniversalSegmentation 또는 OneFormerForUniversalSegmentation으로 교체합니다. 프로세서 클래스도 변경됩니다:
Mask2FormerImageProcessor(또는AutoImageProcessor)는 Mask2Former용입니다.OneFormerProcessor는 OneFormer용으로 이미지와 텍스트 입력을 모두 처리합니다. 데모 노트북은 데이터셋 준비, 학습 루프 및 세 가지 분할 작업에 대한 평가 과정을 안내합니다.
의미와 중요성
- 통합 워크플로우 – 연구자와 실무자는 이제 각 분할 작업마다 별도의 코드베이스를 유지할 필요가 없습니다.
- 엔지니어링 비용 감소 – 단일 모델 체크포인트를 여러 다운스트림 애플리케이션(예: 자율 주행, 의료 영상, 콘텐츠 모더레이션)에 배포할 수 있습니다.
- 최첨단 성능 – OneFormer는 단일 파노프틱 데이터셋으로 학습되면서도 특화된 모델을 능가하거나 동등한 성능을 제공하여 데이터 수집을 단순화합니다.
- 오픈소스 접근성 – 이러한 모델을 🤗 Transformers에 통합함으로써 Hugging Face는 고품질 분할의 진입 장벽을 낮추고, 빠른 프로토타이핑과 재현 가능한 연구를 가능하게 합니다.
리소스
- 데모 노트북: Mask2Former, OneFormer
- 실시간 데모 Spaces: Mask2Former demo, OneFormer demo
- 원본 논문: Mask2Former (arXiv:2112.01527), OneFormer (arXiv:2211.06220)
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch