HumanAIConvention's picture
Mark v1 as superseded by v3 (link, comparison table)
51459d9 verified
|
Raw
History Blame Contribute Delete
2.76 kB
---
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).