Views
No views yet
conda create --name transformers4571 python=3.11
conda activate transformers4571
pip install transformers==4.57.1
pip install torch pillow einops torchvision accelerate decord2logits_processor=model.build_logit_processor_from_inputs(model_inputs)
to enforce points tokens are generated in a valid way.return_pointing_metadata flag.
Then model.extract_image_points to do the decoding, it returns a list of (image_id, object_id, pixel_x, pixel_y) output points.1from transformers import AutoProcessor, AutoModelForImageTextToText
2import torch
3
4checkpoint_dir = "allenai/MolmoPoint-Img-8B" # or path to a converted HF checkpoint
5
6model = AutoModelForImageTextToText.from_pretrained(
7 checkpoint_dir,
8 trust_remote_code=True,
9 dtype="auto",
10 device_map="auto",
11)
12
13processor = AutoProcessor.from_pretrained(
14 checkpoint_dir,
15 trust_remote_code=True,
16 padding_side="left",
17)
18
19image_messages = [
20 {
21 "role": "user",
22 "content": [
23 {"type": "text", "text": "open microsoft edge"},
24 {"type": "image", "image": "https://assets.techrepublic.com/uploads/2020/08/windows-10-start-menu.jpg"},
25 ]
26 }
27]
28
29inputs = processor.apply_chat_template(
30 image_messages,
31 tokenize=True,
32 add_generation_prompt=True,
33 return_tensors="pt",
34 return_dict=True,
35 padding=True,
36 return_pointing_metadata=True
37)
38metadata = inputs.pop("metadata")
39inputs = {k: v.to("cuda") for k, v in inputs.items()}
40
41with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
42 output = model.generate(
43 **inputs,
44 logits_processor=model.build_logit_processor_from_inputs(inputs),
45 max_new_tokens=200
46 )
47
48generated_tokens = output[:, inputs["input_ids"].size(1):]
49generated_text = processor.post_process_image_text_to_text(generated_tokens, skip_special_tokens=False, clean_up_tokenization_spaces=False)[0]
50points = model.extract_image_points(
51 generated_text,
52 metadata["token_pooling"],
53 metadata["subpatch_mapping"],
54 metadata["image_sizes"]
55)
56
57print(points)
58# points as a list of [object_id, image_num, x, y]
59# expected: [[1, 0, np.float64(250.42718446601944), np.float64(274.73276923076924)]]