Spaces:
Runtime error
Runtime error
| import abc | |
| import argparse | |
| from typing import List | |
| from torch.nn.parallel import DistributedDataParallel as DDP | |
| from PIL import Image | |
| class BaseEvalModel(abc.ABC): | |
| """Base class encapsulating functionality needed to evaluate a model.""" | |
| def __init__(self, args: List[str]): | |
| """Initialize model. | |
| Args: | |
| args: arguments to model. These should be parsed, or if the model | |
| has no applicable arguments, an error should be thrown if `args` | |
| is non-empty. | |
| """ | |
| def init_distributed(self): | |
| """Wrap model as DDP.""" | |
| self.model = DDP(self.model, device_ids=[self.device]) | |
| def set_device(self, device): | |
| """Set device for model.""" | |
| self.device = device | |
| self.model = self.model.to(device) | |
| def get_outputs( | |
| self, | |
| batch_text: List[str], | |
| batch_images: List[List[Image.Image]], | |
| min_generation_length: int, | |
| max_generation_length: int, | |
| num_beams: int, | |
| length_penalty: float, | |
| ) -> List[str]: | |
| """Get outputs for a batch of images and text. | |
| Args: | |
| batch_text: list of text strings, with the text "<image>" in place | |
| of any images to be included. | |
| batch_images: images to provide to model. Should be a list of lists, | |
| where each list contains the images for a single example. | |
| max_generation_length: maximum length of the generated caption. | |
| Defaults to 10. | |
| num_beams: number of beams to use for beam search. Defaults to 3. | |
| length_penalty: length penalty for beam search. Defaults to -2.0. | |
| Returns: | |
| List of decoded output strings. | |
| """ | |
| def vqa_prompt(self, question, answer=None) -> str: | |
| """Get the prompt to use for VQA evaluation. If the answer is not provided, it should be left blank to be generated by the model. | |
| Returns: | |
| The prompt to use for VQA. | |
| """ | |
| def caption_prompt(self, caption=None) -> str: | |
| """Get the prompt to use for caption evaluation. If the caption is not provided, it should be left blank to be generated by the model. | |
| Returns: | |
| The prompt to use for captioning. | |
| """ | |
| def classification_prompt(self, class_str=None) -> str: | |
| """Get the prompt to use for classification evaluation. If the class_str is not provided, it should be left blank to be generated by the model. | |
| Returns: | |
| The prompt to use for classification. | |
| """ | |