Views
No views yet
1import torch
2import torchvision.transforms as transforms
3
4from transformers import EfficientNetForImageClassification
5from PIL import Image
6import requests
7
8
9urls = [
10 'http://images.cocodataset.org/val2017/000000039769.jpg',
11 'http://images.cocodataset.org/test-stuff2017/000000001750.jpg',
12 'http://images.cocodataset.org/test-stuff2017/000000000001.jpg'
13]
14
15image_processor = transforms.Compose(
16 [
17 transforms.Resize((224, 224)),
18 transforms.ToTensor(),
19 transforms.Normalize(
20 mean=[0.485, 0.456, 0.406],
21 std=[0.47853944, 0.4732864, 0.47434163],
22 ),
23 ]
24)
25
26images = []
27for url in urls:
28 image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
29 image = image_processor(image)
30 images.append(image)
31
32
33model_id = 'docling-project/DocumentFigureClassifier-v2.0'
34
35model = EfficientNetForImageClassification.from_pretrained(model_id)
36
37labels = model.config.id2label
38
39device = torch.device("cpu")
40
41torch_images = torch.stack(images).to(device)
42
43with torch.no_grad():
44 logits = model(torch_images).logits # (batch_size, num_classes)
45 probs_batch = logits.softmax(dim=1) # (batch_size, num_classes)
46 probs_batch = probs_batch.cpu().numpy().tolist()
47
48for idx, probs_image in enumerate(probs_batch):
49 preds = [(labels[i], prob) for i, prob in enumerate(probs_image)]
50 preds.sort(key=lambda t: t[1], reverse=True)
51 print(f"{idx}: {preds}")1import onnxruntime
2
3import numpy as np
4import torchvision.transforms as transforms
5
6from PIL import Image
7import requests
8
9LABELS = [
10 "logo",
11 "photograph",
12 "icon",
13 "engineering_drawing",
14 "line_chart",
15 "bar_chart",
16 "other",
17 "table",
18 "flow_chart",
19 "screenshot_from_computer",
20 "signature",
21 "screenshot_from_manual",
22 "geographical_map",
23 "pie_chart",
24 "page_thumbnail",
25 "stamp",
26 "music",
27 "calendar",
28 "qr_code",
29 "bar_code",
30 "full_page_image",
31 "scatter_plot",
32 "chemistry_structure",
33 "topographical_map",
34 "crossword_puzzle",
35 "box_plot"
36]
37
38
39urls = [
40 'http://images.cocodataset.org/val2017/000000039769.jpg',
41 'http://images.cocodataset.org/test-stuff2017/000000001750.jpg',
42 'http://images.cocodataset.org/test-stuff2017/000000000001.jpg'
43]
44
45images = []
46for url in urls:
47 image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
48 images.append(image)
49
50
51image_processor = transforms.Compose(
52 [
53 transforms.Resize((224, 224)),
54 transforms.ToTensor(),
55 transforms.Normalize(
56 mean=[0.485, 0.456, 0.406],
57 std=[0.47853944, 0.4732864, 0.47434163],
58 ),
59 ]
60)
61
62
63processed_images_onnx = [image_processor(image).unsqueeze(0) for image in images]
64
65# onnx needs numpy as input
66onnx_inputs = [item.numpy(force=True) for item in processed_images_onnx]
67
68# pack into a batch
69onnx_inputs = np.concatenate(onnx_inputs, axis=0)
70
71ort_session = onnxruntime.InferenceSession(
72 "./DocumentFigureClassifier-v2_0-onnx/model.onnx",
73 providers=["CUDAExecutionProvider", "CPUExecutionProvider"]
74)
75
76
77for item in ort_session.run(None, {'input': onnx_inputs}):
78 for x in iter(item):
79 pred = x.argmax()
80 print(LABELS[pred])@article{Tan2019EfficientNetRM,
title={EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks},
author={Mingxing Tan and Quoc V. Le},
journal={ArXiv},
year={2019},
volume={abs/1905.11946}
}
@techreport{Docling,
author = {Deep Search Team},
month = {8},
title = {{Docling Technical Report}},
url={https://arxiv.org/abs/2408.09869},
eprint={2408.09869},
doi = "10.48550/arXiv.2408.09869",
version = {1.0.0},
year = {2024}
}