Local Streamlit application for visual land-surface change analysis on paired satellite images.
The current runnable app uses:
mfaytin/mask2former-satellite for RGB surface segmentation diagnostics.gemma4:e4b through Ollama for the final natural-language visual interpretation.The normal user-facing report is VLM-first: Gemma receives only the before crop, the after crop, and a labeled A1..D4 before/after contact sheet. It does not receive Mask2Former maps, class labels, transition tables, DINO features, or heatmaps.
The Streamlit UI currently provides:
artifacts/models/semantic/mask2former-satellite;A1..D4.Required for the current app:
| Role | Model | Runtime | Required? | Notes |
|---|---|---|---|---|
| Surface segmentation diagnostics | mfaytin/mask2former-satellite | Hugging Face Transformers / PyTorch | Yes | RGB Mask2Former checkpoint trained for OpenEarthMap-style land-cover classes. |
| Visual explanation | gemma4:e4b | Ollama local server | Yes for VLM output | Local vision-language model used for the final English report. |
Research or debug only:
| Model | Status |
|---|---|
ibm-nasa-geospatial/Prithvi-EO-2.0-300M-TL | Planned multispectral semantic backend. Not required for the current RGB Streamlit app. |
ibm-nasa-geospatial/Prithvi-EO-2.0-600M-TL | Heavier future benchmark. Not required for the current app. |
akshaydudhane/EarthDial_4B_RGB | Relevant remote-sensing VLM candidate, but the local HF custom-code path is unstable with the current Transformers stack. Hidden behind experimental/debug UI. |
| AdaptLLM remote-sensing Qwen models | Research candidates. Hidden behind experimental/debug UI because they are heavy or unreliable on this MacBook runtime. |
| DINOv3 SAT models | Feature extractors only, not semantic segmenters. They are not used by the Streamlit app. |
Supported development targets:
3.11 recommended.Hardware notes:
git clone https://github.com/SargisVardanian/Land-Change-Detection.git
cd Land-Change-Detection
chmod +x scripts/create_env.sh
./scripts/create_env.sh
source .venv/bin/activate
If your system does not have python3.11, install Python 3.11 first, or run:
PYTHON_BIN=python3 ./scripts/create_env.sh
Use PowerShell:
git clone https://github.com/SargisVardanian/Land-Change-Detection.git
cd Land-Change-Detection
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip setuptools wheel
python -m pip install -e ".[dev]"
If PowerShell blocks activation, run:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Then activate the environment again.
The current app needs only Mask2Former:
source .venv/bin/activate
python scripts/download_semantic_models.py
This downloads:
artifacts/models/semantic/mask2former-satellite
Optional research checkpoints are not required for the app. Download them only if you need Prithvi experiments:
python scripts/download_semantic_models.py --include-research
Gemma runs through Ollama, which is a separate local application/server.
Install Ollama:
curl -fsSL https://ollama.com/install.sh | sh
Start Ollama if it is not already running:
ollama serve
In another terminal, pull the Gemma model used by the app:
ollama pull gemma4:e4b
Check that Ollama sees it:
ollama list
Expected entry:
gemma4:e4b
If your Ollama registry does not provide gemma4:e4b, install an equivalent local vision-capable Gemma model and update GEMMA4_E4B_OLLAMA in src/land_change_detection/remote_sensing_vlm.py.
The app can run with OSCD sample imagery:
source .venv/bin/activate
python scripts/download_oscd.py
You can also use your own before/after image pair from the UI.
source .venv/bin/activate
streamlit run app.py
Open the URL printed by Streamlit, usually:
http://localhost:8501
Recommended first run:
Image source as OSCD dataset.Semantic model as Mask2Former satellite / OpenEarthMap classes.Available model as gemma4:e4b (Ollama).Reasoning budget as Full local analysis.Normal mode:
A1..D4 visual comparison grid;Debug mode:
Experimental/heavy VLMs:
DINOv3 SAT models such as facebook/dinov3-vitl16-pretrain-sat493m and timm/vit_large_patch16_dinov3.sat493m are feature-extraction backbones. They do not include a trained land-cover segmentation decoder/head in this project, so they cannot directly output classes such as road, building, water, or bare land.
For that reason, DINOv3 is not part of the Streamlit runtime.
The longer-term research architecture remains semantic-first:
T1 semantic segmentation -> T2 semantic segmentation -> transition matrix -> interpretable report
Planned next steps:
Prithvi-EO-2.0-300M-TL through a proper multispectral TerraTorch path.Prithvi-EO-2.0-600M-TL only after the 300M path is stable.Run static and unit checks:
source .venv/bin/activate
PYTHONPATH=src python -m compileall -q app.py src tests
PYTHONPATH=src python -m pytest -q
Expected current result:
26 passed
mfaytin/mask2former-satellite: Hugging FacePrithvi-EO-2.0-300M-TL: Hugging FacePrithvi-EO-2.0-600M-TL: Hugging FacePrithvi-EO-2.0 paper: arXiv:2412.02732CDMamba: arXiv:2406.04207EarthDial: arXiv:2412.1519017 commits
1 commits
Python
99.0%
Shell
1.0%
Local Streamlit application for visual land-surface change analysis on paired satellite images.
The current runnable app uses:
mfaytin/mask2former-satellite for RGB surface segmentation diagnostics.gemma4:e4b through Ollama for the final natural-language visual interpretation.The normal user-facing report is VLM-first: Gemma receives only the before crop, the after crop, and a labeled A1..D4 before/after contact sheet. It does not receive Mask2Former maps, class labels, transition tables, DINO features, or heatmaps.
The Streamlit UI currently provides:
artifacts/models/semantic/mask2former-satellite;A1..D4.Required for the current app:
| Role | Model | Runtime | Required? | Notes |
|---|---|---|---|---|
| Surface segmentation diagnostics | mfaytin/mask2former-satellite | Hugging Face Transformers / PyTorch | Yes | RGB Mask2Former checkpoint trained for OpenEarthMap-style land-cover classes. |
| Visual explanation | gemma4:e4b | Ollama local server | Yes for VLM output | Local vision-language model used for the final English report. |
Research or debug only:
| Model | Status |
|---|---|
ibm-nasa-geospatial/Prithvi-EO-2.0-300M-TL | Planned multispectral semantic backend. Not required for the current RGB Streamlit app. |
ibm-nasa-geospatial/Prithvi-EO-2.0-600M-TL | Heavier future benchmark. Not required for the current app. |
akshaydudhane/EarthDial_4B_RGB | Relevant remote-sensing VLM candidate, but the local HF custom-code path is unstable with the current Transformers stack. Hidden behind experimental/debug UI. |
| AdaptLLM remote-sensing Qwen models | Research candidates. Hidden behind experimental/debug UI because they are heavy or unreliable on this MacBook runtime. |
| DINOv3 SAT models | Feature extractors only, not semantic segmenters. They are not used by the Streamlit app. |
Supported development targets:
3.11 recommended.Hardware notes:
git clone https://github.com/SargisVardanian/Land-Change-Detection.git
cd Land-Change-Detection
chmod +x scripts/create_env.sh
./scripts/create_env.sh
source .venv/bin/activate
If your system does not have python3.11, install Python 3.11 first, or run:
PYTHON_BIN=python3 ./scripts/create_env.sh
Use PowerShell:
git clone https://github.com/SargisVardanian/Land-Change-Detection.git
cd Land-Change-Detection
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip setuptools wheel
python -m pip install -e ".[dev]"
If PowerShell blocks activation, run:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Then activate the environment again.
The current app needs only Mask2Former:
source .venv/bin/activate
python scripts/download_semantic_models.py
This downloads:
artifacts/models/semantic/mask2former-satellite
Optional research checkpoints are not required for the app. Download them only if you need Prithvi experiments:
python scripts/download_semantic_models.py --include-research
Gemma runs through Ollama, which is a separate local application/server.
Install Ollama:
curl -fsSL https://ollama.com/install.sh | sh
Start Ollama if it is not already running:
ollama serve
In another terminal, pull the Gemma model used by the app:
ollama pull gemma4:e4b
Check that Ollama sees it:
ollama list
Expected entry:
gemma4:e4b
If your Ollama registry does not provide gemma4:e4b, install an equivalent local vision-capable Gemma model and update GEMMA4_E4B_OLLAMA in src/land_change_detection/remote_sensing_vlm.py.
The app can run with OSCD sample imagery:
source .venv/bin/activate
python scripts/download_oscd.py
You can also use your own before/after image pair from the UI.
source .venv/bin/activate
streamlit run app.py
Open the URL printed by Streamlit, usually:
http://localhost:8501
Recommended first run:
Image source as OSCD dataset.Semantic model as Mask2Former satellite / OpenEarthMap classes.Available model as gemma4:e4b (Ollama).Reasoning budget as Full local analysis.Normal mode:
A1..D4 visual comparison grid;Debug mode:
Experimental/heavy VLMs:
DINOv3 SAT models such as facebook/dinov3-vitl16-pretrain-sat493m and timm/vit_large_patch16_dinov3.sat493m are feature-extraction backbones. They do not include a trained land-cover segmentation decoder/head in this project, so they cannot directly output classes such as road, building, water, or bare land.
For that reason, DINOv3 is not part of the Streamlit runtime.
The longer-term research architecture remains semantic-first:
T1 semantic segmentation -> T2 semantic segmentation -> transition matrix -> interpretable report
Planned next steps:
Prithvi-EO-2.0-300M-TL through a proper multispectral TerraTorch path.Prithvi-EO-2.0-600M-TL only after the 300M path is stable.Run static and unit checks:
source .venv/bin/activate
PYTHONPATH=src python -m compileall -q app.py src tests
PYTHONPATH=src python -m pytest -q
Expected current result:
26 passed
mfaytin/mask2former-satellite: Hugging FacePrithvi-EO-2.0-300M-TL: Hugging FacePrithvi-EO-2.0-600M-TL: Hugging FacePrithvi-EO-2.0 paper: arXiv:2412.02732CDMamba: arXiv:2406.04207EarthDial: arXiv:2412.1519017 commits
1 commits
Python
99.0%
Shell
1.0%