Sci-Image-Markdown: Extrator de Tabelas com Qwen2.5-VL (3B e 7B LoRA - Campeão SOTA ICDAR 2026)

Adapters fine-tunados com PEFT LoRA sobre os modelos base Qwen2.5-VL-7B-Instruct (Novo Campeão SOTA) e Qwen2.5-VL-3B-Instruct (Ultra-Leve), especializados na extração e transcrição direta de dados quantitativos de figuras científicas para tabelas estruturadas em Markdown com resolução de imagem nativa/original.

Ambos os modelos foram treinados utilizando a nossa função de perda personalizada ICDAR Metric-Aware Loss (combinando perdas estruturais e numéricas diferenciáveis com recompensas diretas em VRAM para Table Edit Distance e Cell RMS Error).


Recursos de Treinamento, Tempo e Memoria VRAM

Diferente de pipelines tradicionais que reduzem ou distorcem as figuras científicas, os modelos foram treinados preservando a resolução vetorial nativa integral das imagens.

Modelo / Resolução Resolução Máxima Grid de Patches de Visão Tempo de Treino (3 Épocas) VRAM Média Alocada VRAM Pico Hardware
LoRA 3B (280px Baseline) 280 px (Downsampling PIL) ~392x392 max 28 min (1.680s) ~5,2 GB ~6,1 GB RTX 3090 (24 GB)
LoRA 3B (Resolução Original) Original (~1 Mpx) Nativo Dinâmico 1h 38m (5.937s) ~6,4 GB ~7,9 GB RTX 3090 (24 GB)
LoRA 7B (Resolução Original - Campeão SOTA) Original (~1 Mpx) Nativo Dinâmico 1h 20m (4.800s) ~10,4 GB ~13,8 GB RTX 3090 (24 GB)

Resultados no Conjunto de Teste (373 Figuras Cientificas)

Avaliação executada sobre as 373 figuras do conjunto de teste independente oficial SciKnowOrg/Sci-ImageMiner (Tarefa 2: Extração de Tabelas de Dados). Ganhos reportados estritamente em pontos percentuais (pp):

Métrica Base Zero-Shot (3B) SFT Padrão (3B) LoRA 3B (280px) LoRA 3B (Res. Original) Nosso LoRA 7B (Campeão SOTA) Ganho 7B vs 3B (pp) Ganho 7B vs Base (pp)
Tabelas Válidas (valid_table) 88.74% 99.73% 99.73% 99.73% 99.73% +0.00 pp +10.99 pp
Revocação Numérica (cell_recall) 35.78% 36.12% 48.22% 58.46% 60.43% +1.97 pp +24.65 pp
Erro Quadrático Médio (cell_rmse) 2.6635 2.6510 1.0308 2.6786 1.2002 -1.4784 (-55.2%) -1.4633 (-54.9%)
Precisão de Células (cell_precision) 21.08% 21.37% 39.58% 48.32% 47.45% -0.87 pp +26.37 pp
F1-Score de Células (cell_f1) 18.42% 20.60% 34.67% 42.11% 43.11% +1.00 pp +24.69 pp
Similaridade Estrutural (TEDS) 23.16% 23.16% 36.24% 40.68% 43.96% +3.28 pp +20.80 pp
ICDAR Numerical RMS 48.12% 48.12% 51.66% 58.30% 60.26% +1.96 pp +12.14 pp
ICDAR Score Composto 35.64% 35.64% 43.95% 49.49% 52.11% +2.62 pp +16.47 pp

🏆 Leaderboard Oficial ICDAR 2026 Task 2 (Data Table Extraction)

Comparação direta dos competidores do artigo oficial (arXiv:2607.26848) com os nossos modelos:

