ECOFRI commited on
Commit
1190de6
1 Parent(s): 14c93b0

Upload model

Browse files
Files changed (2) hide show
  1. CXR_LLAVA_HF.py +32 -3
  2. VisualTransformer.py +5 -0
CXR_LLAVA_HF.py CHANGED
@@ -559,13 +559,42 @@ class CXRLLAVAModel(PreTrainedModel):
559
  raise ValueError(f'Unsupported tensor type: {return_tensors}')
560
  return input_ids
561
 
562
- def generate_cxr_repsonse(self, chat, pil_image, temperature=0.2, top_p=0.8):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
563
  with torch.no_grad():
564
  streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True, timeout=15)
565
  import numpy as np
566
- pil_image = np.expand_dims(pil_image,axis=-1)
567
  prompt = self.apply_chat_template(chat)
568
- images = self.vision_tower.image_processor(pil_image, return_tensors='pt')['pixel_values']
569
  images = images.to(self.device)
570
  input_ids = self.tokenizer_image_token(prompt, self.tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()
571
  stopping_criteria = KeywordsStoppingCriteria(["</s>"], self.tokenizer, input_ids)
 
559
  raise ValueError(f'Unsupported tensor type: {return_tensors}')
560
  return input_ids
561
 
562
+ def write_radiologic_report(self, image, temperature=0.2, top_p=0.8):
563
+ chat = [
564
+ {"role": "system",
565
+ "content": "You are a helpful radiologist. Try to interpret chest x ray image and answer to the question that user provides."},
566
+ {"role": "user",
567
+ "content": "<image>\nWrite a radiologic report on the given chest radiograph, including information about atelectasis, cardiomegaly, consolidation, pulmonary edema, pleural effusion, and pneumothorax.\n"}
568
+ ]
569
+ response = self.generate_cxr_repsonse(chat=chat,image=image, temperature=temperature, top_p=top_p)
570
+ return response
571
+
572
+ def write_differential_diagnosis(self, image, temperature=0.2, top_p=0.8):
573
+ chat = [
574
+ {"role": "system",
575
+ "content": "You are a helpful radiologist. Try to interpret chest x ray image and answer to the question that user provides."},
576
+ {"role": "user",
577
+ "content": "<image>\nWhat are the possible differential diagnoses for this patient?\n"}
578
+ ]
579
+ response = self.generate_cxr_repsonse(chat=chat, image=image, temperature=temperature, top_p=top_p)
580
+ return response
581
+ def ask_question(self, question, image, temperature=0.2, top_p=0.8):
582
+ chat = [
583
+ {"role": "system",
584
+ "content": "You are a helpful radiologist. Try to interpret chest x ray image and answer to the question that user provides."},
585
+ {"role": "user",
586
+ "content": "<image>\n"+question}
587
+ ]
588
+ response = self.generate_cxr_repsonse(chat=chat, image=image, temperature=temperature, top_p=top_p)
589
+ return response
590
+
591
+ def generate_cxr_repsonse(self, chat, image, temperature=0.2, top_p=0.8):
592
  with torch.no_grad():
593
  streamer = TextIteratorStreamer(self.tokenizer, skip_prompt=True, skip_special_tokens=True, timeout=15)
594
  import numpy as np
595
+ image = np.expand_dims(image,axis=-1)
596
  prompt = self.apply_chat_template(chat)
597
+ images = self.vision_tower.image_processor(image, return_tensors='pt')['pixel_values']
598
  images = images.to(self.device)
599
  input_ids = self.tokenizer_image_token(prompt, self.tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()
600
  stopping_criteria = KeywordsStoppingCriteria(["</s>"], self.tokenizer, input_ids)
VisualTransformer.py CHANGED
@@ -1,3 +1,8 @@
 
 
 
 
 
1
  from collections import OrderedDict
2
  import math
3
  from typing import Callable, Optional, Sequence, Tuple
 
1
+ '''
2
+ Source code from OPEN_CLIP project.
3
+ https://github.com/mlfoundations/open_clip/blob/main/LICENSE
4
+ '''
5
+
6
  from collections import OrderedDict
7
  import math
8
  from typing import Callable, Optional, Sequence, Tuple