lucasoc commited on
Commit
2aecc4b
·
verified ·
1 Parent(s): e0efc06

docs: atualiza explicacao detalhada da loss icdar vs padrao e remove emojis

Browse files
Files changed (1) hide show
  1. README.md +48 -52
README.md CHANGED
@@ -23,89 +23,85 @@ metrics:
23
  - valid_table
24
  ---
25
 
26
- # Sci-Image-Markdown: Extrator de Tabelas com Qwen2.5-VL-3B LoRA (Resolução Original Nativa)
27
 
28
- Adapter fine-tunado com **PEFT LoRA** sobre o modelo base **Qwen2.5-VL-3B-Instruct**, especializado 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.
29
 
30
- Este modelo foi otimizado com a função de perda **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).
31
 
32
  ---
33
 
34
- ## ⚡ Uso de GPU e Memória VRAM Durante o Treinamento
35
 
36
- Diferente de pipelines tradicionais que reduzem ou distorcem as figuras científicas, este modelo foi treinado preservando a **resolução vetorial nativa integral** das imagens.
37
 
38
- | Modo / Resolução | Resolução Máxima | Grid de Patches de Visão | **VRAM Média Alocada** | VRAM Pico |
39
  | :--- | :---: | :---: | :---: | :---: |
40
- | **Resolução Reduzida (Baseline)** | 280 px (Downsampling PIL) | ~392×392 máx | **~5,2 GB** | ~6,1 GB |
41
- | **Resolução Original Nativa (Este Modelo)** | **Original (Sem downsampling)** | **Até 1003520 pixels (~1 MP)** | **~17,2 GB** | **~18,5 GB** |
42
 
43
- > **Nota de Hardware:** O treinamento em resolução original foi conduzido em uma **NVIDIA GeForce RTX 3090 (24 GB VRAM)** utilizando quantização **4-bit NF4 (QLoRA)**, otimizador `paged_adamw_8bit` e *Gradient Checkpointing*. A alta alocação de VRAM decorre do número dinâmico de tokens visuais bidimensionais necessários para capturar com máxima fidelidade eixos, marcadores e números minúsculos de gráficos complexos.
44
 
45
  ---
46
 
47
- ## 📊 Resultados no Conjunto de Teste (373 Figuras Científicas)
48
 
