# DePlot

## Aperçu

DePlot a été proposé dans l’article [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.

L'abstract de l'article énonce ce qui suit :

*Le langage visuel, tel que les graphiques et les diagrammes, est omniprésent dans le monde humain. La compréhension des graphiques et des diagrammes nécessite de solides compétences en raisonnement. Les modèles d'état de l'art (SOTA) antérieurs nécessitent au moins des dizaines de milliers d'exemples d'entraînement et leurs capacités de raisonnement restent très limitées, en particulier sur des requêtes complexes rédigées par des humains. Cet article présente la première solution one-shot pour le raisonnement en langage visuel. Nous décomposons le défi du raisonnement en langage visuel en deux étapes : (1) la traduction de graphique en texte, et (2) le raisonnement sur le texte traduit. La clé de cette méthode est un module de conversion de modalité, nommé DePlot, qui traduit l'image d'un graphique ou d'un diagramme en un tableau linéarisé. La sortie de DePlot peut ensuite être utilisée directement pour interroger un grand modèle de langage (LLM) pré-entraîné, en exploitant les capacités de raisonnement few-shot des LLM. Pour obtenir DePlot, nous standardisons la tâche de conversion de graphique en tableau en établissant des formats de tâche et des métriques unifiés, et nous entraînons DePlot de bout en bout sur cette tâche. DePlot peut ensuite être utilisé tel quel avec des LLM de manière plug-and-play. Par rapport à un modèle SOTA affiné sur plus de >28k points de données, DePlot+LLM avec un simple prompting one-shot atteint une amélioration de 24,0 % par rapport au SOTA affiné sur les requêtes rédigées par des humains de la tâche de chart QA.*

DePlot est un modèle entraîné à l'aide de l'architecture `Pix2Struct`. Vous trouverez plus d'informations sur `Pix2Struct` dans la [documentation Pix2Struct](./pix2struct). DePlot est un sous-ensemble de Question Answering visuel de l'architecture `Pix2Struct`. Il affiche la question d'entrée sur l'image et prédit la réponse.

## Exemple d'utilisation

Un point de contrôle est actuellement disponible pour DePlot :

- `google/deplot` : DePlot fine-tuné sur le jeu de données 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))
```

## Ajustement fin

Pour affiner DePlot, reportez-vous au [notebook d'affinage](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb) de pix2struct. Pour les modèles `Pix2Struct`, nous avons constaté que l'affinage du modèle avec Adafactor et un planificateur de taux d'apprentissage cosinus conduit à une convergence plus rapide :

```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 est un modèle entraîné à l'aide de l'architecture `Pix2Struct`. Pour la référence de l'API, consultez la [documentation de `Pix2Struct`](./pix2struct).

