What's growing,
and how far along:

Reading crops from
cloud-gapped satellite imagery

What's growing,
and how far along:

Reading crops from
cloud-gapped satellite imagery

Ask what is growing in a field and how far along it is, and a farmer can tell you by walking to the edge of it. Ask the same question about every field in a province, every week, and you need satellites.

That was the problem posed by Track 1 of the ITU 2026 AI and Space Computing Challenge — Space Intelligence Empowers Food Production, part of the International Telecommunication Union’s AI for Good programme. Given Sentinel-2
imagery over farmland across north-east China, identify which of three crops is growing at a given point — rice, corn, or soybean — and, for rice, which of seven growth stages it has reached. Getting the stage right required getting the crop right first, which makes the task less forgiving than it sounds.

The problem with

looking at fields
from space

Optical satellites cannot see through cloud. Sentinel-2 revisits the same ground every few days, but over a growing season a meaningful fraction of those passes come back as cloud rather than crop. What reaches you is not a clean time series; it is a series with holes in it, and the holes are not randomly placed — they cluster in exactly the humid weeks when a paddy is doing something interesting.

The common response is to repair the series first: interpolate across the gaps, reconstruct what the sensor would have seen, then classify the tidied result. It is a reasonable instinct and a substantial amount of work.

We went the other way. Following Zhao et al. (2021), who showed that convolutional models can classify crop type directly from Sentinel-2 series with high missing rates, we trained a small network to read the gapped signal as it comes. No reconstruction step. The model sees the observations that exist, placed on the calendar where they actually fell, and learns what a season looks like from that.

The result is compact: a dual-head 1D convolutional network of about 74,000 parameters — small enough to be a serious candidate for edge deployment, where compute and power are scarce, and small enough that the interesting constraint turns out to be reading the imagery rather than running the model.

What actually helped

We had been reading aggregate metrics — F1 scores, confusion matrices, learning curves — and they had stopped telling us what to fix. So we built tooling to look at individual mistakes instead, and went through them one at a time: the satellite composite for a misclassified point, its band values, its neighbours.

Cloud is the obvious enemy in optical imagery, and we filtered for it — dropping observations that looked more like cloud than crop. But going through the points we got wrong, a pattern kept recurring: observations at implausibly bright values, cloud tops the filter had passed through and the model had learned from as though they were ground. Cloud is bright in the blue band in a way that vegetation never is, and our filter had not been looking there. Adding that check was a small change, and it made a significant difference.

It was not the only one. Making the water and vegetation indices explicit input channels rather than expecting the network to derive them; adding season-shape features to the classifier head; a final pass that lets neighbouring pixels vote on each other’s predictions — each came out of the same loop. Look at what is actually failing, form one hypothesis, change one thing, verify honestly before keeping it.
None of them was clever in isolation. Together they took us to 98.23.

How it scored

The challenge weighted two things:  

Our system scored 98.23 on the competition’s algorithm leaderboard, and the combined result earned a Bronze Award in Track 1. (ITU’s announcement of the winners.)

That is the competition’s own metric on its own held-out data, not a general accuracy figure.

The code is open

We have released the model weights, the inference path, and the training code as s2-phenocnn on GitHub, under Apache 2.0. The weights are also on Hugging Face.

The inference code is what we submitted. It ships with the trained weights, a documented training path so you can retrain on your own imagery, and a scope document setting out what generalises and what does not.

If you work on crop mapping from Sentinel-2, it is a compact baseline to read, run, and argue with.

Where this goes

Earth observation is a direction we have been drawn to for some time, and this challenge turned that interest into something concrete. The capability it validates — reading crop type and growth stage from freely available satellite data — is one we think can serve Indian agriculture. Indian cropping is more varied and often double-cropped. We intend to keep working on this capability, and to collaborate with organisations who share that goal.

Contact Us

Let’s Build Intelligent Futures Together

Share your details below — our experts based out from Bengaluru, India; will connect with you to craft solutions that drive growth, innovation, and impact.