Детекция и сегментация
~20 мин

Instance и Panoptic сегментация

Mask R-CNN, Panoptic FPN — отличие instance от semantic и panoptic segmentation.

Instance и Panoptic сегментация — каждый объект по отдельности

Семантическая сегментация говорит «это всё — машины». Но сколько машин? Какая где? Instance segmentation различает отдельные экземпляры: машина #1 (красная слева), машина #2 (синяя справа) — каждая со своей маской. Это комбинация detection (найти каждый объект) и segmentation (точный контур).

Mask R-CNN — стандарт instance segmentation

Mask R-CNN (2017) — элегантное расширение Faster R-CNN. Добавляет параллельную ветку, которая для каждого detected object предсказывает бинарную маску:

  • Backbone + FPN — извлечение multi-scale фич (ResNet-50/101 + FPN)
  • RPN — генерация region proposals (как в Faster R-CNN)
  • ROI Align — извлечение фич для каждого proposal. Важно: ROI Align вместо ROI Pooling (билинейная интерполяция → нет квантизации координат → точные маски)
  • Head: 3 параллельных ветки: classification (класс), bbox regression (координаты), mask prediction (бинарная маска 28×28 для каждого класса)

Ключевой инсайт: маска предсказывается независимо для каждого класса (K бинарных масок, где K = число классов). Это развязывает classification и segmentation — модель не должна одновременно решать «какой класс» и «где граница».

import torchvision
from torchvision.models.detection import maskrcnn_resnet50_fpn_v2

# Pretrained Mask R-CNN
model = maskrcnn_resnet50_fpn_v2(weights="DEFAULT")
model.eval()

# Inference
import torch
from PIL import Image
from torchvision import transforms

img = Image.open("street.jpg")
tensor = transforms.ToTensor()(img).unsqueeze(0)

with torch.no_grad():
    preds = model(tensor)[0]

# preds содержит:
# 'boxes':  [N, 4] — bounding boxes
# 'labels': [N] — class IDs
# 'scores': [N] — confidence scores
# 'masks':  [N, 1, H, W] — binary masks (soft, нужно threshold > 0.5)

Semantic vs Instance vs Panoptic

  • Semantic segmentation — класс для каждого пикселя. Все машины = один класс «car». Stuff classes (небо, дорога) + Things classes (машины, люди), но без различения экземпляров.
  • Instance segmentation — отдельная маска для каждого объекта (Things). Не работает со Stuff (небо, дорога — не имеют отдельных «экземпляров»).
  • Panoptic segmentation — объединение: semantic для Stuff + instance для Things. Каждому пикселю — класс + instance ID (для Things). Полное понимание сцены.

Stuff vs Things

Things — счётные объекты с чёткими границами: машины, люди, собаки. Можно различить экземпляры. Stuff — аморфные фоновые регионы: небо, дорога, трава, вода. Нет отдельных экземпляров.

Panoptic Segmentation

Panoptic FPN (2019) — расширение Mask R-CNN. Добавляет semantic segmentation branch к FPN для Stuff-классов. Instance branch (Mask R-CNN head) для Things. Merge: instance маски имеют приоритет над semantic в местах пересечения.

Panoptic Quality (PQ) — метрика: PQ = SQ × RQ • SQ (Segmentation Quality) — средний IoU matched пар (predicted + GT) • RQ (Recognition Quality) — F1 score матчинга (TP / (TP + 0.5×FP + 0.5×FN)) PQ объединяет качество и сегментации, и детекции в одну метрику.

Современные подходы

  • Mask2Former (2022) — unified architecture для semantic, instance и panoptic segmentation. Один фреймворк, три задачи. Transformer-based: masked attention + learnable queries. State-of-the-art на всех трёх задачах.
  • SAM (Segment Anything, 2023) — promptable segmentation. Работает в zero-shot: любой объект по клику/боксу/тексту. Не различает классы, но даёт идеальные маски.
  • OneFormer (2023) — multi-task universal segmentation. Один вход, одна модель, task-conditioned (semantic/instance/panoptic через текстовый промпт).

Практическое применение

  • Autonomous driving — panoptic segmentation: дорога (stuff) + машины/пешеходы (instances). Каждый объект отслеживается отдельно.
  • Medical imaging — instance segmentation клеток, органов, патологий. U-Net + instance head.
  • AR/VR — real-time instance segmentation для background removal, virtual try-on.
  • Robotics — grasp detection: маска конкретного объекта для захвата манипулятором.

🎯 На собеседовании

Ключевые вопросы

Чем instance отличается от semantic segmentation? Semantic — один класс для всех объектов типа «car». Instance — отдельная маска для каждой конкретной машины. • ROI Align vs ROI Pooling? ROI Pooling квантизирует координаты → потеря точности. ROI Align использует билинейную интерполяцию → точные маски. Критично для quality mask prediction. • Что такое panoptic segmentation? Semantic (stuff) + Instance (things) в одном выходе. Каждый пиксель = class_id + instance_id. • Panoptic Quality? PQ = SQ × RQ. SQ — средний IoU matched пар. RQ — F1 score матчинга (detection quality). Единая метрика для оценки и сегментации, и детекции.