# DePlot

## Resumen

DePlot fue propuesto en el artículo [DePlot: One-shot visual language reasoning by plot-to-table translation](https://huggingface.co/papers/2212.10505) de Fangyu Liu, Julian Martin Eisenschlos, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Wenhu Chen, Nigel Collier, Yasemin Altun.

El resumen del artículo establece lo siguiente:

*El lenguaje visual, como los gráficos y las representaciones, es ubicuo en el mundo humano. Comprender gráficos y representaciones requiere habilidades sólidas de razonamiento. Los modelos de estado del arte (SOTA) anteriores requieren al menos decenas de miles de ejemplos de entrenamiento y sus capacidades de razonamiento siguen siendo muy limitadas, especialmente en consultas complejas escritas por humanos. Este artículo presenta la primera solución de un solo ejemplo (one-shot) para el razonamiento en lenguaje visual. Descomponemos el desafío del razonamiento en lenguaje visual en dos pasos: (1) traducción de gráfico a texto, y (2) razonamiento sobre el texto traducido. La clave de este método es un módulo de conversión de modalidades, llamado DePlot, que traduce la imagen de un gráfico o representación a una tabla linealizada. La salida de DePlot se puede usar directamente para generar un prompt a un modelo de lenguaje grande (LLM) preentrenado, aprovechando las capacidades de razonamiento de pocos ejemplos (few-shot) de los LLMs. Para obtener DePlot, estandarizamos la tarea de gráfico a tabla estableciendo formatos de tarea y métricas unificados, y entrenamos DePlot de extremo a extremo en esta tarea. DePlot se puede usar entonces listo para usar junto con LLMs de forma plug-and-play. En comparación con un modelo SOTA afinado en más de >28k puntos de datos, DePlot+LLM con solo un prompt de un solo ejemplo (one-shot) logra una mejora del 24.0% sobre el SOTA afinado en consultas escritas por humanos de la tarea de QA de gráficos.*

DePlot es un modelo entrenado con la arquitectura `Pix2Struct`. Puede encontrar más información sobre `Pix2Struct` en la [documentación de Pix2Struct](./pix2struct). DePlot es un subconjunto de Visual Question Answering de la arquitectura `Pix2Struct`. Representa la pregunta de entrada en la imagen y predice la respuesta.

## Ejemplo de uso

Actualmente, hay un punto de control disponible para DePlot:

- `google/deplot`: DePlot afinado en el conjunto de datos ChartQA

```python
import requests
from PIL import Image

from transformers import AutoProcessor, Pix2StructForConditionalGeneration

model = Pix2StructForConditionalGeneration.from_pretrained("google/deplot", device_map="auto")
processor = AutoProcessor.from_pretrained("google/deplot")
url = "https://raw.githubusercontent.com/vis-nlp/ChartQA/main/ChartQA%20Dataset/val/png/5090.png"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(images=image, text="Generate underlying data table of the figure below:", return_tensors="pt").to(model.device)
predictions = model.generate(**inputs, max_new_tokens=512)
print(processor.decode(predictions[0], skip_special_tokens=True))
```

## Ajuste fino

Para ajustar DePlot, consulte el [cuaderno de ajuste fino](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb) de pix2struct. Para los modelos `Pix2Struct`, hemos encontrado que ajustar el modelo con Adafactor y un programador de tasa de aprendizaje coseno conduce a una convergencia más rápida:

```python
from transformers.optimization import Adafactor, get_cosine_schedule_with_warmup

optimizer = Adafactor(self.parameters(), scale_parameter=False, relative_step=False, lr=0.01, weight_decay=1e-05)
scheduler = get_cosine_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=40000)
```

DePlot es un modelo entrenado usando la arquitectura `Pix2Struct`. Para la referencia de la API, consulte la [documentación de `Pix2Struct`](./pix2struct).

