File size: 5,203 Bytes
78e667d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229ca44
 
 
 
 
78e667d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229ca44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78e667d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
---
license: cc-by-nc-4.0
tags:
- super-resolution
- remote-sensing
- sentinel-2
- satellite-imagery
- pytorch
datasets:
- worldstrat
pipeline_tag: image-to-image
---

# SentinelSharp: verification head for Sentinel-2 ×4 super-resolution

Sentinel-2 imagery (10 m) rebuilt at 2.5 m. A generative restorer (SUPIR) drafts the detail; this 12M-parameter
**verification head** checks the draft against up to 16 real Sentinel-2 passes (via DINOv3-SAT features),
rewrites what the evidence contradicts, and outputs a per-pixel expected error (Laplace scale).

Code, training and inference: **https://github.com/Harp404/sentinel-superres**

![Five methods on the same Sentinel-2 input](images/vs_other_methods.jpg)

*Same Sentinel-2 input, five methods, five held-out places. Satlas and SUPIR look sharp but invent buildings; ESA's
SEN2SR stays blurry; SentinelSharp is sharp and matches the real 2.5 m SPOT photo.*

## Files (everything the pipeline needs, in one place)

| Component | File | Original | Licence |
|---|---|---|---|
| Verification head (ours) | `sentinelsharp_head.pt`, `head.py` | this project | CC BY-NC 4.0 |
| SUPIR v0Q | `third_party/supir/SUPIR-v0Q.ckpt` | [camenduru/SUPIR](https://huggingface.co/camenduru/SUPIR) | non-commercial ([declaration](third_party/supir/LICENSE.md)) |
| SDXL base (0.9 VAE) | `third_party/sdxl/sd_xl_base_1.0_0.9vae.safetensors` | [stabilityai](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) | CreativeML OpenRAIL++-M ([licence](third_party/sdxl/LICENSE.md)) |
| CLIP ViT-L/14 | `third_party/clip-vit-large-patch14/` | [openai](https://huggingface.co/openai/clip-vit-large-patch14) | MIT |
| OpenCLIP ViT-bigG/14 | `third_party/clip-vit-bigG-14/open_clip_model.safetensors` | [laion](https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160k) | MIT |
| DINOv3-SAT ViT-L/16 | `third_party/dinov3-vitl16-pretrain-sat493m/` | [facebook/dinov3-vitl16-pretrain-sat493m](https://huggingface.co/facebook/dinov3-vitl16-pretrain-sat493m) | DINOv3 License ([copy](third_party/dinov3-vitl16-pretrain-sat493m/LICENSE.md)); redistributed under its terms |

`sentinelsharp_head.pt` keys: `head` (state dict), `step` (9000, selected on the validation split), `psnr`, `args`.

```bash
hf download Harp404/sentinel-sharp --local-dir weights
```

Each third-party model is redistributed under its own licence, included next to its files. The DINOv3 License forbids
use for military, warfare or espionage purposes and requires acknowledging DINOv3 in publications.

## Results

350 held-out WorldStrat test sites, never used for training or checkpoint selection, RGB, scored against SPOT 6/7 at 2.5 m:

| Method | Error per pixel | Pixels within 10% of ground truth |
|---|---|---|
| Bilinear upscaling | 13.97% | 51.3% |
| SUPIR alone | 15.56% | 47.9% |
| **SentinelSharp** | **12.07%** | **54.5%** |

Left: Sentinel-2 input (10 m). Middle: SentinelSharp (2.5 m). Right: SPOT 6/7 ground truth (2.5 m), photographed within
days of the Sentinel-2 passes.

![City](images/1_city.jpg)
![Informal housing and industry](images/2_slum_and_industry.jpg)
![Stadium district](images/3_stadium.jpg)
![Village](images/4_village.jpg)

Live run on Dharavi (Mumbai): SUPIR alone invents a car park; the verification head restores the informal housing.

![Dharavi](images/dharavi_live.png)

*Images: contains modified Copernicus Sentinel data (2019–2026). SPOT 6/7 imagery © Airbus DS, via WorldStrat
(CC BY-NC 4.0). Dharavi reference photo: Esri World Imagery (Esri, Maxar, Earthstar Geographics).*


## Load

```python
import torch
from head import VerificationHead
ckpt = torch.load("sentinelsharp_head.pt", map_location="cpu")
head = VerificationHead()
head.load_state_dict(ckpt["head"])
head.eval()
```

Full inference (Sentinel-2 fetch, SUPIR draft, DINOv3 features, tiling) is in the GitHub repository.

## Training data and attribution

WorldStrat (Cornebise, Oršolić, Kalaitzis, NeurIPS 2022): Sentinel-2 multi-date stacks (CC BY 4.0) paired with SPOT 6/7
imagery © Airbus DS (CC BY-NC 4.0). Contains modified Copernicus Sentinel data. The weights are CC BY-NC 4.0 because
the training data is non-commercial. The high-resolution imagery is only the
training target; the model never sees it at inference.

## Licence and commercial use

- **Our weights** (`sentinelsharp_head.pt`, `head.py`): [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/).
  Free for research, education and other non-commercial use, with credit to SentinelSharp.
- **Code** ([GitHub](https://github.com/Harp404/sentinel-superres)): PolyForm Noncommercial 1.0.0.
- **Commercial use** needs a separate licence: email **harpreetsinghjhiwant80@gmail.com**. It can only cover our work: SUPIR,
  the WorldStrat training data and DINOv3 each need their own permission.
- Mirrored third-party models keep their own licences (copies next to their files): SUPIR is non-commercial, SDXL
  is CreativeML OpenRAIL++-M, CLIP-L and OpenCLIP bigG are MIT, and the DINOv3 License forbids military, warfare and
  espionage use and requires acknowledging DINOv3 in publications.

Built for Smart India Hackathon. If you use SentinelSharp in research, please cite the GitHub repository.