File size: 2,756 Bytes
7cc4170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51459d9
 
 
 
 
 
7cc4170
 
 
 
 
 
 
51459d9
7cc4170
51459d9
 
 
7cc4170
51459d9
 
 
 
 
 
7cc4170
51459d9
7cc4170
51459d9
 
 
 
 
7cc4170
51459d9
7cc4170
51459d9
7cc4170
 
51459d9
7cc4170
 
 
 
 
 
51459d9
 
 
 
 
 
7cc4170
 
 
 
51459d9
 
 
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
---
base_model: LiquidAI/LFM2.5-VL-450M
library_name: peft
license: apache-2.0
tags:
  - lora
  - sft
  - trl
  - vision-language
  - earth-observation
  - sentinel-2
  - simsat
  - liquid-ai
---

# SimSat LFM2.5-VL-450M v1 — LoRA adapter (superseded by v3)

> **NOTE — superseded by [`HumanAIConvention/simsat-lfm25vl-450m-v3`](https://huggingface.co/HumanAIConvention/simsat-lfm25vl-450m-v3).**
> v1 stays published for reference; v3 is canonical. v3 holdout numbers
> (+18.8 pp action / -47 pp MAE over v1 Run 14) are documented on the v3
> model card.

LoRA fine-tune of [`LiquidAI/LFM2.5-VL-450M`](https://huggingface.co/LiquidAI/LFM2.5-VL-450M)
trained on operator-reviewed Sentinel-2 tiles for the
**AI in Space Hackathon (DPhi Space x Liquid AI)** — Liquid Track.

## Holdout eval (matched-pair, 32 samples, 8 per action class)

| Metric | Base | Tuned (this adapter) | Tuned + `repetition_penalty=1.05` (Run A) |
|---|---|---|---|
| `exact_action_agreement` | 0.250 | 0.656 | **0.750** |
| `score_mae` (lower is better) | 0.312 | 0.102 | **0.080** |
| `parse_rate` | 1.000 | 0.906 | **1.000** |

The 9.4 pp parse-rate dip on tuned-without-rep_penalty came from a
numeric-field repetition loop on a single scene. Run A confirmed
`repetition_penalty=1.05, no_repeat_ngram_size=20` at inference time
recovers parse rate to 1.000 and lifts action agreement +9.4 pp without
any retraining. v3 replicates this decode hardening AND adds 56 more
operator-reviewed train rows.

## Recipe (preserved for v1 reproducibility)

- TRL `SFTTrainer` + PEFT LoRA, `transformers` (main).
- 109 train / 32 holdout (8 per class) / 4 legacy eval.
- LoRA `r=16`, `alpha=32`, `dropout=0.05`; assistant-only loss masking.
- AdamW `lr=2e-4`, 5 epochs, effective batch 8, `bfloat16`, T4 GPU.
- 4,456,448 trainable / 453,175,296 total params (0.98%).

Public training kernel: `benhaslam/simsat-lfm2-5-vl-v1-training` on Kaggle.

## Inference (recommended: use v3 instead)

```python
# v3 adapter, applied to the same base model:
from transformers import AutoModelForImageTextToText, AutoProcessor
from peft import PeftModel

base = "LiquidAI/LFM2.5-VL-450M"
model = AutoModelForImageTextToText.from_pretrained(base, torch_dtype="bfloat16")
processor = AutoProcessor.from_pretrained(base)
model = PeftModel.from_pretrained(model, "HumanAIConvention/simsat-lfm25vl-450m-v3")

out = model.generate(
    **inputs, max_new_tokens=256, do_sample=False,
    repetition_penalty=1.05, no_repeat_ngram_size=20,
)
```

## License

Apache-2.0, matching the LFM2.5-VL-450M base model. Sentinel-2 imagery
(c) European Union, Copernicus Sentinel-2 data 2024-2026, redistributable
under the [Sentinel data legal notice](https://sentinels.copernicus.eu/web/sentinel/terms-conditions).