MethaneFuse is a two-stage learning framework for methane plume detection from partial multi-sensor satellite observations. It learns from whichever satellite observations are available for a plume event, including Sentinel-2, Landsat 8/9, EMIT, and Sentinel-5P.
MethaneFuse is built for real methane monitoring settings where satellite coverage is incomplete because of revisit timing, cloud coverage, acquisition quality, mission coverage, and the transient lifetime of methane emissions.
Quick Start • Repository Structure • Training & Evaluation • Data & Checkpoints • Method • Results • Dataset
The commands below assume a fresh machine with conda, git, and huggingface_hub installed.
# 1. Clone the repository.
git clone https://github.com/yuyao-wang/MethaneFuse.git
cd MethaneFuse
# 2. Create the Python environment.
conda create -n methanefuse python=3.10 -y
conda activate methanefuse
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -U "huggingface_hub[cli]"
# 3. Download MethaneUnion.
mkdir -p data/MethaneUnion
huggingface-cli download yuyao42/MethaneUnion \
--repo-type dataset \
--local-dir data/MethaneUnion
# 4. Download released MethaneFuse checkpoints.
mkdir -p checkpoints
huggingface-cli download yuyao42/MethaneFuse-checkpoints \
--repo-type model \
--local-dir checkpointsRun a 480 m classification evaluation:
python scripts/eval/evaluate_classification.py \
--eval_csv data/MethaneUnion/datasets/temporal_split/480m_GSD/test.csv \
--checkpoint checkpoints/stage2_classification_480m.pt \
--stage b \
--batch_size 16 \
--num_workers 8 \
--row_fusion_mode max \
--output_json results/eval/classification_480m.jsonInspect a MethaneUnion sample:
python examples/load_methaneunion_sample.py \
--csv data/MethaneUnion/datasets/temporal_split/480m_GSD/test.csv \
--index 0Visualize a prediction row:
python examples/visualize_prediction.py \
--csv data/manifests/manifest_time_test_480m_all_samples_with_pred_metrics.csv \
--index 0 \
--output results/examples/prediction_row0.pngMethaneFuse/
├── src/
│ ├── models/ # MethaneFuse model definitions and training entry points
│ ├── data/ # Multi-sensor CSV datasets, segmentation datasets, and sensor transforms
│ ├── evaluation/ # Classification and segmentation metrics
│ ├── utils/ # Shared checkpoint, device, and training helpers
│ └── backbones.py # Panopticon backbone construction and weight loading
├── baselines/ # Per-sensor ViT/ResNet, U-Net, SatMAE, AnySat, and Panopticon baselines
├── configs/ # Evaluation configs and experiment settings
├── scripts/
│ ├── train/ # Training launchers
│ ├── eval/ # Evaluation CLI wrappers
│ ├── prepare_data/ # Split and manifest preparation utilities
│ ├── analysis/ # Analysis helpers
│ ├── figures/ # Figure-generation scripts
│ └── release/ # Hugging Face packaging utilities
├── examples/ # Inference, visualization, and data-loading examples
├── assets/ # README figures
├── figures/ # Paper figures and result plots
├── docs/ # Additional documentation
├── environments/ # Conda/pip environment files
├── thirdparty/ # Vendored Panopticon/DINOv2 components
└── README.md
Stage 1 pretraining:
bash scripts/train/run_fuse.shStage 2 query-level classification:
bash scripts/train/run_query.shSegmentation training:
bash scripts/train/run_seg.shClassification evaluation:
python scripts/eval/evaluate_classification.py \
--config configs/eval_480m.yamlSegmentation evaluation:
python scripts/eval/evaluate_segmentation.py \
--config configs/eval_segmentation.yaml| Resource | Link |
|---|---|
| MethaneUnion dataset | https://huggingface.co/datasets/yuyao42/MethaneUnion |
| MethaneUnion construction pipeline | https://github.com/yuyao-wang/MethaneUnion |
| MethaneFuse checkpoints | https://huggingface.co/yuyao42/MethaneFuse-checkpoints |
MethaneFuse contains two stages.
Stage 1: Sensor-native pretraining. The model learns methane-aware representations from sensor-native temporal observations. Each available sensor is tokenized and encoded independently, and available sensor representations are aggregated through masked sensor-set fusion.
Stage 2: Query-level adaptation. The pretrained representation is adapted to scale-controlled plume classification and segmentation. The encoder is frozen, while lightweight sensor-aware LoRA experts and task heads are trained for downstream prediction.
At the 480 m query footprint, MethaneFuse improves over independently trained per-sensor predictors, heuristic score fusion, and generic Earth observation representation transfer.
| Method | F1 ↑ | Acc ↑ | FPR ↓ | Recall ↑ | AUROC ↑ |
|---|---|---|---|---|---|
| Per-sensor ViT | 79.22 | 78.00 | 23.06 | 78.94 | 85.32 |
| SatMAE-FT | 67.60 | 63.33 | 48.41 | 74.44 | 67.61 |
| AnySat-FT | 58.90 | 58.96 | 37.53 | 55.82 | 62.48 |
| Panopticon-FT | 77.65 | 75.61 | 29.13 | 79.80 | 83.28 |
| MethaneFuse | 84.87 | 84.21 | 14.87 | 83.40 | 93.62 |
MethaneFuse is trained and evaluated on MethaneUnion, an event-centered partial multi-sensor dataset constructed from Carbon Mapper plume reports and matched satellite observations.
MethaneUnion includes observations from:
- Sentinel-2 Level-2A surface reflectance
- Landsat 8/9 Collection 2 Level-2 surface reflectance
- EMIT Level-2A hyperspectral surface reflectance
- Sentinel-5P Level-2 methane products
MethaneFuse is released under the Apache License, Version 2.0; see LICENSE. Vendored third-party code under thirdparty/dinov2/ keeps its upstream license notices; see thirdparty/dinov2/LICENSE.
For questions, please open an issue or contact the maintainer.