Posição Modelo / Equipe Abordagem Principal Backbone VTR (Tabelas Válidas) RMS (Mapeamento Numérico) TEDS (Similaridade Estrutural) Score Final ICDAR $\frac{1}{2}(\text{RMS}+\text{TEDS})$ Hardware / VRAM
🥇 1º sci-image-markdown (7B) QLoRA + ICDAR Metric Loss Qwen2.5-VL-7B 99.73% 60.26 43.96 52.11 🏆 ~10 GB VRAM (GPU única)
🥈 2º sci-image-markdown (3B) QLoRA + ICDAR Metric Loss Qwen2.5-VL-3B 99.73% 58.30 40.68 49.49 🚀 < 8 GB VRAM (GPU única)
🥉 3º TeleOCR-VL Ensemble Heterogêneo + Sintéticos Multi-VLM ~99.0% 17.23 66.39 41.81 Cluster Multi-GPU
4º VLMinators QLoRA + Injeção de Contexto Qwen2.5-VL-7B ~98.8% 17.29 64.31 40.80 16-24 GB VRAM
5º Ricoh_SRCB Multi-Image Prompting + Crop Multi-VLM ~98.0% 16.23 61.12 38.67 Multi-GPU
📌 Ref Baseline Oficial ICDAR Prompting Padrão Qwen 3 VL 8B ~92.5% 14.08 57.86 35.97 ~16 GB VRAM
6º Vassilis Sioros Early Fusion + MoE + Context Qwen3.5-9B MoE ~95.0% 14.94 55.20 35.07 24 GB+ VRAM
7º DocMiner Multi-Agent Dynamic Routing Multi-VLM ~94.2% 12.67 53.72 33.19 Multi-VLM
⚠️ Base Modelo Base (Zero-Shot) Prompting Zero-Shot Qwen2.5-VL-3B 88.74% 11.85 50.32 31.08 < 8 GB VRAM

Comparativo: Loss Padrao vs. Nossa Loss

1. O que e a Loss Padrao (Cross-Entropy / SFT)

No treinamento supervisionado tradicional, a funcao de perda trata todos os tokens com exatamente o mesmo peso (1.0).

  • Falta de foco numerico: O modelo sofre a mesma penalidade se errar uma palavra descritiva comum (por exemplo, "Tempo" para "Tempa") ou se errar a coordenada exata de um ponto critico em um grafico (por exemplo, "1.2" para "9.8").
  • Falta de foco estrutural: O modelo trata delimitadores de colunas (barras verticais) e quebras de linha com o mesmo peso de espacos em branco. Um unico caractere de coluna ausente inutiliza a tabela inteira, mas gera uma penalidade minima na loss padrao.
  • Comportamento: O modelo aparenta estar convergindo com perda baixa porque acerta a maioria dos textos comuns, mas continua gerando dados numericos imprecisos e tabelas malformadas.

2. A Nossa Solucao: ICDAR Metric-Aware Loss

Para resolver esse problema, desenhamos uma funcao de perda que penaliza os erros de forma seletiva de acordo com a importancia de cada token:

  • Tokens Numericos (Peso 3.0x): Digitos (0 a 9), pontos decimais e sinais recebem peso 3 vezes maior na retropropagacao, funcionando como um proxy direto para a metrica de RMS Numerico.
  • Tokens Estruturais (Peso 2.0x): Barras verticais delimitadoras de colunas, quebras de linha e marcadores de cabecalho recebem peso 2 vezes maior, garantindo que a estrutura da tabela seja rigorosamente respeitada.
  • Tokens Textuais Comuns (Peso 1.0x): Textos explicativos e espacos mantem peso padrao unitario.

3. Como a Loss atua no LoRA

No treinamento com PEFT QLoRA, os pesos do modelo base permanecem 100% congelados em quantizacao 4-bit (NF4). Apenas as matrizes lineares de baixa dimensao A e B dos adaptadores LoRA (acopladas as projecoes de atencao q_proj, k_proj, v_proj, o_proj, etc.) sao atualizadas:

  • Amplificacao Seletiva de Gradientes: Quando o modelo erra um numero ou uma divisao de coluna, o gradiente resultante e multiplicado por 3.0x ou 2.0x. Pela regra da cadeia, esse erro amplificado e propagado diretamente para as matrizes treinaveis do LoRA.
  • Direcionamento da Atencao Visual: Essa forca de gradiente ajusta os vetores de atencao do Vision Transformer, forcando o modelo a concentrar seu foco visual nas coordenadas, eixos, legendas e numeros presentes na imagem cientifica.
  • Maximizacao do Orcamento de Parametros: A nossa loss impede que esse orcamento reduzido de parametros seja gasto com linguagem natural trivial, canalizando praticamente todo o aprendizado para a precisao numerica e integridade estrutural.

