Start, Berlin

Abhishek Singh

Keys work here. Press h.

I am Abhishek Singh, an Earth observation and machine learning engineer in Berlin.

I work on how pictures of the Earth from satellites, planes and drones can help solve problems in many fields of science. I want this data to make the world better and healthier at a time when AI moves fast and people's lives are changing.

I love reading research papers and building their methods to find patterns in the data that are hard to see. I use a mix of new and conventional tools for this including AI agents.

One question I keep working on is how labels and models fit together. Labels are the answers a model learns from. I make them with statistics, physics and mapping methods.

Below are my projects, skills, work experience and education.

Projects

Signpost 1

Do optical foundation models transfer to SAR?

A model that learned from ordinary photos can find where a glacier ends in satellite radar pictures. A small add-on does as well as a much bigger model trained from scratch.

Glacier calving-front delineation on the CaFFe benchmark with frozen encoders. They are satellite-pretrained DINOv3, photo-pretrained DINOv3, C-RADIOv4-H and two SAR-pretrained encoders. Only small probes and heads are trained on top. A U-Net trained from scratch is the reference.

  • A 0.57M-parameter decoder on frozen C-RADIO features matches the 7.8M-parameter U-Net on front error with 979 ± 31 m vs 979 m on the two test glaciers
  • Per glacier it is 1,067 vs 1,080 m on Columbia and 464 vs 474 m on Mapple. The decoder misses 7–9 of 122 fronts per seed and the U-Net 3
  • Zones as 3-class patch mIoU on test from a linear probe reach 0.610 on frozen photo DINOv3 and 0.602 on C-RADIO. The U-Net reaches 0.594
  • Photo-pretrained encoders beat the two SAR-pretrained ones we tried by 0.22–0.25 mIoU. Satellite pretraining gave no clear advantage over photo pretraining
  • Linear probes alone draw no front on 30–57% of test images. Fronts need a learned head
Sentinel-1 SAR image of Columbia glacier with predicted zones coloured, the real calving front in red and the model's front in orange.
Columbia glacier in Sentinel-1 images from 2020. The frames cycle through the dataset’s labels and each model’s zones (rock, glacier, ocean). Red is the real calving front and orange the model’s. Data from CaFFe (Gourmelon et al. 2022) under CC BY 4.0. Repository.

Signpost 2

Do frozen encoders transfer to radar images outside glaciers?

The same idea on four other radar tasks. They are lakes, snow, forest types and mountain glaciers. Here the model that learned from satellite pictures came out ahead every time.

Part two of the SAR study. The same frozen pipeline with nothing tuned per dataset runs on four Sentinel-1 datasets. They are glacial lakes, snow, forest types and alpine glaciers. The satellite-pretrained DINOv3 and C-RADIOv4-H stay frozen. Only a linear probe and a small decoder are trained.

  • With the decoder the satellite DINOv3 is ahead of C-RADIO on every dataset and test split. The gap is largest on snow with IoU 0.735 vs 0.602. This is the reverse of the glacier study
  • In the one like-for-like published comparison frozen features reach a snow F1 of 0.847 against 0.897 for a U-Net trained on the same two radar channels
  • Frozen radar-only features reach about 60–80% of the scores of published models that also use optical data
  • Starting from one lake patch 83% of the 100 most similar test patches are lake for satellite DINOv3 against 37% for C-RADIO
One Sentinel-1 test chip each from glacial lakes, snow, forest types and alpine glaciers, shown as radar, then the dataset's labels, then the frozen satellite DINOv3 output.
One Sentinel-1 test chip from each of the four datasets. The frames show the radar, the dataset's labels and then the satellite DINOv3's output. Each chip was picked because its score is close to the test-set score. Data from Glacial-Lake-Bench (CC BY 4.0), SnowSAR replication data (Etalab Open Licence 2.0), ForTy v1 (CC BY-SA 4.0) and the GlaViTU tile dataset (CC BY 4.0). Repository.

