BeaverCube Cloud Segmentation โ SmallCloudNet
U-Net trained to detect clouds in imagery simulated from the Matrix Vision mvBlueFOX-IGC-200w camera on the BeaverCube 2 CubeSat (MIT), using the CloudSEN12-L1C Sentinel-2 dataset.
Model details
| Property | Value |
|---|---|
| Architecture | U-Net (SmallCloudNet) |
| Parameters | 1.86M |
| Input size (training) | 33ร33 px |
| Input size (inference) | any (fully convolutional) |
| Classes | clear, thick cloud, thin cloud, shadow |
Performance
| Metric | Value |
|---|---|
| Mean IoU | 0.38 |
| Mean F1 | 0.54 |
| Accuracy | 64% |
| Clear IoU | 0.58 |
| Thick cloud IoU | 0.45 |
| Shadow IoU | 0.27 |
| Thin cloud IoU | 0.22 |
Usage
import torch
from model import SmallCloudNet
model = SmallCloudNet(in_ch=3, num_classes=4)
checkpoint = torch.load("best_model.pth", map_location="cpu")
model.load_state_dict(checkpoint["model_state_dict"])
model.eval()
# img: float32 tensor (1, 3, H, W) normalised to [0, 1]
with torch.no_grad():
logits = model(img) # (1, 4, H, W)
mask = logits.argmax(dim=1) # (1, H, W)
Training data
CloudSEN12-L1C (Sentinel-2 L1C), preprocessed to simulate BlueFOX GSD (153.75 m) via:
- Gaussian PSF blur (ฯ = 1.6 px, derived from Kowa 16mm lens Airy disk)
- 15.65ร INTER_AREA downsample (512ร512 โ 33ร33)
- Read + shot noise augmentation applied each epoch