inference.py (41 lines of code) (raw):
from transformers import AutoModelForCausalLM, AutoProcessor
import torch
from PIL import Image
import argparse
def load(repo_id):
model = (
AutoModelForCausalLM.from_pretrained(repo_id, torch_dtype=torch.float16, trust_remote_code=True)
.to("cuda")
.eval()
)
processor = AutoProcessor.from_pretrained(repo_id, trust_remote_code=True)
return model, processor
@torch.no_grad()
@torch.inference_mode()
def infer(image_path, model, processor):
prompts = ["<COLOR>", "<LIGHTING>", "<LIGHTING_TYPE>", "<COMPOSITION>"]
image = Image.open(image_path)
for prompt in prompts:
inputs = processor(text=prompt, images=image, return_tensors="pt").to("cuda", torch.float16)
generated_ids = model.generate(
input_ids=inputs["input_ids"],
pixel_values=inputs["pixel_values"],
max_new_tokens=1024,
early_stopping=False,
do_sample=False,
num_beams=3,
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
parsed_answer = processor.post_process_generation(
generated_text, task=prompt, image_size=(image.width, image.height)
)
print(parsed_answer)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--image_path", type=str, help="Path to the image.")
parser.add_argument(
"--repo_id", type=str, default="diffusers/shot-categorizer-v0", help="Path to the image."
)
args = parser.parse_args()
model, processor = load(repo_id=args.repo_id)
infer(image_path=args.image_path, model=model, processor=processor)