Signpost 3

Can a radar student learn from frozen teachers?

Can a small model learn to read radar pictures by copying several large models at once? It got close but did not reach the best large one. A teacher that reads radar itself helped.

Part four of the SAR study. A C-RADIO-style ViT-B student is distilled from four frozen teachers. They are SigLIP2, satellite DINOv3, PE-Spatial and TerraFM-B reading Sentinel-1. The student is then scored with frozen features on the four radar datasets of part two. Every rule was fixed before a score was seen.

  • The student does not reach the frozen satellite DINOv3. It is behind on all four datasets by 0.030 to 0.055
  • The radar-reading teacher helps. Snow IoU is 0.659 against 0.603 without it and alpine glaciers 0.508 against 0.477. Lakes and forest are ties
  • SigLIP2 NaFlex or FixRes as the first teacher makes no difference with 4 ties out of 4
  • Three further checks change none of this. They are a finer 8 px grid, radar coherence as an extra input and a compiled decoder step
Patch features of the frozen satellite DINOv3 and two distilled students shown as colours, next to the radar and the labels, one Sentinel-1 validation chip each from glacial lakes, snow, forest types and alpine glaciers.
What each model sees. Its patch features are turned into colours with one PCA per image and shown next to the radar and the labels. One Sentinel-1 validation chip per dataset. Data from Glacial-Lake-Bench (CC BY 4.0), SnowSAR replication data (Etalab Open Licence 2.0), ForTy v1 (CC BY-SA 4.0) and the GlaViTU tile dataset (CC BY 4.0). Repository.

Signpost 4

Where VGGT-Ω fails on real driving data

A test of a model that builds 3D scenes from camera pictures. The test uses real driving data the model had never seen. It goes wrong mostly on moving cars, people and thin objects and in rain at night.

A stratified failure analysis of the released VGGT-Ω 3D reconstruction checkpoint on FZI-AURA. This dataset was published after the model and is therefore outside its training data. Error is broken down by weather, lighting and object motion instead of averaged. Predictions were written down before the runs.

  • Held-out test split with AbsRel 0.082 and δ<1.25 = 94.3% across 107 unseen scenes
  • Moving objects 0.203 against parked 0.099 and background 0.077
  • With only object interiors counted moving objects are still worse by +0.062 in 70 of 76 scenes
  • Dry daylight 0.081, wet night 0.159 and wet twilight 0.245
  • 394 scenes analysed. The 20 scenes every rule was tuned on are excluded from all tables
All 40 frames of a test scene, each with the camera image, predicted depth, LiDAR ground truth and signed relative error at the LiDAR points.
A typical test scene at the median depth error with all 40 frames. The top row shows the camera image and the predicted depth. The bottom row shows the LiDAR ground truth and the signed relative error. Red is predicted too far and blue too near. Black rings mark moving objects. Data from FZI-AURA (CoCar NextGen) under CC BY-SA 4.0. Repository.

Signpost 5

Can VGGT-Ω replace photogrammetry on drone images?

Can that 3D model replace the slow classic way of making 3D maps from drone pictures? It is far faster but less exact. A mix of both beats the model alone in a fraction of the classic method's time.

The released VGGT-Ω checkpoint on straight-down drone images from two UAVScenes flights 80 to 130 m up. It is scored against the drone's own LiDAR and solved poses. It is compared with a flat plane fitted to the LiDAR itself and with COLMAP. A hybrid of the model and COLMAP is tested too. The success bars were fixed before the runs.

  • On 83 stretches of 40 images the depth AbsRel is 0.0146 against 0.0310 for the plane in the town and 0.0173 against 0.0360 in the valley at 2 m between frames
  • COLMAP with the known camera is more accurate on all 6 test stretches. It takes 15 to 17 minutes per stretch against 5 to 8 seconds which is 120 to 190 times longer
  • The hybrid beats the model alone on 6 of 6 in 6 to 13% of COLMAP's time. It comes within 10% of COLMAP on only 3 of 6 which is short of the bar of 4
