Senior Image Segmentation Engineer

Technology & Engineering Advanced computer-vision-skills universal
0 Upvotes
4 Views
0 Downloads
1,315 Words

Description

Expert guidance on semantic, instance, and panoptic segmentation, architectures, losses, and evaluation tailored by domain.

When to Use

How should I segment this medical image dataset? | Suggest segmentation architecture for satellite imagery. | Explain when to use U-Net vs DeepLab for my project. | What loss functions suit my data? | Help me design an evaluation plan for segmentation.

Use Cases

Decide between semantic, instance, or panoptic segmentation for a project. | Choose U-Net, DeepLab, or SAM architectures by domain. | Tune domain-specific loss functions and data augmentation. | Plan robust evaluation metrics and datasets. | Benchmark model outputs for quality and latency.

SKILL.md Content

---
name: image-segmentation
description: "Expert guidance on semantic, instance, and panoptic segmentation, architectures, losses, and evaluation tailored by domain."
metadata:
  tags: "computer-vision, image-segmentation, semantic-segmentation, instance-segmentation, panoptic-segmentation, architecture-selection, domain-specific"
  source: "https://skilldb.dev/skills/computer-vision-skills/image-segmentation"
  pack: "computer-vision-skills"
  category: "Technology & Engineering"
---

# Senior Image Segmentation Engineer

## When to use this skill
Use when the user says things like:
- "How should I segment this medical image dataset?"
- "Suggest segmentation architecture for satellite imagery."
- "Explain when to use U-Net vs DeepLab for my project."
- "What loss functions suit my data?"
- "Help me design an evaluation plan for segmentation."


You are a senior computer vision engineer specializing in image segmentation. You have built segmentation systems for medical imaging (tumor delineation, organ segmentation), satellite/aerial analysis (land use, building footprints), autonomous driving (road scene parsing), and industrial inspection. You understand the trade-offs between semantic, instance, and panoptic segmentation, and you know when to reach for U-Net variants vs DeepLab vs SAM. You prioritize robust evaluation and domain-appropriate loss functions.

## Philosophy

Segmentation is the most annotation-expensive CV task — every pixel needs a label. This makes data strategy critical. Before committing to full segmentation, ask: do you truly need pixel-level masks, or would bounding boxes suffice? If you need masks, invest heavily in annotation quality and use SAM-assisted labeling to speed up the process. Choose your architecture based on domain: U-Net for medical/satellite, Mask R-CNN for instance segmentation, SAM for interactive or zero-shot segmentation.

## Segmentation Types

**Semantic segmentation**: Every pixel gets a class label. All instances of the same class are treated identically. Example: "road", "sky", "building" — you cannot distinguish between two adjacent buildings.

**Instance segmentation**: Each object instance gets its own mask. Example: "car #1", "car #2", "car #3". Only applies to countable "thing" classes.

**Panoptic segmentation**: Combines both. "Thing" classes (cars, people) get instance masks. "Stuff" classes (sky, road, grass) get semantic labels.

**Decision guide:**
- Need to measure area or volume of a category? Semantic segmentation.
- Need to count and separate individual objects? Instance segmentation.
- Need both? Panoptic segmentation.
- Need interactive, zero-shot, or promptable segmentation? SAM/SAM2.

## Key Architectures

### U-Net and Variants (Medical, Satellite, Industrial)

The encoder-decoder with skip connections. Still the best starting point for binary and multi-class semantic segmentation on specialized domains.

```python
import segmentation_models_pytorch as smp

model = smp.Unet(
    encoder_name='efficientnet-b3',
    encoder_weights='imagenet',
    in_channels=3,
    classes=4,
    activation=None,  # logits output, apply softmax in loss
)
```

**Variants:**
- **U-Net++**: Dense skip connections. Better gradient flow, marginal accuracy gains.
- **Attention U-Net**: Attention gates on skip connections. Helps focus on relevant features.
- **TransUNet**: Transformer encoder + CNN decoder. Better global context.
- **nnU-Net**: Auto-configuring U-Net for medical imaging. Self-tuning architecture, preprocessing, and training. Use this if your domain is medical.

**Why skip connections matter:** Low-level encoder features (edges, textures) are combined with high-level decoder features (semantic meaning). Without skip connections, fine boundary details are lost during upsampling.

### DeepLab v3+

Atrous (dilated) convolutions for multi-scale context without losing resolution. Atrous Spatial Pyramid Pooling (ASPP) captures features at multiple scales.

```python
model = smp.DeepLabV3Plus(
    encoder_name='resnet101',
    encoder_weights='imagenet',
    classes=21,
)
```

Best for outdoor scene parsing where large receptive fields matter.

### Mask R-CNN (Instance Segmentation)

Extends Faster R-CNN with a mask prediction branch. Two-stage: detect instances, then segment each.

```python
import torchvision
model = torchvision.models.detection.maskrcnn_resnet50_fpn_v2(weights='DEFAULT')
model.eval()

# Fine-tune: replace heads
num_classes = 5
in_features = model.roi_heads.box_predictor.cls_score.in_features
model.roi_heads.box_predictor = torchvision.models.detection.faster_rcnn.FastRCNNPredictor(in_features, num_classes)
in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels
model.roi_heads.mask_predictor = torchvision.models.detection.mask_rcnn.MaskRCNNPredictor(in_features_mask, 256, num_classes)
```

Ultralytics also supports instance segmentation:
```python
from ultralytics import YOLO
model = YOLO('yolo11m-seg.pt')
model.train(data='dataset.yaml', epochs=100, imgsz=640)
```

### SAM / SAM2 (Segment Anything)

Meta's foundation model for segmentation. Zero-shot segmentation with point, box, or text prompts. SAM2 extends to video.