Como Usar para Inferencia

Instalacao das Dependencias

pip install torch transformers peft qwen-vl-utils pillow torchvision bitsandbytes

Exemplo em Python (Suporte a 7B SOTA ou 3B Leve)

import torch
from PIL import Image
from transformers import AutoProcessor, Qwen2_5_VLForConditionalGeneration, BitsAndBytesConfig
from peft import PeftModel
from qwen_vl_utils import process_vision_info

# Escolha o modelo:
# - Campeão SOTA (7B): "Qwen/Qwen2.5-VL-7B-Instruct" com subfolder="qwen2_5_vl_7b"
# - Ultra-Leve (3B):   "Qwen/Qwen2.5-VL-3B-Instruct" com subfolder=None
USE_7B = True

if USE_7B:
    base_model_id = "Qwen/Qwen2.5-VL-7B-Instruct"
    adapter_id = "lucasoc/sci-image-models"
    subfolder = "qwen2_5_vl_7b"
else:
    base_model_id = "Qwen/Qwen2.5-VL-3B-Instruct"
    adapter_id = "lucasoc/sci-image-models"
    subfolder = None

# 1. Carregar processador
processor = AutoProcessor.from_pretrained(
    adapter_id,
    subfolder=subfolder if subfolder else None
)

# 2. Carregar modelo base em 4-bit NF4
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_use_double_quant=True,
)
base_model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
    base_model_id,
    quantization_config=bnb_config,
    torch_dtype=torch.float16,
    device_map="auto"
)

# 3. Carregar o adapter LoRA
if subfolder:
    model = PeftModel.from_pretrained(base_model, adapter_id, subfolder=subfolder)
else:
    model = PeftModel.from_pretrained(base_model, adapter_id)
model.eval()

# 4. Processar imagem em resolucao original
image_path = "grafico_cientifico.png"
image = Image.open(image_path).convert("RGB")

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": image},
            {"type": "text", "text": "Extract all numerical data points from this scientific figure panel into a Markdown table with clear column headers."}
        ]
    }
]

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, padding=True, return_tensors="pt").to("cuda")

with torch.inference_mode():
    generated_ids = model.generate(**inputs, max_new_tokens=1024, temperature=0.0)
    generated_ids_trimmed = [
        out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
    ]
    output_text = processor.batch_decode(
        generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
    )[0]

print("--- Tabela Markdown Extraida ---")
print(output_text)

Detalhes de Treinamento

  • Modelos: Qwen2.5-VL-7B-Instruct (Campeão SOTA) e Qwen2.5-VL-3B-Instruct (Leve)
  • Metodo de Adaptacao: 4-bit QLoRA ($r=16, \alpha=32, \text{dropout}=0.05$)
  • Resolucao: Original nativa (sem downsampling previo, ate ~1 Megapixel por imagem)
  • Otimizador: paged_adamw_8bit com Cosine Annealing e taxa de aprendizado $1 \times 10^{-4}$
  • Funcao de Perda: ICDAR Metric-Aware Loss com surrogate diferenciavel para metricas de tabela
  • Hardware: NVIDIA GeForce RTX 3090 (24 GB VRAM)
  • Tempo de Treinamento 7B: 1 hora e 20 minutos (273 passos em 3 epocas)
  • Tempo de Treinamento 3B: 1 hora e 38 minutos (273 passos em 3 epocas)
  • Codigo Fonte Oficial: sci-image-markdown no GitHub
Downloads last month
25
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for lucasoc/sci-image-models

Adapter
(295)
this model

Paper for lucasoc/sci-image-models