A drone stretch over a town in 3D, circled once, its LiDAR points coloured by the depth error of VGGT-Omega alone, the hybrid and full COLMAP, and by the hybrid's change against the model.
The town's 2 m test stretch which is a typical one. Its LiDAR points are coloured by each estimate's depth error and by the hybrid against the model. Teal means the hybrid's error is lower and brown means it is higher. Data from UAVScenes and MARS-LVIG (HKU MaRS lab) under CC BY-NC-SA 4.0. Repository.

Signpost 6

Drone LiDAR against satellite products

How good are free satellite maps of height and land cover? I built a detailed map from a drone's laser scanner and checked the satellite products against it.

Raw drone sensor logs of two MARS-LVIG flights in Armenia over a river valley and a small town. They are turned into DSM, DTM, nDSM and land cover at 0.5 m with our own ROS 2 readers, gyro-aided poses and a ground filter written in numpy. The results are compared with Copernicus GLO-30, ESA WorldCover, a global canopy height map, Sentinel-2 and OpenStreetMap.

  • GLO-30 against the drone DSM on bare ground has an RMSE of 0.80 m in the valley and 0.45 m in the town
  • Over buildings GLO-30 sits 0.74 m below the drone top surface (median of 72 posts). Over trees it sits 4.76 m and 2.31 m below
  • WorldCover agrees on 82% of the valley and 32% of the town where it calls the gardens trees and grass. 78% of the drone built-up pixels are built-up to WorldCover too
  • The canopy height map misses 85% and 53% of the drone vegetation 2 m or taller
  • 245 and 324 million points. Overlapping flight lines agree to 0.04 m and 0.02 m RMS
Eight frames of the valley flight on one map, the drone DSM, DTM and land cover at 0.5 m, then the Copernicus DEM, ESA WorldCover, the Meta and WRI canopy height map, Sentinel-2 and OpenStreetMap.
The valley flight with the drone products and the five public layers they are checked against on the same map. Drone data from MARS-LVIG (HKU MaRS lab) and UAVScenes under CC BY-NC-SA 4.0. Public layers are Copernicus GLO-30, ESA WorldCover, the Meta and WRI canopy height map (CC BY 4.0), Sentinel-2 and © OpenStreetMap contributors (ODbL). Repository.

Signpost 7

Change detection with frozen DINOv3 features

Finding new buildings by comparing two satellite pictures of the same place from different times. A very small add-on on a ready-made model was enough.

Building change detection on frozen satellite-pretrained DINOv3 embeddings over SpaceNet-7 monthly imagery and LEVIR-CD. Decoder designs are compared on identical features.

  • LEVIR-CD test F1 0.910 and IoU 0.835 for the difference head with 0.56M parameters
  • The cross-attention head with 0.83M parameters reaches F1 0.908. The smaller head was the one to keep
  • SpaceNet-7 monthly change F1 0.178 and building IoU 0.704 on a far harder task
  • Training-free embedding baselines reach F1 0.013–0.019. The training carries the result
Two LEVIR-CD test pairs in four columns, the before image, the after image, the ground truth change mask, and the prediction coloured green for true positives, red for false positives and blue for missed change.
Two LEVIR-CD test pairs. From left to right are before, after, the ground truth change mask and the difference head’s prediction. Green is correct, red a false alarm and blue missed change. Notebook.

Signpost 8

Overhead caribou detectors across herds and years

Finding caribou in pictures taken from a plane. I tested four ready-made animal detectors on a new herd and a new year and looked at where they miss animals.