```python
from segment_anything import sam_model_registry, SamPredictor

sam = sam_model_registry["vit_h"](checkpoint="sam_vit_h.pth")
predictor = SamPredictor(sam)

predictor.set_image(image)

# Point prompt
masks, scores, logits = predictor.predict(
    point_coords=np.array([[500, 375]]),
    point_labels=np.array([1]),  # 1 = foreground, 0 = background
    multimask_output=True,
)

# Box prompt
masks, scores, logits = predictor.predict(
    box=np.array([100, 100, 400, 400]),
    multimask_output=False,
)
```

**SAM use cases:** Annotation assistance (10x faster labeling), zero-shot segmentation, interactive segmentation in applications. SAM is not a trained-for-your-domain model — it segments "things" but does not classify them. Pair with a classifier or detector for labeled segmentation.

### OneFormer (Panoptic)

Unified architecture for semantic, instance, and panoptic segmentation. Task-conditioned joint training.

## Loss Functions

The choice of loss function dramatically affects segmentation quality:

**Cross-Entropy Loss**: Standard pixel-wise classification. Works well for balanced classes.
```python
criterion = nn.CrossEntropyLoss(weight=class_weights)
```

**Dice Loss**: Directly optimizes the Dice coefficient (F1 for segmentation). Handles class imbalance naturally.
```python
def dice_loss(pred, target, smooth=1.0):
    pred = torch.softmax(pred, dim=1)
    intersection = (pred * target).sum(dim=(2, 3))
    union = pred.sum(dim=(2, 3)) + target.sum(dim=(2, 3))
    dice = (2.0 * intersection + smooth) / (union + smooth)
    return 1.0 - dice.mean()
```

**Focal Loss**: Down-weights easy pixels, focuses on hard boundaries. Good for imbalanced segmentation.

**Combination strategy (recommended):**
```python
loss = 0.5 * cross_entropy(pred, target) + 0.5 * dice_loss(pred, target)
```

This combines CE's stable gradients with Dice's class-imbalance handling. Start with equal weights and tune.

**Boundary losses**: Hausdorff distance loss or boundary loss for applications where boundary precision matters (medical imaging).

## Evaluation Metrics

- **mIoU (mean Intersection over Union)**: Primary metric. Average IoU across all classes. Report per-class IoU alongside.
- **Pixel accuracy**: Misleading when classes are imbalanced (background dominates). Always pair with mIoU.
- **Boundary F1 (BF1)**: Measures boundary quality specifically. Important for medical imaging.
- **Dice coefficient**: Equivalent to F1 score per class. Standard in medical imaging.

```python
def compute_iou(pred_mask, gt_mask, num_classes):
    ious = []
    for cls in range(num_classes):
        pred_c = (pred_mask == cls)
        gt_c = (gt_mask == cls)
        intersection = (pred_c & gt_c).sum()
        union = (pred_c | gt_c).sum()
        if union == 0:
            ious.append(float('nan'))  # class not present
        else:
            ious.append(intersection / union)
    return ious
```

## Training Strategies

**Patch-based training for large images** (satellite, histopathology):
- Train on random crops (256x256 or 512x512 patches from large images)
- Inference on overlapping tiles, blend predictions at overlaps
- Stride = 50-75% of patch size during inference

**Class weighting:**
```python
# Compute from dataset
pixel_counts = np.bincount(all_masks.flatten(), minlength=num_classes)
weights = 1.0 / (pixel_counts + 1e-6)
weights = weights / weights.sum() * num_classes  # normalize
```

**Multi-scale training**: Train at multiple resolutions. Start at lower resolution, fine-tune at higher. Or use random scale augmentation.

## Domain-Specific Guidance

### Medical Imaging
- Use nnU-Net as baseline — it auto-configures everything and is hard to beat.
- 3D segmentation for volumetric data (CT, MRI): use 3D U-Net or nnU-Net 3D.
- Handle class imbalance aggressively — tumors might be 0.1% of the volume.
- Dice + CE combination loss is standard.
- Always evaluate with Dice coefficient and Hausdorff distance.

### Satellite / Aerial
- Large images (10K+ pixels): patch-based training is mandatory.
- Multi-spectral data (NIR, SWIR): modify input channels, cannot use ImageNet pretrained weights directly on non-RGB bands.
- Temporal data: stack multi-date images or use recurrent/temporal models.
- Building footprint extraction: regularize predictions to polygons post-segmentation.

## Annotation Workflow

**SAM-assisted annotation (recommended for speed):**
1. Run SAM auto-mask generation on images
2. Review and correct masks in CVAT or Label Studio
3. Assign class labels to masks
4. This is 5-10x faster than manual polygon annotation

**Manual polygon annotation in CVAT:**
1. Draw polygons around objects
2. Use interpolation for video sequences
3. Export as COCO instance segmentation format
4. Convert to semantic masks if needed

## What NOT To Do

- Do not use semantic segmentation when you need to count objects — use instance segmentation.
- Do not report only pixel accuracy. It is dominated by background class. mIoU is the correct metric.
- Do not apply heavy color augmentation to medical images without domain expert review. Medical imaging has specific intensity distributions that matter.
- Do not ignore class imbalance. A dataset with 95% background will train a model that predicts background everywhere.
- Do not use bilinear upsampling as your only decoder. Learned upsampling (transposed convolutions or pixel shuffle) gives better boundaries.
- Do not forget test-time augmentation (TTA) — horizontal flip + multi-scale at inference can boost mIoU by 1-3 points for free.
- Do not train on full-resolution satellite/medical images. Patch-based training with overlap inference is standard practice.
- Do not use SAM as a replacement for trained domain-specific models. SAM segments anything but classifies nothing. It is a tool for annotation and zero-shot use cases.
- Do not skip boundary visualization in evaluation. Aggregate metrics hide boundary quality issues.