🌍 MUSS — Multimodal Unified Satellite System
MUSS is a dynamic dataset builder and modeling framework for multimodal remote sensing.
It allows users to:
- 📡 Fetch satellite data (Sentinel-1, Sentinel-2, etc.)
- 🧠 Build datasets on-the-fly
- ⚡ Train deep learning models directly on generated data
- 🧩 Combine multiple modalities (optical, SAR, indices)
🚀 Key Features
- ⚡ Dynamic dataset generation (no pre-download required)
- 🛰️ Multi-source support (Sentinel-1, Sentinel-2, etc.)
- 🧠 Built-in preprocessing (tiling, reprojection, normalization)
- 📦 Torch-compatible datasets (
NonGeoDataset) - 🔄 Lazy / Cache / Prebuild modes
- 📊 Index-based learning (NDVI, NDWI, etc.)
- 🤖 Ready for deep learning (PyTorch + TorchGeo)
📁 Project Structure
.
├── README.md
├── pyproject.toml
├── requirements.txt
├── cache/ # Generated tiles
├── dist/ # Build artifacts
├── muss/
│ ├── builder/ # Dataset builder engine
│ ├── providers/ # STAC data providers
│ ├── datasets/ # Torch datasets
│ ├── processing/ # Preprocessing pipeline
│ ├── models/ # Deep learning models
│ ├── tiling/ # Spatial tiling logic
│ ├── storage/ # Cache management
│ ├── configs/ # YAML configs
│ └── test/
└── sample.png
⚙️ Installation
Install from source
pip install -e .
Build package
python -m build
Install from PyPI (when published)
pip install muss-dataset
🧩 Configuration
Example config (configs/config.yaml):
data:
bbox: [lon_min, lat_min, lon_max, lat_max]
resolution: 10
time:
start: "2022-01-01"
end: "2022-12-31"
processing:
temporal:
method: median
reprojection:
target_crs: "EPSG:3857"
📡 Supported Providers
- Sentinel-2 (optical)
- Sentinel-1 (SAR)
- (optional) land cover datasets (e.g., WorldCover)
🏗️ Dataset Usage
from muss.datasets import MussDataset
from torch.utils.data import DataLoader
dataset = MussDataset(
config_file="configs/config.yaml",
mode="lazy", # lazy | cache-only | prebuild
)
loader = DataLoader(dataset, batch_size=8, num_workers=4)
for batch in loader:
x = batch["image"]
print(x.shape)
🧠 Training Example (Soft Labels)
for batch in loader:
x = batch["image"]
y_soft = build_soft_labels(x)
y_pred = model(x)
loss = soft_cross_entropy(y_pred, y_soft)
optimizer.zero_grad()
loss.backward()
optimizer.step()
📊 Indices-Based Learning
MUSS supports weak supervision via remote sensing indices:
- NDVI → vegetation
- NDWI → water
- SAR → structure
Soft labels are computed as:
Y* = sigmoid((I - μ) / σ)
🧠 Models
Inside muss/models/:
- Diffusion Residual Autoencoder (Diff-RAE)
- ResNet-based encoders/decoders
⚡ Build Dataset CLI
muss-build --config configs/config.yaml
This will:
- Query STAC API
- Download data
- Build tiles
- Cache results
📦 Modes
| Mode | Description |
|---|---|
| lazy | build on demand |
| cache-only | use existing tiles only |
| prebuild | build all tiles first |
⚠️ Known Issues
- STAC API rate limits (Planetary Computer)
- CRS missing in some Sentinel-1 items (use sentinel-1-rtc)
- Tile size mismatch (must enforce fixed size)
🛠️ Requirements
- Python ≥ 3.10
- PyTorch
- TorchGeo
- xarray
- rasterio
- stackstac
- pystac-client
📸 Example Output
🤝 Contributing
Contributions are welcome:
- new providers
- new models
- performance optimizations
📜 License
MIT License
🚀 Roadmap
- More datasets (Dynamic World, Landsat)
- Distributed tile building
- Cloud-native training
- HuggingFace integration
👤 Author
Developed as part of a research project DroMUPS. Dr. Yassine Gacha
Metadata
Release files for muss-dataset 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| muss_dataset-0.1.5.tar.gz | 19.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| muss_dataset-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.0 kB
Release files / muss_dataset-0.1.5.tar.gz
| Download URL | muss_dataset-0.1.5.tar.gz |
|---|---|
| Size | 19.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0d75128f3134e6a85d8047209c14085eb7632483ef4eb07cceaa23c62cc3734
|
|
BLAKE2b-256 checksum How to use checksums |
0270175d2bf1b4009c7871e91b40924bad8d676a6867129c8da976a1635a7ea2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / muss_dataset-0.1.5-py3-none-any.whl
| Download URL | muss_dataset-0.1.5-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98d1865140cf958ea3a688cbed108240674ff633ec2b2cd4c4ff1ef7b60ff0e5
|
|
BLAKE2b-256 checksum How to use checksums |
161bf0bc0c76e8488a5648e28e898c281b7c2dfc7a115432e26f5802affc4f9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|