Semantyczna segmentacja ortofotomap ze zbioru LandCover.ai - U-Net + ResNet18.
| ID | Klasa | Kolor |
|---|---|---|
| 0 | background | czarny |
| 1 | building | czerwony |
| 2 | woodland | zielony |
| 3 | water | niebieski |
| 4 | road | żółty |
Interaktywny podgląd pełnych ortofoto (GeoTIFF z landcover/images). Zamiast od razu segmentować cały raster (~9k×9k), aplikacja:
- ładuje podgląd (przeskalowany, ze stretchowaniem kontrastu tylko do wyświetlenia),
- pozwala przybliżać / przesuwać obraz i zaznaczyć prostokąt prawym przyciskiem,
- wycina zaznaczony obszar z oryginalnego rastra w natywnej rozdzielczości i uruchamia model (surowe RGB + normalizacja ImageNet jak przy treningu),
- pokazuje obok wynik: wycinek, nakładkę maski i udział klas.
Backend: FastAPI (backend/) - frontend: React + Vite (frontend/sat/).
# API
cd backend
uvicorn main:app --reload --port 8000
# UI
cd frontend/sat
npm install
npm run devZdjęcie - maska klas - overlay:
uv syncKonfiguracja, na której wyszedł najlepszy model (epoka 60, val mIoU ≈ 0.81):
uv run python train.py \
--epochs 70 \
--batch-size 8 \
--val-every 10 \
--learning-rate 0.0003 \
--weight-decay 0.0001 \
--crop-size 256 \
--num-workers 4 \
--grad-clip 1.0Checkpoint: checkpoints/<run>/best_model.pt - wyniki: outputs/<run>/.
uv run python evaluate.py
uv run python predict.py --image landcover/output/M-33-20-D-c-4-2_0.jpg


