=== versions === python 3.12.0 | torch 2.14.1+cpu | segmentation-models-pytorch 0.5.0 | torchgeo 0.10.1 | rasterio 1.5.2 | numpy 2.5.2 device: CPU (8 threads), CUDA available: False === chips === loaded 576 chips in 4.8 s: X (576, 12, 128, 128) uint16, Y (576, 128, 128) uint8 bands: B01, B02, B03, B04, B05, B06, B07, B08, B8A, B09, B11, B12 split train 416 val 80 test 80 === model === loaded SENTINEL2_ALL_MOCO into the encoder: 120 tensors, classifier head dropped U-Net, ResNet-18 encoder: 14.4 M parameters (11.2 M in the encoder) === training: 30 epochs, batch 16, AdamW + one-cycle, weighted cross-entropy + Dice === class weights: Building 1.27, Other built-up 0.71, Trees 0.53, Grass and crops 0.32, Water 2.17 pretrained encoder epoch 1: train loss 2.922 | val loss 2.599 | val mIoU 0.090 | 0.1 min pretrained encoder epoch 2: train loss 2.248 | val loss 2.326 | val mIoU 0.243 | 0.3 min pretrained encoder epoch 5: train loss 1.128 | val loss 2.197 | val mIoU 0.323 | 0.7 min pretrained encoder epoch 10: train loss 0.874 | val loss 0.932 | val mIoU 0.564 | 1.5 min pretrained encoder epoch 15: train loss 0.872 | val loss 0.992 | val mIoU 0.547 | 2.2 min pretrained encoder epoch 20: train loss 0.803 | val loss 0.839 | val mIoU 0.611 | 3.1 min pretrained encoder epoch 25: train loss 0.771 | val loss 0.800 | val mIoU 0.622 | 3.9 min pretrained encoder epoch 30: train loss 0.766 | val loss 0.799 | val mIoU 0.622 | 4.8 min pretrained encoder: 416 training chips, 4.8 min; best val mIoU 0.623 at epoch 29 from scratch epoch 1: train loss 2.815 | val loss 2.648 | val mIoU 0.022 | 0.2 min from scratch epoch 2: train loss 2.246 | val loss 2.170 | val mIoU 0.256 | 0.3 min from scratch epoch 5: train loss 1.171 | val loss 3.087 | val mIoU 0.160 | 0.7 min from scratch epoch 10: train loss 0.930 | val loss 1.095 | val mIoU 0.543 | 1.4 min from scratch epoch 15: train loss 0.882 | val loss 0.891 | val mIoU 0.585 | 2.1 min from scratch epoch 20: train loss 0.836 | val loss 1.036 | val mIoU 0.564 | 2.9 min from scratch epoch 25: train loss 0.798 | val loss 0.823 | val mIoU 0.612 | 3.9 min from scratch epoch 30: train loss 0.794 | val loss 0.809 | val mIoU 0.617 | 4.9 min from scratch: 416 training chips, 4.9 min; best val mIoU 0.619 at epoch 28 random split (leaky) epoch 1: train loss 2.938 | val loss 2.573 | val mIoU 0.096 | 0.2 min random split (leaky) epoch 2: train loss 2.270 | val loss 2.292 | val mIoU 0.246 | 0.4 min random split (leaky) epoch 5: train loss 1.163 | val loss 1.141 | val mIoU 0.551 | 0.9 min random split (leaky) epoch 10: train loss 0.943 | val loss 0.981 | val mIoU 0.560 | 1.8 min random split (leaky) epoch 15: train loss 0.902 | val loss 0.936 | val mIoU 0.591 | 2.8 min random split (leaky) epoch 20: train loss 0.851 | val loss 0.802 | val mIoU 0.610 | 3.7 min random split (leaky) epoch 25: train loss 0.808 | val loss 0.786 | val mIoU 0.624 | 4.7 min random split (leaky) epoch 30: train loss 0.819 | val loss 0.773 | val mIoU 0.633 | 5.5 min random split (leaky): 386 training chips, 5.5 min; best val mIoU 0.633 at epoch 30 === test set: 80 chips in 5 km blocks never seen in training (1.31 M pixels) === IoU F1 precision recall share Building 0.210 0.347 0.427 0.293 0.040 Other built-up 0.581 0.735 0.672 0.811 0.123 Trees 0.711 0.831 0.819 0.843 0.260 Grass and crops 0.878 0.935 0.954 0.917 0.562 Water 0.837 0.911 0.874 0.952 0.015 overall accuracy mean IoU macro F1 Building IoU pretrained, block split 0.860 0.643 0.752 0.210 scratch, block split 0.858 0.638 0.745 0.190 pretrained, random split 0.851 0.616 0.730 0.182 confusion matrix (rows: reference label, columns: prediction, % of each reference class): Building Other built-up Trees Grass and crops Water Building 29.3 61.1 7.9 1.7 0.0 Other built-up 10.5 81.1 6.4 1.8 0.2 Trees 0.9 6.0 84.3 8.5 0.4 Grass and crops 0.1 1.5 6.6 91.7 0.1 Water 0.4 1.5 2.6 0.3 95.2 neighbouring test pixels with the same label: 88.8% saved unet_resnet18_s2_nottingham.pt (58 MB) figures written to output/