49
- Avaliação no benchmark oficial [SciKnowOrg/Sci-ImageMiner](https://huggingface.co/datasets/SciKnowOrg/Sci-ImageMiner) (Tarefa 2: Extração de Tabelas de Dados). Ganhos reportados em **pontos percentuais (pp)**:
50
 
51
- | Métrica | Base Zero-Shot | SFT Padrão | LoRA 280px (Anterior) | **Nosso LoRA (Resolução Original)** | **Ganho vs Base (pp)** | **Ganho vs 280px (pp)** |
52
  | :--- | :---: | :---: | :---: | :---: | :---: | :---: |
53
- | **Tabelas Válidas (`valid_table`)** | 88.74% | 99.73% | 99.73% | **100.00%** | **+11.26 pp** | **+0.27 pp** |
54
- | **Precisão de Células (`cell_precision`)** | 21.08% | 21.37% | 39.58% | **47.11%** | **+26.03 pp** | **+7.53 pp** |
55
- | **F1-Score de Células (`cell_f1`)** | 18.42% | 20.60% | 34.67% | **42.49%** | **+24.07 pp** | **+7.82 pp** |
56
  | **Similaridade Estrutural (`TEDS`)** | 23.16% | 23.16% | 36.24% | **40.29%** | **+17.13 pp** | **+4.05 pp** |
57
  | **ICDAR Numerical RMS** | 48.12% | 48.12% | 51.66% | **51.32%** | **+3.20 pp** | **-0.34 pp** |
58
  | **ICDAR Score Composto** | 35.64% | 35.64% | 43.95% | **45.80%** | **+10.16 pp** | **+1.85 pp** |
59
 
60
  ---
61
 
62
- ## 🧠 Explicação Didática da Loss: Loss Padrão vs. Nossa Loss
63
 
64
- ### 1. A Diferença Simples: Loss Padrão vs. Nossa Loss
65
 
66
- | Característica | Loss Padrão (Cross-Entropy / SFT) | Nossa Loss (ICDAR Metric-Aware Loss) |
67
- | :--- | :--- | :--- |
68
- | **Peso dos Tokens** | **Todos os tokens têm o mesmo peso ($1.0$).** | **Ponderação Seletiva guiada pela relevância:**<br>• Números (`0-9`, `.`, `-`): **Peso 3,0×**<br>• Estrutura (`|`, `
69
- `, `---`): **Peso 2,0×**<br>• Texto descritivo/espaços: **Peso 1,0×** |
70
- | **Como enxerga o erro** | Trata errar uma letra textual qualquer (`"Tempo"` $
71
- | **Comportamento do Modelo** | O modelo pode atingir loss muito baixa prevendo bem palavras comuns e pontuação, mas continuar errando as medidas do gráfico ou quebrando a tabela. | O modelo é forçado a priorizar a exatidão dos eixos, ticks e a integridade de todas as colunas. |
72
 
73
- ---
 
 
74
 
75
- ### 2. Como ela atua especificamente no LoRA?
76
 
77
- No treinamento com **PEFT QLoRA**, o modelo base `Qwen2.5-VL-3B` permanece **100% congelado em 4-bit (NF4)**. Os únicos parâmetros que aprendem e são atualizados são os adaptadores LoRA (duas matrizes lineares de rank baixo, $A$ e $B$, inseridas nas projeções de atenção $q\_proj, k\_proj, v\_proj, o\_proj$):
78
 
79
- 1. **Amplificação Seletiva de Gradientes na Retropropagação:**
80
- Quando o modelo comete um erro em um token numérico ou estrutural, a nossa loss multiplica o gradiente do logit por $3.0$ ou $2.0$. Esse gradiente amplificado via regra da cadeia chega diretamente às matrizes treináveis do LoRA.
81
- 2. **Direcionamento da Atenção Visual:**
82
- Esse gradiente forte força os pesos do LoRA a ajustar os padrões de atenção espacial do Vision Transformer, fazendo o modelo "olhar" e focar com muito mais nitidez nas marcações de eixos, legendas e números minúsculos da figura.
83
- 3. **Preservação de Capacidade (Orçamento de Parâmetros):**
84
- O LoRA treina apenas **3,6 milhões de parâmetros** (apenas **0,098%** dos 3,75 bilhões de parâmetros do modelo). Se usássemos a loss padrão, o LoRA gastaria quase toda a sua capacidade aprendendo tarefas fáceis de linguagem natural. Com a nossa loss, **o orçamento de 0,098% de parâmetros é canalizado exatamente para a fidelidade numérica e estrutural**.
85
 
86
- ---
 
 
 
 
 
 
87
 
88
- ### 3. O Porquê da Escolha (Justificativa Técnica)
89
 
90
- 1. **Alinhamento com as Métricas Oficiais (TEDS e RMS):**
91
- O benchmark oficial avalia a árvore estrutural (TEDS) e os dados numéricos (RMS). A Cross-Entropy clássica é agnóstica à semântica tabular. A nossa loss atua como um *surrogate contínuo diferenciável*, treinando o modelo para maximizar exatamente o critério de avaliação.
92
- 2. **Tabelas 100% Válidas (Fim das barras perdidas):**
93
- Ao dobrar o peso de delimitadores (`|`, `---`, `
94
- `), o modelo aprendeu que esquecer de fechar uma célula inutiliza toda a tabela. O resultado empírico foi atingir **100,00% de tabelas válidas** no conjunto de teste.
95
- 3. **Velocidade Máxima com GPU Tensor Reward:**
96
- As métricas tradicionais (como o algoritmo de Zhang-Shasha do TEDS) rodam na CPU sobre árvores de texto e levariam dezenas de horas se chamadas durante o treino. Ao pré-computar máscaras na VRAM e avaliar a estrutura diretamente sobre tensores de GPU, mantivemos a velocidade nativa da placa gráfica com zero overhead.
97
 
98
  ---
99
 
100
- ## 🚀 Como Usar para Inferência
101
 
102
- ### Instalação das Dependências
103
 
104
  ```bash
105
  pip install torch transformers peft qwen-vl-utils pillow torchvision bitsandbytes
106
  ```
107
 
108
- ### Exemplo em Python (Inferência em Resolução Original)
109
 
110
  ```python
111
  import torch
@@ -120,7 +116,7 @@ adapter_id = "lucasoc/sci-image-models"
120
  # 1. Carregar processador
121
  processor = AutoProcessor.from_pretrained(adapter_id)
122
 
123
- # 2. Carregar modelo base em 4-bit (compatível com GPUs a partir de 6GB para inferência)
124
  bnb_config = BitsAndBytesConfig(
125
  load_in_4bit=True,
126
  bnb_4bit_quant_type="nf4",
@@ -138,7 +134,7 @@ base_model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
138
  model = PeftModel.from_pretrained(base_model, adapter_id)
139
  model.eval()
140
 
141
- # 4. Processar imagem em resolução original
142
  image_path = "grafico_cientifico.png"
143
  image = Image.open(image_path).convert("RGB")
144
 
@@ -165,18 +161,18 @@ with torch.inference_mode():
165
  generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
166
  )[0]
167
 
168
- print("--- Tabela Markdown Extraída ---")
169
  print(output_text)
170
  ```
171
 
172
  ---
173
 
174
- ## 🛠 Detalhes de Treinamento
175
 
176
  - **Arquitetura Base:** `Qwen/Qwen2.5-VL-3B-Instruct`
177
- - **Método de Adaptação:** 4-bit QLoRA ($r=16, \alpha=32, \text{dropout}=0.05$)
178
- - **Resolução:** Original nativa (sem downsampling prévio, até ~1 Megapixel por imagem)
179
  - **Otimizador:** `paged_adamw_8bit` com *Cosine Annealing* e taxa de aprendizado $1 \times 10^{-4}$
180
- - **Função de Perda:** ICDAR Metric-Aware Loss com surrogate diferenciável para métricas de tabela
181
  - **Hardware:** NVIDIA GeForce RTX 3090 (24 GB VRAM)
182
- - **Código Fonte:** [sci-image-markdown](https://github.com/lucasdocunha/sci-image-markdown)
 
23
  - valid_table
24
  ---
25
 
26
+ # Sci-Image-Markdown: Extrator de Tabelas com Qwen2.5-VL-3B LoRA (Resolucao Original Nativa)
27
 
28
+ Adapter fine-tunado com **PEFT LoRA** sobre o modelo base **Qwen2.5-VL-3B-Instruct**, especializado na extracao e transcricao direta de dados quantitativos de figuras cientificas para tabelas estruturadas em Markdown com resolucao de imagem nativa/original.
29
 
30
+ Este modelo foi otimizado com a funcao de perda **ICDAR Metric-Aware Loss** (combinando perdas estruturais e numericas diferenciaveis com recompensas diretas em VRAM para Table Edit Distance e Cell RMS Error).
31
 
32
  ---
33
 
34
+ ## Uso de GPU e Memoria VRAM Durante o Treinamento
35
 
36
+ Diferente de pipelines tradicionais que reduzem ou distorcem as figuras cientificas, este modelo foi treinado preservando a **resolucao vetorial nativa integral** das imagens.
37
 
38
+ | Modo / Resolucao | Resolucao Maxima | Grid de Patches de Visao | **VRAM Media Alocada** | VRAM Pico |
39
  | :--- | :---: | :---: | :---: | :---: |
40
+ | **Resolucao Reduzida (Baseline)** | 280 px (Downsampling PIL) | ~392x392 max | **~5,2 GB** | ~6,1 GB |
41
+ | **Resolucao Original Nativa (Este Modelo)** | **Original (Sem downsampling)** | **Ate 1003520 pixels (~1 MP)** | **~17,2 GB** | **~18,5 GB** |
42
 
43
+ > **Nota de Hardware:** O treinamento em resolucao original foi conduzido em uma **NVIDIA GeForce RTX 3090 (24 GB VRAM)** utilizando quantizacao **4-bit NF4 (QLoRA)**, otimizador `paged_adamw_8bit` e *Gradient Checkpointing*. A alta alocacao de VRAM decorre do numero dinamico de tokens visuais bidimensionais necessarios para capturar com maxima fidelidade eixos, marcadores e numeros minusculos de graficos complexos.
44
 
45
  ---
46
 
47
+ ## Resultados no Conjunto de Teste (373 Figuras Cientificas)
48
 
49
+ Avaliacao no benchmark oficial [SciKnowOrg/Sci-ImageMiner](https://huggingface.co/datasets/SciKnowOrg/Sci-ImageMiner) (Tarefa 2: Extracao de Tabelas de Dados). Ganhos reportados estritamente em **pontos percentuais (pp)**:
50
 
51
+ | Metrica | Base Zero-Shot | SFT Padrao | LoRA 280px (Anterior) | **Nosso LoRA (Resolucao Original)** | **Ganho vs Base (pp)** | **Ganho vs 280px (pp)** |
52
  | :--- | :---: | :---: | :---: | :---: | :---: | :---: |
53
+ | **Tabelas Validas (`valid_table`)** | 88.74% | 99.73% | 99.73% | **100.00%** | **+11.26 pp** | **+0.27 pp** |
54
+ | **Precisao de Celulas (`cell_precision`)** | 21.08% | 21.37% | 39.58% | **47.11%** | **+26.03 pp** | **+7.53 pp** |
55
+ | **F1-Score de Celulas (`cell_f1`)** | 18.42% | 20.60% | 34.67% | **42.49%** | **+24.07 pp** | **+7.82 pp** |
56
  | **Similaridade Estrutural (`TEDS`)** | 23.16% | 23.16% | 36.24% | **40.29%** | **+17.13 pp** | **+4.05 pp** |
57
  | **ICDAR Numerical RMS** | 48.12% | 48.12% | 51.66% | **51.32%** | **+3.20 pp** | **-0.34 pp** |
58
  | **ICDAR Score Composto** | 35.64% | 35.64% | 43.95% | **45.80%** | **+10.16 pp** | **+1.85 pp** |
59
 
60
  ---
61
 
62
+ ## Comparativo: Loss Padrao vs. Nossa Loss
63
 
64
+ ### 1. O que e a Loss Padrao (Cross-Entropy / SFT)
65
 
66
+ No treinamento supervisionado tradicional, a funcao de perda trata todos os tokens com exatamente o mesmo peso (1.0).
 
 
 
 
 
67
 
68
+ - **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").
69
+ - **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.
70
+ - **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.
71
 
72
+ ### 2. A Nossa Solucao: ICDAR Metric-Aware Loss
73
 
74
+ Para resolver esse problema, desenhamos uma funcao de perda que penaliza os erros de forma seletiva de acordo com a importancia de cada token:
75
 
76
+ - **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.
77
+ - **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.
78
+ - **Tokens Textuais Comuns (Peso 1.0x):** Textos explicativos e espacos mantem peso padrao unitario.
 
 
 
79
 
80
+ ### 3. Como a Loss atua no LoRA
81
+
82
+ No treinamento com PEFT QLoRA, os pesos do modelo base Qwen2.5-VL-3B 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) sao atualizadas:
83
+
84
+ - **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.
85
+ - **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.
86
+ - **Maximizacao do Orcamento de Parametros:** Como o LoRA treina apenas 3,6 milhoes de parametros (apenas 0,098% do modelo total), a nossa loss impede que esse orcamento reduzido seja gasto com linguagem natural trivial, canalizando praticamente todo o aprendizado para a precisao numerica e integridade estrutural.
87
 
88
+ ### 4. Por que dessa Escolha?
89
 
90
+ - **Alinhamento as Metricas Oficiais:** As competicoes ICDAR avaliam tabelas por meio do TEDS (Tree Edit Distance) e do RMS Numerico. A Cross-Entropy padrao desconhece essas restricoes. A nossa loss atua como um surrogate continuo diferenciavel que alinha o objetivo do treino diretamente ao criterio de teste.
91
+ - **Garantia de Tabelas 100% Validas:** A penalidade duplicada em delimitadores ensinou o modelo a nunca esquecer o fechamento de uma celula, resultando em 100,00% de tabelas validas no conjunto de teste.
92
+ - **Zero Overhead com GPU Tensor Reward:** Em vez de calcular distancias em arvores na CPU (o que travaria o treinamento), a loss opera inteiramente na memoria VRAM da GPU atraves de tensores de contagem e comparacao de mascaras booleanas.
 
 
 
 
93
 
94
  ---
95
 
96
+ ## Como Usar para Inferencia
97
 
98
+ ### Instalacao das Dependencias
99
 
100
  ```bash
101
  pip install torch transformers peft qwen-vl-utils pillow torchvision bitsandbytes
102
  ```
103
 
104
+ ### Exemplo em Python (Inferencia em Resolucao Original)
105
 
106
  ```python
107
  import torch
 
116
  # 1. Carregar processador
117
  processor = AutoProcessor.from_pretrained(adapter_id)
118
 
119
+ # 2. Carregar modelo base em 4-bit (compativel com GPUs a partir de 6GB para inferencia)
120
  bnb_config = BitsAndBytesConfig(
121
  load_in_4bit=True,
122
  bnb_4bit_quant_type="nf4",
 
134
  model = PeftModel.from_pretrained(base_model, adapter_id)
135
  model.eval()
136
 
137
+ # 4. Processar imagem em resolucao original
138
  image_path = "grafico_cientifico.png"
139
  image = Image.open(image_path).convert("RGB")
140
 
 
161
  generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
162
  )[0]
163
 
164
+ print("--- Tabela Markdown Extraida ---")
165
  print(output_text)
166
  ```
167
 
168
  ---
169
 
170
+ ## Detalhes de Treinamento
171
 
172
  - **Arquitetura Base:** `Qwen/Qwen2.5-VL-3B-Instruct`
173
+ - **Metodo de Adaptacao:** 4-bit QLoRA ($r=16, \alpha=32, \text{dropout}=0.05$)
174
+ - **Resolucao:** Original nativa (sem downsampling previo, ate ~1 Megapixel por imagem)
175
  - **Otimizador:** `paged_adamw_8bit` com *Cosine Annealing* e taxa de aprendizado $1 \times 10^{-4}$
176
+ - **Funcao de Perda:** ICDAR Metric-Aware Loss com surrogate diferenciavel para metricas de tabela
177
  - **Hardware:** NVIDIA GeForce RTX 3090 (24 GB VRAM)
178
+ - **Codigo Fonte:** [sci-image-markdown](https://github.com/lucasdocunha/sci-image-markdown)