Разработка системы сегментации изображений (Semantic/Instance Segmentation)
Сегментация — попиксельная разметка изображения. В отличие от детекции (прямоугольная рамка), сегментация даёт точный контур объекта. Это критично для задач, где форма важна: медицинские снимки, спутниковые данные, автономное вождение, контроль качества с измерением площади дефектов.
Semantic vs Instance vs Panoptic
Semantic segmentation — каждый пиксель получает класс, объекты одного класса не различаются. Пример: все машины — один класс «car», все пешеходы — «person». Модели: SegFormer, DeepLabV3+.
Instance segmentation — каждый объект отдельный, даже одного класса. Пример: машина №1, машина №2. Модели: Mask R-CNN, YOLOv8-seg, YOLO11-seg.
Panoptic segmentation — объединение semantic и instance: «вещи» (countable objects) — по инстансам, «фон» (sky, road) — семантически. Модели: Mask2Former.
Segment Anything Model (SAM)
Meta's SAM — революция в сегментации. Zero-shot сегментация: не требует обучения под конкретные классы. Входной промпт: точка, рамка или маска.
from segment_anything import SamPredictor, sam_model_registry
sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h_4b8939.pth")
predictor = SamPredictor(sam)
# Сегментация по bbox
predictor.set_image(image)
masks, scores, _ = predictor.predict(
box=np.array([x1, y1, x2, y2]),
multimask_output=False
)
SAM2 (2024) — улучшенная версия с поддержкой видео: трекинг сегментации через кадры.
Когда SAM не подходит: задачи, где нужна классификация сегментов (SAM не знает классы), и задачи с требованием к скорости (SAM-ViT-H: ~50ms на A100, слишком медленно для real-time).
Fine-tuning для domain-specific задач
Для медицинских снимков и промышленных данных SAM дообучается под домен:
from ultralytics import SAM
# SAM2 fine-tuning через Ultralytics
model = SAM('sam2_b.pt')
model.train(
data='medical_dataset.yaml',
epochs=50,
imgsz=1024,
batch=4,
lr0=1e-4
)
Для semantic segmentation — SegFormer (HuggingFace) с fine-tuning на кастомных данных. SegFormer-B5 показывает mIoU 84.0 на Cityscapes при разумной скорости.
U-Net для медицинских задач
U-Net — стандарт для биомедицинской сегментации. Encoder-decoder с skip connections отлично работает с малыми датасетами (200–500 изображений):
import segmentation_models_pytorch as smp
model = smp.Unet(
encoder_name='efficientnet-b4',
encoder_weights='imagenet',
in_channels=1, # для grayscale МРТ/КТ
classes=3, # фон, орган, опухоль
activation=None
)
Метрики качества
- mIoU (mean Intersection over Union) — основная метрика для semantic segmentation
- AP (Average Precision) — для instance segmentation
- Dice coefficient — для медицинских задач (эквивалентен F1 на пиксельном уровне)
- Boundary IoU — качество контуров, важно для прецизионных задач
| Модель | mIoU Cityscapes | FPS |
|---|---|---|
| SegFormer-B2 | 81.0 | 48 |
| SegFormer-B5 | 84.0 | 15 |
| DeepLabV3+ ResNet101 | 80.9 | 22 |
| YOLOv8x-seg | — | 120 (instance) |
| Задача | Срок |
|---|---|
| Instance segmentation на основе YOLOv8 | 2–4 недели |
| Semantic segmentation, custom dataset | 3–6 недель |
| Медицинская сегментация, SAM fine-tuning | 5–10 недель |







