# DePlot

## Genel Bakış

DePlot, Fangyu Liu, Julian Martin Eisenschlos, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Wenhu Chen, Nigel Collier ve Yasemin Altun tarafından kaleme alınan [DePlot: One-shot visual language reasoning by plot-to-table translation](https://huggingface.co/papers/2212.10505) adlı makalede önerilmiştir.

Makalenin özeti şunları belirtmektedir:

*Grafikler ve çizelgeler gibi görsel dil, insan dünyasında her yerde karşımıza çıkar. Grafik ve çizelgeleri anlamak güçlü akıl yürütme becerileri gerektirir. Önceki en iyi (SOTA) modeller, en az on binlerce eğitim örneği gerektirir ve akıl yürütme yetenekleri hâlâ oldukça sınırlıdır, özellikle karmaşık insan yazımı sorgularda. Bu makale, görsel dil akıl yürütme için ilk tek örnek (one-shot) çözümü sunar. Görsel dil akıl yürütme sorununu iki adıma ayırıyoruz: (1) grafikten metne çeviri ve (2) çevrilen metin üzerinde akıl yürütme. Bu yöntemin anahtarı, DePlot adlı bir modül dönüşüm modülüdür; bu modül, bir grafik veya çizelgenin görselini doğrusallaştırılmış bir tabloya çevirir. DePlot'un çıktısı, LLM'lerin az örnek (few-shot) akıl yürütme yeteneklerinden yararlanarak, önceden eğitilmiş büyük bir dil modeline (LLM) doğrudan istem (prompt) olarak kullanılabilir. DePlot'u elde etmek için, grafikten tabloya çeviri görevini birleştirilmiş görev biçimleri ve metrikler belirleyerek standartlaştırıyor ve DePlot'u bu görev üzerinde uçtan uca eğitiyoruz. DePlot, ardından LLM'lerle birlikte tak-çalıştır (plug-and-play) bir şekilde hazır olarak kullanılabilir. 28k'dan fazla veri noktasında ince ayar (finetune) edilmiş bir SOTA modelle karşılaştırıldığında, yalnızca tek örnek istem (one-shot prompting) kullanan DePlot+LLM, grafik QA görevindeki insan yazımı sorgularda ince ayarlı SOTA'ya göre %24,0'lık bir iyileşme elde eder.*

DePlot, `Pix2Struct` mimarisi kullanılarak eğitilen bir modeldir. `Pix2Struct` hakkında daha fazla bilgiyi [Pix2Struct belgelerinde](./pix2struct) bulabilirsiniz. DePlot, `Pix2Struct` mimarisinin Görsel Soru Cevaplama alt kümesidir. Girdi sorusunu görüntü üzerinde işler ve cevabı tahmin eder.

## Kullanım örneği

Şu anda DePlot için bir kontrol noktası mevcut:

- `google/deplot`: ChartQA veri setinde DePlot ile ince ayar

```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))
```

## İnce ayar

DePlot'ı ince ayarlamak için pix2struct [ince ayar defterine](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb) bakın. `Pix2Struct` modelleri için, modelin Adafactor ve kosinüs öğrenme oranı zamanlayıcısıyla ince ayarlanmasının daha hızlı yakınsama sağladığını tespit ettik:

```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, `Pix2Struct` mimarisi kullanılarak eğitilmiş bir modeldir. API referansı için [`Pix2Struct` belgelerini](./pix2struct) inceleyin.

