Irrigation canals mapped from Sentinel-1 and Sentinel-2
A U-Net maps canals and roads at 10 m from free satellite images. This page shows the test scores and a set of example chips.
What the model does
The goal is a map of irrigation canals: main canals, laterals and ditches. Roads are a second output class. A lined canal next to a road looks much like the road at 10 m, so the model learns roads to keep them apart from canals.
Each input chip is 256 by 256 pixels at 10 m, so 2.56 km on a side. The model sees 12 bands. Eight come from Sentinel-2 (blue, green, red and near infrared), as two 2024 median composites from Fields of the World: one from the planting season (window A) and one from the harvest season (window B). Four come from Sentinel-1 radar (VV and VH backscatter), as medians over January to June and July to December 2024.
The model is a U-Net with an EfficientNet-B3 encoder. The labels come from OpenStreetMap, national canal layers and the project's own review. A reviewer checked each chip and marked whether its canal and road labels were complete. The primary model, combo_tta__canal3_tta, combines several networks. Three networks trained on canals alone decide the canal pixels. An ensemble of four networks trained on canals and roads decides the road pixels. Every network also sees the image flipped three ways, and the outputs are averaged.
The score is the relaxed F1. Both the true and the predicted canals are thinned to one pixel wide lines. A predicted line pixel counts as correct when a true canal lies within 2 pixels (20 m), and a true pixel counts as found when a predicted canal lies within 2 pixels. Precision is the share of predicted canal that is correct. Recall is the share of true canal that is found. F1 is their harmonic mean. Plain pixel overlap (IoU) treats a one pixel shift of a one pixel wide canal as a total miss, so it is shown only for reference.
The test chips sit in 0.5 degree blocks that never appear in training or validation.
Results
Primary model on the test chips
193 test chips in 23 regions, 95 of them in Peru.
Road precision is 0.477 and road recall is 0.586. Mean per-chip canal score by region, from the experiment log: Peru, half the test chips, 0.51; Fergana 0.86, Sindh 0.84, the Nile Delta places 0.82 to 0.87. France, Spain and the Jezreel Valley score near zero or low, because their official ditch layers hold channels narrower than a 10 m pixel.
Training data snapshots
The training set grew as chips were reviewed. Each snapshot froze the chips used for a round of runs. Runs on different snapshots are scored on different test chips, so their scores are not directly comparable.
| snapshot | chips used | train / val / test |
|---|---|---|
| A, 2026-11-01 midday | 342 (trainable, plus 17 canal-only) | 249 / 60 / 33 |
| B, 2026-11-01 evening | 694 (plus 73 canal-only and 176 fields-ignored) | 467 / 99 / 128 |
| C, 2026-11-01 night | 1,039 (all three kinds) | 716 / 143 / 180 |
| D, 2026-11-02 morning | 1,046 (653 trainable, 178 canal-only, 215 fields-ignored) | 717 / 146 / 183 |
| E, 2026-11-02 afternoon | 1,134 (709 trainable, 203 canal-only, 222 fields-ignored) | 768 / 169 / 197 |
Learning curve
The canal-only recipe was trained on 25, 50, 75 and 100 percent of the snapshot E training chips, with two seeds each. A smaller share is a subset of every larger one. The score is canal relaxed F1 on the same 193 test chips.
Line and large dots: mean of two seeds. Small gray dots: each seed.
| share of training chips | seed 7 | seed 8 | mean |
|---|---|---|---|
| 25% | 0.418 | 0.380 | 0.399 |
| 50% | 0.472 | 0.490 | 0.481 |
| 75% | 0.519 | 0.519 | 0.519 |
| 100% | 0.529 | 0.529 | 0.529 |
The curve flattens: 25 to 50 percent adds 0.08, 75 to 100 percent adds 0.01. The 75 percent seed 8 run was scored on 200 test chips, not 193.
Wet and dry season inputs
A canal holds more water in some months than in others, and a road never does. This test added Sentinel-2 medians of the wettest and the driest three months of each chip (green, red, near infrared and shortwave infrared) to the canal-only model. The score is canal relaxed F1 on 193 test chips.
| inputs | seed 7 | seed 8 | mean |
|---|---|---|---|
| S1 plus S2 | 0.492 | 0.471 | 0.482 |
| plus wet and dry season S2 | 0.499 | 0.506 | 0.503 |
| plus season S2 and water indices | 0.496 | 0.497 | 0.497 |
The season bands add about 0.02 canal F1. The two S1 plus S2 seeds differ by 0.021, so the gain is no larger than the seed spread. The season bands were not adopted.
Snapshot F
Snapshot F added about 350 reviewed chips to snapshot E. The table gives canal relaxed F1 on both test sets. Runs named r5 were trained on E, runs named r8 on F.
| run | F test (232 chips) | E test (193 chips) |
|---|---|---|
| r5canal_ctx80_s1s2 (E) | 0.537 | 0.529 |
| r5canal_ctx80_seed8_s1s2 (E) | 0.536 | 0.529 |
| r8canal_ctx80_F_s7 | 0.540 | 0.529 |
| r8canal_ctx80_F_s8 | 0.540 | 0.528 |
| r8canalroad_ctx80_F_s7 | 0.529 | 0.517 |
| r8canalroad_ctx80_F_s8 | 0.541 | 0.531 |
The F models match the E models on both test sets, so the 350 chips added since E did not raise canal F1.
One model for canals and roads
The r8canalroad runs in the table above learn canals and roads together. The canal plus road model keeps canal F1 within seed noise and adds roads at relaxed F1 0.553 and 0.561 on the F test. In the seed 8 run, 11.0 percent of canal pixels are predicted as road and 10.3 percent of road pixels as canal.
Road veto on the primary model
The canal-only networks never see roads, so some of their canal calls fall on roads. This test drops a canal call wherever the canal and road ensemble gives road a probability above a threshold. Scores on the 193 test chips. "Canal as road" is the share of true canal pixels predicted as road. "Road as canal" is the share of true road pixels predicted as canal.
| road veto above | canal precision | canal recall | canal F1 | canal IoU | canal as road | road as canal | road IoU |
|---|---|---|---|---|---|---|---|
| none | 0.539 | 0.535 | 0.537 | 0.245 | 0.079 | 0.198 | 0.242 |
| 0.3 | 0.542 | 0.472 | 0.505 | 0.219 | 0.155 | 0.118 | 0.258 |
| 0.4 | 0.541 | 0.496 | 0.517 | 0.230 | 0.128 | 0.141 | 0.255 |
| 0.5 | 0.540 | 0.510 | 0.525 | 0.236 | 0.110 | 0.159 | 0.252 |
| 0.6 | 0.538 | 0.521 | 0.530 | 0.239 | 0.099 | 0.172 | 0.249 |
Canal recall falls at every threshold, while canal precision moves by less than 0.004, so canal F1 falls. The primary model has no veto.
Canal errors on natural water
A false canal pixel is a predicted canal pixel that is not labeled canal. The table gives the share of the primary model's false canal pixels on each kind of ground. Rivers, streams, lakes and wetlands come from OpenStreetMap.
| where the false canal pixels lie | all test chips | Peru | other regions |
|---|---|---|---|
| river | 0.023 | 0.017 | 0.045 |
| stream | 0.008 | 0.002 | 0.029 |
| lake | 0.001 | 0 | 0.004 |
| wetland | 0.004 | 0.005 | 0.001 |
| natural water, total | 0.036 | 0.023 | 0.078 |
| labeled road | 0.238 | 0.230 | 0.262 |
| labeled field | 0.176 | 0.221 | 0.028 |
| other background | 0.538 | 0.519 | 0.601 |
Natural water is a small part of the canal errors: 3.6 percent of the false canal pixels on the test chips (2.3 percent in Peru), against 24 percent on labeled roads and 54 percent on unlabeled background.
Example chips
Pick a chip to see the imagery, the labels and the primary model's prediction. The white box is the 2.56 km chip. Images, predictions, canal labels and road labels cover the 7.68 km context around it. Field labels are shown inside the chip only. Chips marked "test" were held out from training. Chips from the road only regions are new and have no prediction yet.