--- license: other tags: - image-segmentation - satellite-imagery - cloud-detection - cubesat - beavercube --- # 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 ```python 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: 1. Gaussian PSF blur (σ = 1.6 px, derived from Kowa 16mm lens Airy disk) 2. 15.65× INTER_AREA downsample (512×512 → 33×33) 3. Read + shot noise augmentation applied each epoch