Cross-herd and cross-year evaluation of four overhead detection models (one caribou-specific) on aerial survey imagery of the Central Arctic Herd in Alaska from 2022 after development on the Porcupine Herd from 2017. With error bars from resampled mosaics, a failure analysis and a threshold sweep.

  • Locked test domain of 2,607 patches from 43 mosaics with 12,456 annotated animals
  • The two best models tie threshold-free with average precision 0.978 vs 0.977. The paired difference is +0.001 [−0.004, +0.008] over 2,000 resamples
  • The gap at the fixed setting is an operating-point effect. One model holds F1 above 0.95 for any relative cut from 0.15 to 0.55 and the other only from 0.35 to 0.60
  • A 16 px border band is 12% of the area but holds 53% of the errors. At full resolution most are real caribou the patch’s ground truth does not list
  • The two remaining models trail clearly with average precision 0.927 and 0.919
Eight aerial survey patches where the best detector missed the most caribou in clear view. Found animals are green, misses orange circles, false alarms pink crosses, the dashed line is the border band.
The eight patches where the best model missed the most animals in clear view. Found animals are green, misses are orange circles and false alarms are pink crosses. The dashed line is the 16 px border band. The misses have no single cause. Among them are fully visible adults, two close animals covered by one detection and points placed at the wrong end of the body. Survey imagery from the Zenodo release under CC BY-NC-SA 4.0. Repository.

Signpost 9

Winter wheat vegetation indices for Bavaria

How green the winter wheat is in every district of Bavaria. Measured from satellite pictures for each month from March to June in the years 2017 to 2024.

Monthly NDVI and NIRv for winter wheat across every district of Bavaria. They come from Sentinel-2 composites masked with yearly 10 m crop type maps and aggregated with exact partial-pixel zonal statistics. The Sentinel-2 half of a two-person MSc capstone.

  • 96 NUTS-3 regions from March to June in 2017–2024
  • 1.13 TB of input imagery in 4,768 GeoTIFFs across 29 MGRS tiles per month
  • 1.64 billion winter wheat pixels at 10 m processed in 5.5 h on one A100
  • Over 151,793 OCO-2 footprints solar-induced fluorescence tracks NIRv (r = 0.54) better than NDVI (r = 0.42)
Line chart of winter wheat NDVI for March to June, one line per year from 2017 to 2024, peaking in May.
Winter wheat NDVI across Bavaria from March to June with one line per year from 2017 to 2024 and error bars over the 96 districts. Every year peaks in May. Notebook.

Master's thesis

My thesis at the DLR Earth Observation Center in Oberpfaffenhofen was about finding greenhouses and fields covered with plastic in southern Germany. It used air photos where one pixel is 20 cm. Nobody drew labels by hand for the training. The labels came from the crop reports that farmers file with the EU for each field and were checked against the photos.

How I work

Most of my projects take their labels from registers or test sets that were made for something else. Then I deal with the mistakes those labels carry. One thing has come back in every project so far. Better data helps more than a bigger model once the model is big enough. I measure both instead of guessing. My work runs in numbered steps with fixed software versions so that someone else can run it again. I test on places and conditions the model has never seen.

Skills

  • Python
  • PyTorch
  • C++17
  • SQL
  • GDAL
  • rasterio
  • geopandas
  • xarray
  • QGIS
  • Google Earth Engine
  • STAC
  • Linux
  • Git
  • Docker
  • SLURM

Open source

Bug report NVIDIA/nvImageCodec #63. NVIDIA's graphics-card decoder refused about 3 of 4 valid public aerial photos. NVIDIA confirmed the bug and named the cause. I checked that cause against 2,357 files and found no exception.

Experience

  • Student Assistant, Robotics and Perception, TU Berlin, 2025–2026. Onboard image capture and control components in Python for REINCARNATE, a Horizon Europe consortium project.
  • Test Engineer, Infosys, India, 2021–2024. Automated test pipelines in Java and JavaScript with Selenium and TestNG, and data validation in SQL.

Education

  • M.Sc. Data Science, University of Europe for Applied Sciences, Potsdam, 2024–2026.
  • B.Eng. Electronics and Communication Engineering, Jaypee Institute of Information Technology, India, 2016–2020.