Views
No views yet
&&& to delimit rows and | to delimit columns. The underlying architecture of this model is UniChart.1from transformers import DonutProcessor, VisionEncoderDecoderModel
2from PIL import Image
3
4model_name = "khhuang/chart-to-table"
5model = VisionEncoderDecoderModel.from_pretrained(model_name).cuda()
6processor = DonutProcessor.from_pretrained(model_name)
7
8image_path = "PATH_TO_IMAGE"
9
10# Format text inputs
11
12input_prompt = "<data_table_generation> <s_answer>"
13
14# Encode chart figure and tokenize text
15img = Image.open(IMAGE_PATH)
16pixel_values = processor(img.convert("RGB"), random_padding=False, return_tensors="pt").pixel_values
17pixel_values = pixel_values.cuda()
18decoder_input_ids = processor.tokenizer(input_prompt, add_special_tokens=False, return_tensors="pt", max_length=510).input_ids.cuda()#.squeeze(0)
19
20
21outputs = model.generate(
22 pixel_values.cuda(),
23 decoder_input_ids=decoder_input_ids.cuda(),
24 max_length=model.decoder.config.max_position_embeddings,
25 early_stopping=True,
26 pad_token_id=processor.tokenizer.pad_token_id,
27 eos_token_id=processor.tokenizer.eos_token_id,
28 use_cache=True,
29 num_beams=4,
30 bad_words_ids=[[processor.tokenizer.unk_token_id]],
31 return_dict_in_generate=True,
32 )
33
34
35sequence = processor.batch_decode(outputs.sequences)[0]
36sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "")
37extracted_table = sequence.split("<s_answer>")[1].strip()1@misc{huang-etal-2023-do,
2 title = "Do LVLMs Understand Charts? Analyzing and Correcting Factual Errors in Chart Captioning",
3 author = "Huang, Kung-Hsiang and
4 Zhou, Mingyang and
5 Chan, Hou Pong and
6 Fung, Yi R. and
7 Wang, Zhenhailong and
8 Zhang, Lingyu and
9 Chang, Shih-Fu and
10 Ji, Heng",
11 year={2023},
12 eprint={2312.10160},
13 archivePrefix={arXiv},
14 primaryClass={cs.CL}
15}