BiliSakura's picture
Add files using upload-large-folder tool
89d4944 verified
|
Raw
History Blame Contribute Delete
4.01 kB
---
license: apache-2.0
library_name: diffusers
pipeline_tag: text-to-image
tags:
- diffusers
- remote-sensing
- earth-observation
- satellite-imagery
- text-to-image
- flow-matching
- diffusion-transformer
- geospatial
datasets:
- lcybuaa/Git-10M
inference: true
language:
- en
widget:
- text: A parking lot full of cars is located next to some trees.
output:
url: demo/parking.png
- text: Many buildings are located in a commercial area.
output:
url: demo/commercial.png
- text: A roundabout is surrounded by grass.
output:
url: demo/roundabout.png
- text: Two tennis courts are semi-surrounded by several green trees.
output:
url: demo/tennis.png
---
# BiliSakura/GeoCore-9B-diffusers
Self-contained [Diffusers](https://github.com/huggingface/diffusers) checkpoint for **GeoCore-9B**: 256×256 optical satellite generation from text, with optional GSD, latitude, and longitude.
Converted from [`JeonghyeokDo/GeoCore-9B`](https://huggingface.co/JeonghyeokDo/GeoCore-9B). `DiffusionPipeline.from_pretrained` loads the DiT, Flux.2 VAE, CLIP-L, T5-XXL, and `FlowMatchEulerDiscreteScheduler` from this repo (`trust_remote_code=True`).
[Project](https://kaist-viclab.github.io/GeoCore-9B_site/) ·
[Code](https://github.com/KAIST-VICLab/GeoCore-9B) ·
[Original weights](https://huggingface.co/JeonghyeokDo/GeoCore-9B)
<Gallery />
## Demo
256×256, 50 Euler steps, `guidance_scale=4.0`, seed `42`, `lon=126.97`, `lat=37.56`, `res=0.0` (Seoul).
| Parking lot | Commercial | Roundabout | Tennis courts |
| --- | --- | --- | --- |
| ![parking](demo/parking.png) | ![commercial](demo/commercial.png) | ![roundabout](demo/roundabout.png) | ![tennis](demo/tennis.png) |
## Model details
| Field | Value |
| --- | --- |
| Pipeline | `GeoCorePipeline` (`pipeline.py`) |
| Transformer | Flow-matching DiT, 8 double-stream + 24 single-stream blocks, hidden 4096, 32 heads, **9.24B** |
| Text encoders | CLIP ViT-L/14 + T5-XXL (bundled) |
| VAE | Flux.2 `AutoencoderKLFlux2` (Apache-2.0, bundled) |
| Scheduler | `FlowMatchEulerDiscreteScheduler`, `shift=1.0` |
| Resolution | 256×256 |
| Training data | [Git-10M](https://huggingface.co/datasets/lcybuaa/Git-10M) |
| License | Apache-2.0 |
## Load from Hugging Face
```python
import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"BiliSakura/GeoCore-9B-diffusers",
trust_remote_code=True,
torch_dtype=torch.bfloat16,
).to("cuda")
image = pipe(
prompt="A parking lot full of cars is located next to some trees.",
lon=126.97,
lat=37.56,
res=0.0,
height=256,
width=256,
num_inference_steps=50,
guidance_scale=4.0,
generator=torch.Generator(device="cuda").manual_seed(42),
).images[0]
image.save("demo.png")
```
The DiT is ~18.5 GB in bf16. A 24 GB GPU is tight; on two GPUs, split only the transformer with Accelerate and keep CLIP, T5, and the VAE on one device.
## Conditioning
Captions follow the Git-10M style (short scene descriptions). Geospatial fields are optional.
| Argument | Meaning |
| --- | --- |
| `prompt` | Natural-language description |
| `res` | Resolution index `17 - z` for Google XYZ zoom `z`. `0` ≈ 1.2 m/px at the equator; each `+1` doubles GSD |
| `lon`, `lat` | Degrees |
| `-999.0` | Learned null embedding — any of `res` / `lon` / `lat` may be omitted |
## License
DiT weights © 2026 Jeonghyeok Do and Munchurl Kim, Apache-2.0. VAE is an unmodified Apache-2.0 Flux.2 autoencoder from [`black-forest-labs/FLUX.2-klein-base-4B`](https://huggingface.co/black-forest-labs/FLUX.2-klein-base-4B); see [`LICENSE-FLUX2-VAE.md`](LICENSE-FLUX2-VAE.md). [Git-10M](https://huggingface.co/datasets/lcybuaa/Git-10M) is CC BY-NC-ND 4.0 (non-commercial retraining).
## Citation
```bibtex
@article{do2026geocore,
title = {GeoCore-9B: Towards Geo-Aware Generative Foundation Models in Earth Observation},
author = {Do, Jeonghyeok and Kim, Munchurl},
year = {2026}
}
```