sci-image-models / README.md
lucasoc's picture
Update README with LightOnOCR-3-4B (0.5232) and Qwen3-VL-8B (0.4872) benchmark results
6ecfe6c verified
|
Raw History Blame Contribute Delete
6.64 kB
---
license: apache-2.0
base_model:
- lightonai/LightOnOCR-3-4B
- Qwen/Qwen2.5-VL-7B-Instruct
- Qwen/Qwen3-VL-8B-Instruct
- Qwen/Qwen2.5-VL-3B-Instruct
library_name: peft
pipeline_tag: image-to-text
tags:
- vision-language
- image-to-text
- table-extraction
- scientific-figures
- markdown-table
- lightonocr
- qwen2.5-vl
- qwen3-vl
- lora
- peft
- icdar-metric-loss
language:
- pt
- en
metrics:
- teds
- cell_precision
- cell_recall
- cell_f1
- valid_table
- icdar_rms
- icdar_score
---
# Sci-Image-Markdown: Extratores Multimodais de Tabelas Científicas (LoRA Adapters)
Coleção oficial de LoRA Adapters de alta precisão desenvolvidos para o framework **sci-image-markdown**, especializados na transcrição visual direta de figuras científicas densas (espectroscopia, ALD/ALE, isotermas e cinética química) em tabelas estruturadas em formato **GitHub-Flavored Markdown**.
Treinados com a **ICDAR Metric-Aware Loss v3** (Loss balanceada de proximidade numérica suave, penalidade de cardinalidade e ancoragem topológica TEDS).
---
## 🏆 Tabela Oficial do Leaderboard ICDAR 2026 (Task 2: Data Table Extraction)
Avaliação rigorosa realizada sobre as **373 figuras científicas reais** do conjunto de teste independente oficial do desafio:
| Posição | Modelo / Backbone | Método / Adaptação | Subpasta no Repo | Tabelas Válidas (`valid_table`) | RMS Numérico (`icdar_rms`) | Estrutura TEDS (`teds`) | Score Final ICDAR | Hardware Recomendado |
| :---: | :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| 🥇 **1º** | **`LightOnOCR-3-4B`** *(Novo Recorde)* | **LoRA + Loss v3** | `lightonocr_3_4b/` | **98.39%** | **0.6212** | **0.4252** | **0.5232** 🏆 | ~8 GB VRAM |
| 🥈 **2º** | **`Qwen2.5-VL-7B`** | **LoRA + Loss v2** | `qwen2_5_vl_7b/` | **99.73%** | **0.6026** | **0.4396** | **0.5211** 🚀 | ~14 GB VRAM |
| 🥉 **3º** | **`Qwen2.5-VL-3B`** | **LoRA + Loss v1** | `root /` | **99.73%** | **0.5830** | **0.4068** | **0.4949** | < 8 GB VRAM |
| **4º** | **`Qwen3-VL-8B`** | **LoRA + Loss v3** | `qwen3_vl_8b/` | **99.73%** | **0.6076** | **0.3668** | **0.4872** | ~16 GB VRAM |
| *Ref* | *1º Colocado Oficial ICDAR 2026 (Peking)* | *Ensemble / Multi-VLM* | - | ~99.0% | 0.5810 | 0.4552 | 0.5181 | Multi-GPU Cluster |
| *Ref* | *2º Colocado Oficial ICDAR 2026 (Samsung)* | *Prompting Especializado* | - | ~98.5% | 0.5230 | 0.3972 | 0.4601 | Multi-GPU Cluster |
| *Base* | *Qwen2.5-VL-3B (Zero-Shot)* | *Sem Treinamento* | - | 88.74% | 0.4812 | 0.2316 | 0.3564 | < 8 GB VRAM |
---
## 📂 Organização dos Modelos no Repositório
```
lucasoc/sci-image-models/
├── README.md # Visão geral e leaderboard comparativo
├── adapter_config.json # Adapter Qwen2.5-VL-3B (raiz)
├── adapter_model.safetensors # Pesos LoRA Qwen2.5-VL-3B
├── lightonocr_3_4b/ # 🏆 NOVO RECORDE ABSOLUTO (52.32%)
│ ├── adapter_config.json
│ ├── adapter_model.safetensors # 88 MB
│ ├── test_report.json # Relatório completo de teste
│ └── README.md
├── qwen2_5_vl_7b/ # SOTA Qwen2.5-VL-7B (52.11%)
│ ├── adapter_config.json
│ ├── adapter_model.safetensors # 177 MB
│ ├── test_report.json
│ └── README.md
└── qwen3_vl_8b/ # Qwen3-VL-8B (48.72%)
├── adapter_config.json
├── adapter_model.safetensors # 176 MB
├── test_report.json
└── README.md
```
---
## 🚀 Como Executar Inferência
### 1. LightOnOCR-3-4B (Novo Campeão Absoluto - 52.32%)
```python
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM
from peft import PeftModel
# Carregar processador e base model
processor = AutoProcessor.from_pretrained("lucasoc/sci-image-models", subfolder="lightonocr_3_4b")
base_model = AutoModelForCausalLM.from_pretrained(
"lightonai/LightOnOCR-3-4B",
torch_dtype=torch.float16,
device_map="auto"
)
model = PeftModel.from_pretrained(base_model, "lucasoc/sci-image-models", subfolder="lightonocr_3_4b")
model.eval()
```
### 2. Qwen2.5-VL-7B ou Qwen3-VL-8B
```python
import torch
from PIL import Image
from transformers import AutoProcessor, Qwen2_5_VLForConditionalGeneration
from peft import PeftModel
from qwen_vl_utils import process_vision_info
# Para Qwen2.5-VL-7B use subfolder="qwen2_5_vl_7b" e base "Qwen/Qwen2.5-VL-7B-Instruct"
# Para Qwen3-VL-8B use subfolder="qwen3_vl_8b" e base "Qwen/Qwen3-VL-8B-Instruct"
subfolder = "qwen2_5_vl_7b"
base_model_name = "Qwen/Qwen2.5-VL-7B-Instruct"
processor = AutoProcessor.from_pretrained("lucasoc/sci-image-models", subfolder=subfolder)
base_model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
base_model_name,
torch_dtype=torch.float16,
device_map="auto"
)
model = PeftModel.from_pretrained(base_model, "lucasoc/sci-image-models", subfolder=subfolder)
model.eval()
# Processamento da figura
image = Image.open("exemplo_grafico_cientifico.png").convert("RGB")
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "Extract all numerical data points from this scientific figure into a Markdown table."}
]
}
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, _ = process_vision_info(messages)
inputs = processor(text=[text], images=image_inputs, return_tensors="pt").to("cuda")
with torch.inference_mode():
outputs = model.generate(**inputs, max_new_tokens=1024)
result = processor.batch_decode(outputs, skip_special_tokens=True)[0]
print(result)
```
---
## 🔬 Evolução das Funções de Perda (Loss Formulation)
1. **Loss v1 (Token-Weighted Static CE):** Ponderação de tokens numéricos (4.0x) e estruturais (3.0x).
2. **Loss v2 (Float-Proximity & Cardinality Surrogate Loss):** Penalidade suave por desvio percentual em números decodificados + multiplicador global de cardinalidade.
3. **Loss v3 (TEDS Topology & Directional Control):** Introdução de penalidade de colunas (`col_count_penalty_weight = 2.0`), reforço de cabeçalho (`header_weight = 4.5`) e terminação antecipada direcional sobre `<eos>` para evitar sobregeração de linhas vazias. Alcançou o recorde absoluto de **0.5232** com o LightOnOCR-3-4B.
---
## 📜 Citação & Repositório Oficial
Repositório completo no GitHub: [lucasdocunha/sci-image-markdown](https://github.com/lucasdocunha/sci-image-markdown)