This repository contains the code for Wavelet Scattering AutoEncoders, a Byzantine-robust federated learning method for coffee disease detection, evaluated against standard aggregation baselines on the JMuBEN Kenya Coffee Disease dataset.
JMuBEN Kenya Coffee Disease — 5 classes:
| Class | Description |
|---|---|
| Cerscospora | Cerscospora leaf spot |
| Healthy | Healthy leaf |
| Leaf rust | Coffee leaf rust |
| Miner | Leaf miner damage |
| Phoma | Phoma leaf spot |
Place the dataset under data/coffee/JMuBEN/ (one subfolder per class, following torchvision.datasets.ImageFolder convention).
| File | Description |
|---|---|
wasa_coffee.py |
Main WaSA experiment: FedAvg, Oracle, WaSA-Boltzmann, WaSA-Deterministic |
baselines_common.py |
Shared data loading, model, client generation, and evaluation utilities |
coffee_krum.py |
Krum aggregation baseline |
coffee_multikrum.py |
Multi-Krum aggregation baseline |
coffee_trimmedmean.py |
Coordinate-wise Trimmed Mean baseline |
coffee_fldetector.py |
FLDetector-inspired cosine-consistency baseline |
coffee_safefl.py |
SafeFL cosine-similarity filtering baseline |
wasa_test.ipynb |
Exploratory notebook for result analysis |
torch
torchvision
kymatio
numpy
scikit-learn
Install with:
pip install torch torchvision kymatio numpy scikit-learn# Default (80% malicious clients)
python wasa_coffee.py
# Custom malicious fraction
python wasa_coffee.py --malicious_frac 0.6
python wasa_coffee.py --malicious_frac 0.9python coffee_krum.py --malicious_frac 0.6
python coffee_multikrum.py --malicious_frac 0.6
python coffee_trimmedmean.py --malicious_frac 0.6
python coffee_fldetector.py --malicious_frac 0.6
python coffee_safefl.py --malicious_frac 0.6Results are saved as JSON files (e.g. wasa_coffee_results_42_60pct.json).
| Parameter | Default | Description |
|---|---|---|
ROUNDS |
500 | Total federated rounds |
CLIENTS_PER_ROUND |
10 | Clients sampled per round |
LOCAL_EPOCHS |
1 | Local training epochs per client |
AE_EPOCHS |
100 | Autoencoder pre-training epochs |
AE_LATENT_DIM |
32 | Autoencoder bottleneck size |
BOLTZMANN_TEMPS |
[0.01, 0.1, 0.5, 1.0, 2.0, 5.0] | Temperatures swept for WaSA-Boltzmann |
DET_EPSILONS |
[0.05, 0.1, 0.3, 0.5, 1.0, 2.0] | Thresholds swept for WaSA-Deterministic |