|
|
|
DePlot |
|
Overview |
|
DePlot was proposed in the paper DePlot: One-shot visual language reasoning by plot-to-table translation from Fangyu Liu, Julian Martin Eisenschlos, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Wenhu Chen, Nigel Collier, Yasemin Altun. |
|
The abstract of the paper states the following: |
|
Visual language such as charts and plots is ubiquitous in the human world. Comprehending plots and charts requires strong reasoning skills. Prior state-of-the-art (SOTA) models require at least tens of thousands of training examples and their reasoning capabilities are still much limited, especially on complex human-written queries. This paper presents the first one-shot solution to visual language reasoning. We decompose the challenge of visual language reasoning into two steps: (1) plot-to-text translation, and (2) reasoning over the translated text. The key in this method is a modality conversion module, named as DePlot, which translates the image of a plot or chart to a linearized table. The output of DePlot can then be directly used to prompt a pretrained large language model (LLM), exploiting the few-shot reasoning capabilities of LLMs. To obtain DePlot, we standardize the plot-to-table task by establishing unified task formats and metrics, and train DePlot end-to-end on this task. DePlot can then be used off-the-shelf together with LLMs in a plug-and-play fashion. Compared with a SOTA model finetuned on more than >28k data points, DePlot+LLM with just one-shot prompting achieves a 24.0% improvement over finetuned SOTA on human-written queries from the task of chart QA. |
|
DePlot is a model that is trained using Pix2Struct architecture. You can find more information about Pix2Struct in the Pix2Struct documentation. |
|
DePlot is a Visual Question Answering subset of Pix2Struct architecture. It renders the input question on the image and predicts the answer. |
|
Usage example |
|
Currently one checkpoint is available for DePlot: |
|
|
|
google/deplot: DePlot fine-tuned on ChartQA dataset |
|
|
|
thon |
|
from transformers import AutoProcessor, Pix2StructForConditionalGeneration |
|
import requests |
|
from PIL import Image |
|
model = Pix2StructForConditionalGeneration.from_pretrained("google/deplot") |
|
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") |
|
predictions = model.generate(**inputs, max_new_tokens=512) |
|
print(processor.decode(predictions[0], skip_special_tokens=True)) |
|
|
|
Fine-tuning |
|
To fine-tune DePlot, refer to the pix2struct fine-tuning notebook. For Pix2Struct models, we have found out that fine-tuning the model with Adafactor and cosine learning rate scheduler leads to faster convergence: |
|
thon |
|
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 is a model trained using Pix2Struct architecture. For API reference, see Pix2Struct documentation. |
|
|