praca_magisterska/pytania/odpowiedzi/39-segmentacja-obrazu.md

323 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Pytanie 39: Segmentacja obrazu
## Pytanie
**"Scharakteryzować problem segmentacji obrazu. Przedstawić podstawowe strategie i algorytmy segmentacji przy użyciu metod klasycznych oraz sieci neuronowych."**
Przedmiot: TWM (Techniki Wizji Maszynowej)
---
## 📚 Odpowiedź główna
### 1. Definicja problemu segmentacji
```
┌─────────────────────────────────────────────────────────────────┐
│ SEGMENTACJA OBRAZU │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Obraz wejściowy: Maska segmentacji: │
│ ┌────────────────┐ ┌────────────────┐ │
│ │ ░░████░░░░░░ │ │ ░░1111░░░░░░ │ │
│ │ ░████████░░░ │ → │ ░11111111░░░ │ │
│ │ ░░████████░░ │ │ ░░11111111░░ │ │
│ │ ░░░░████░░░░ │ │ ░░░░1111░░░░ │ │
│ └────────────────┘ └────────────────┘ │
│ │
│ Cel: Przypisać każdemu pikselowi etykietę klasy/regionu │
│ │
│ Typy segmentacji: │
│ • Semantic: klasa dla każdego piksela (person, car, sky) │
│ • Instance: rozróżnia instancje tej samej klasy │
│ • Panoptic: semantic + instance (unified) │
└─────────────────────────────────────────────────────────────────┘
```
---
### 2. Metody klasyczne
#### 2.1 Thresholding (progowanie)
```
Globalne:
pixel_out = 255 if pixel_in > T else 0
Otsu (automatyczny próg):
- Maksymalizuje wariancję między klasami
- σ²_between = w₀w₁(μ₀ - μ₁)²
Adaptacyjne:
- Lokalny próg dla każdego regionu
- T(x,y) = mean(neighborhood) - C
┌──────────────────┐ Threshold ┌──────────────────┐
│░▒▓█░▒▓█░▒▓█░▒▓█ │ ────────────→ │░░██░░██░░██░░██ │
│▒▓█░▒▓█░▒▓█░▒▓█░ │ T │░███░███░███░███░ │
└──────────────────┘ └──────────────────┘
```
#### 2.2 Region Growing
```
Algorytm:
1. Wybierz punkt startowy (seed)
2. Badaj sąsiadów
3. Jeśli podobny (|I(neighbor) - I(region)| < threshold)
→ dodaj do regionu
4. Powtarzaj aż brak nowych pikseli
Seed Krok 1 Krok 2 Wynik
● ●● ●●● ●●●●
● ●●● ●●●●
●● ●●●●
```
#### 2.3 Watershed
```
Obraz jako topografia:
- Intensywność = wysokość
- "Zalewanie" od minimów lokalnych
- Granice gdzie woda z różnych źródeł się spotyka
╱╲ ╱╲
╱ ╲ ╱ ╲
╱ ╲__╱ ╲
╱ ↑ ╲
↑ granica ↑
min1 (watershed) min2
```
#### 2.4 Mean Shift
```
Iteracyjne przesuwanie okna do maksimum gęstości:
1. Dla każdego piksela:
m(x) = Σ K(x - xᵢ) × xᵢ / Σ K(x - xᵢ)
2. x ← m(x) (shift)
3. Powtarzaj do zbieżności
4. Piksele zbiegające do tego samego punktu → jeden segment
```
#### 2.5 Graph-based (Normalized Cuts)
```
Obraz jako graf:
- Wierzchołki = piksele
- Krawędzie = podobieństwo między pikselami
- w(i,j) = exp(-||I(i) - I(j)||² / σ²)
Normalized Cut:
Ncut(A,B) = cut(A,B)/assoc(A,V) + cut(A,B)/assoc(B,V)
Minimalizacja Ncut → eigendecomposition Laplacianu
```
---
### 3. Porównanie metod klasycznych
| Metoda | Zalety | Wady |
|--------|--------|------|
| **Thresholding** | Szybki, prosty | Tylko 2 klasy, wrażliwy na oświetlenie |
| **Region Growing** | Intuicyjny | Wymaga seedów, over-segmentation |
| **Watershed** | Dobre krawędzie | Over-segmentation |
| **Mean Shift** | Brak k | Wolny, parametr bandwidth |
| **Graph Cut** | Globalnie optymalne | O(n³), wymaga unary terms |
---
### 4. Metody deep learning
#### 4.1 FCN (Fully Convolutional Network)
```
┌─────────────────────────────────────────────────────────────────┐
│ FCN - pierwsza architektura deep dla segmentacji (2015) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Input Encoder (VGG) Decoder Output │
│ H×W×3 → Conv+Pool×5 → Upsampling (deconv) → H×W×C │
│ │
│ ┌────┐ ┌──┐ ┌──┐ ┌────┐ │
│ │ │ → │ │ → │ │ → ··· → upsample → │ │ │
│ │ │ │ │ │ │ ×32 │ │ │
│ └────┘ └──┘ └──┘ └────┘ │
│ input conv conv output │
│ │
│ Skip connections: FCN-32s, FCN-16s, FCN-8s │
│ Coarser + finer features → sharper boundaries │
└─────────────────────────────────────────────────────────────────┘
```
#### 4.2 U-Net
```
┌─────────────────────────────────────────────────────────────────┐
│ U-NET - encoder-decoder ze skip connections (2015) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Encoder Decoder │
│ │ ↑ │
│ ┌──┴──┐ ─ copy ─→ ┌──┴──┐ │
│ │64×64│ │64×64│ │
│ └──┬──┘ └──┬──┘ │
│ ↓ ↑ │
│ ┌──┴──┐ ─ copy ─→ ┌──┴──┐ │
│ │32×32│ │32×32│ │
│ └──┬──┘ └──┬──┘ │
│ ↓ ↑ │
│ ┌──┴──┐ ─ copy ─→ ┌──┴──┐ │
│ │16×16│ │16×16│ │
│ └──┬──┘ └──┬──┘ │
│ ↓ ↑ │
│ └───── bottleneck ───┘ │
│ │
│ Concat skip connections (nie add jak w ResNet) │
│ Popularne w medycynie (małe datasety) │
└─────────────────────────────────────────────────────────────────┘
```
#### 4.3 DeepLab (v1-v3+)
```
┌─────────────────────────────────────────────────────────────────┐
│ DEEPLAB - Atrous/Dilated Convolutions + CRF │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Atrous Convolution (dilated): │
│ │
│ Standard 3×3: Atrous 3×3, rate=2: │
│ ● ● ● ● ● ● │
│ ● ● ● (większe receptive field │
│ ● ● ● ● ● ● bez więcej parametrów) │
│ │
│ ● ● ● │
│ │
│ ASPP (Atrous Spatial Pyramid Pooling): │
│ Parallel atrous conv z różnymi rates (6, 12, 18) │
│ → multi-scale context │
│ │
│ DeepLabv3+: │
│ Encoder-decoder + ASPP + depthwise separable conv │
└─────────────────────────────────────────────────────────────────┘
```
#### 4.4 Transformer-based (SegFormer, Mask2Former)
```
┌─────────────────────────────────────────────────────────────────┐
│ SEGFORMER (2021) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Mix-Transformer encoder: │
│ • Hierarchical features (1/4, 1/8, 1/16, 1/32) │
│ • Efficient self-attention │
│ • No positional encoding │
│ │
│ MLP decoder: │
│ • Simple MLP combines multi-scale features │
│ • Lightweight │
│ │
│ MASK2FORMER (2022): │
│ • Universal: semantic, instance, panoptic │
│ • Masked attention (per-segment) │
│ • Deformable attention │
└─────────────────────────────────────────────────────────────────┘
```
---
### 5. Porównanie architektur DL
| Architektura | mIoU (ADE20K) | Parametry | Cechy |
|--------------|---------------|-----------|-------|
| **FCN** | ~30% | ~135M | Pierwsze DL dla segmentacji |
| **U-Net** | - | ~31M | Medical, skip connections |
| **DeepLabv3+** | ~45% | ~60M | ASPP, dilated conv |
| **SegFormer-B5** | ~51% | ~85M | Transformer, efficient |
| **Mask2Former** | ~57% | ~200M | Universal, SOTA |
---
### 6. Loss functions
```
Cross-Entropy Loss:
L = -Σᵢ Σc yᵢc log(pᵢc)
Problem: class imbalance (dużo tła, mało obiektów)
Dice Loss:
L = 1 - 2|X ∩ Y| / (|X| + |Y|)
Bezpośrednio optymalizuje IoU-like metric
Focal Loss:
L = -αₜ(1 - pₜ)^γ log(pₜ)
γ > 0 → hard examples ważniejsze
Combined:
L = λ₁ · CE + λ₂ · Dice
```
---
### 7. Metryki
| Metryka | Formuła | Opis |
|---------|---------|------|
| **Pixel Accuracy** | TP / (TP+FP+FN+TN) | % poprawnych pikseli |
| **IoU (Jaccard)** | TP / (TP+FP+FN) | Intersection over Union |
| **mIoU** | mean IoU per class | Standard dla segmentacji |
| **Dice** | 2TP / (2TP+FP+FN) | F1 dla segmentacji |
---
## 🧠 Mnemoniki
### "U-Net = U-shaped skip":
Kształt U z skip connections
### "ASPP = Atrous at Multiple Scales":
DeepLab's Atrous Spatial Pyramid Pooling
### "IoU = Intersection / Union":
Podstawowa metryka segmentacji
---
## ❓ Pytania dodatkowe
### Q1: "Jak radzić sobie z class imbalance?"
**Odpowiedź:** Weighted cross-entropy, Focal Loss, oversampling małych klas, Dice Loss (ignoruje dominację dużych klas), OHEM (Online Hard Example Mining).
### Q2: "U-Net vs DeepLab?"
**Odpowiedź:** U-Net: encoder-decoder z concat skip, dobre dla małych datasetów (medical). DeepLab: dilated conv zachowuje resolution, ASPP dla multi-scale, lepsze dla dużych datasetów.
### Q3: "Co to jest panoptic segmentation?"
**Odpowiedź:** Unified semantic + instance. Dzieli na "stuff" (nieczęściowe: sky, road) i "things" (policzalne: person, car). Każdy piksel ma class ID + instance ID.
---
## 🎯 Kluczowe punkty
1. **Klasyczne:** Thresholding, Region Growing, Watershed, Graph Cut
2. **FCN:** Pierwszy fully convolutional dla segmentacji
3. **U-Net:** Encoder-decoder + skip connections
4. **DeepLab:** Dilated/Atrous conv, ASPP
5. **Metryka:** mIoU (mean Intersection over Union)
---
## 📖 Źródła
1. Long et al. - "Fully Convolutional Networks" (2015)
2. Ronneberger et al. - "U-Net" (2015)
3. Chen et al. - "DeepLab" series (2014-2018)
4. Xie et al. - "SegFormer" (2021)