Розробка системи сегментації зображень
Сегментація — піксельна розмітка зображення. На відміну від детекції (прямокутна рамка), сегментація дає точний контур об'єкту. Це критично для завдань, де форма важлива: медичні знімки, супутникові дані, автономне водіння, контроль якості з вимірюванням площі дефектів.
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: "речі" (рахункові об'єкти) — по інстансам, "фон" (небо, дорога) — семантично. Моделі: Mask2Former.
Segment Anything Model (SAM)
SAM Meta — революція в сегментації. 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 для доменних завдань
Для медичних знімків та промислових даних 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, користувацький датасет | 3–6 тижнів |
| Медична сегментація, SAM fine-tuning | 5–10 тижнів |







