Views
No views yet
1from transformers import Qwen2VLForConditionalGeneration, AutoProcessor, GenerationConfig
2from qwen_vl_utils import process_vision_info
3import torch
4
5MODEL_PATH = 'JZPeterPan/MedVLM-R1'
6
7model = Qwen2VLForConditionalGeneration.from_pretrained(
8 MODEL_PATH,
9 torch_dtype=torch.bfloat16,
10 attn_implementation="flash_attention_2",
11 device_map="auto",
12)
13
14processor = AutoProcessor.from_pretrained(MODEL_PATH)
15
16temp_generation_config = GenerationConfig(
17 max_new_tokens=1024,
18 do_sample=False,
19 temperature=1,
20 num_return_sequences=1,
21 pad_token_id=151643,
22)1question = {"image": ['images/successful_cases/mdb146.png'], "problem": "What content appears in this image?\nA) Cardiac tissue\nB) Breast tissue\nC) Liver tissue\nD) Skin tissue", "solution": "B", "answer": "Breast tissue"}
2
3question = {"image": ["images/successful_cases/person19_virus_50.jpeg"], "problem": "What content appears in this image?\nA) Lungs\nB) Bladder\nC) Brain\nD) Heart", "solution": "A", "answer": "Lungs"}
4
5question = {"image":["images/successful_cases/abd-normal023599.png"],"problem":"Is any abnormality evident in this image?\nA) No\nB) Yes.","solution":"A","answer":"No"}
6
7question = {"image":["images/successful_cases/foot089224.png"],"problem":"Which imaging technique was utilized for acquiring this image?\nA) MRI\nB) Electroencephalogram (EEG)\nC) Ultrasound\nD) Angiography","solution":"A","answer":"MRI"}
8
9question = {"image":["images/successful_cases/knee031316.png"],"problem":"What can be observed in this image?\nA) Chondral abnormality\nB) Bone density loss\nC) Synovial cyst formation\nD) Ligament tear","solution":"A","answer":"Chondral abnormality"}
10
11question = {"image":["images/successful_cases/shoulder045906.png"],"problem":"What can be visually detected in this picture?\nA) Bone fracture\nB) Soft tissue fluid\nC) Blood clot\nD) Tendon tear","solution":"B","answer":"Soft tissue fluid"}
12
13question = {"image":["images/successful_cases/brain003631.png"],"problem":"What attribute can be observed in this image?\nA) Focal flair hyperintensity\nB) Bone fracture\nC) Vascular malformation\nD) Ligament tear","solution":"A","answer":"Focal flair hyperintensity"}
14
15question = {"image":["images/successful_cases/mrabd005680.png"],"problem":"What can be observed in this image?\nA) Pulmonary embolism\nB) Pancreatic abscess\nC) Intraperitoneal mass\nD) Cardiac tamponade","solution":"C","answer":"Intraperitoneal mass"}1QUESTION_TEMPLATE = """
2 {Question}
3 Your task:
4 1. Think through the question step by step, enclose your reasoning process in <think>...</think> tags.
5 2. Then provide the correct single-letter choice (A, B, C, D,...) inside <answer>...</answer> tags.
6 3. No extra information or text outside of these tags.
7 """
8
9message = [{
10 "role": "user",
11 "content": [{"type": "image", "image": f"file://{question['image'][0]}"}, {"type": "text","text": QUESTION_TEMPLATE.format(Question=question['problem'])}]
12}]
13
14text = processor.apply_chat_template(message, tokenize=False, add_generation_prompt=True)
15
16image_inputs, video_inputs = process_vision_info(message)
17inputs = processor(
18 text=text,
19 images=image_inputs,
20 videos=video_inputs,
21 padding=True,
22 return_tensors="pt",
23).to("cuda")
24
25generated_ids = model.generate(**inputs, use_cache=True, max_new_tokens=1024, do_sample=False, generation_config=temp_generation_config)
26
27generated_ids_trimmed = [out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]
28
29output_text = processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)
30
31print(f'model output: {output_text[0]}')
321question = {"image":["images/failure_cases/mrabd021764.png"],"problem":"What is the observable finding in this image?\nA) Brain lesion\nB) Intestinal lesion\nC) Gallbladder lesion\nD) Pancreatic lesion","solution":"D","answer":"Pancreatic lesion"}
2
3question = {"image":["images/failure_cases/spine010017.png"],"problem":"What can be observed in this image?\nA) Cystic lesions\nB) Fractured bones\nC) Inflamed tissue\nD) Nerve damage","solution":"A","answer":"Cystic lesions"}
4
5question = {"image":["images/failure_cases/ankle056120.png"],"problem":"What attribute can be observed in this image?\nA) Bursitis\nB) Flexor pathology\nC) Tendonitis\nD) Joint inflammation","solution":"B","answer":"Flexor pathology"}
6
7question = {"image":["images/failure_cases/lung067009.png"],"problem":"What is the term for the anomaly depicted in the image?\nA) Pulmonary embolism\nB) Airspace opacity\nC) Lung consolidation\nD) Atelectasis","solution":"B","answer":"Airspace opacity"}
8@article{pan2025medvlm,
title={MedVLM-R1: Incentivizing Medical Reasoning Capability of Vision-Language Models (VLMs) via Reinforcement Learning},
author={Pan, Jiazhen and Liu, Che and Wu, Junde and Liu, Fenglin and Zhu, Jiayuan and Li, Hongwei Bran and Chen, Chen and Ouyang, Cheng and Rueckert, Daniel},
journal={arXiv preprint arXiv:2502.19634},
year={2025}
}