Spaces:
Paused
Paused
import math | |
import numpy as np | |
def get_prompt_templates(): | |
prompt_templates = [ | |
'{}.', | |
'a photo of a {}.', | |
'a bad photo of a {}.', | |
'a photo of many {}.', | |
'a sculpture of a {}.', | |
'a photo of the hard to see {}.', | |
'a low resolution photo of the {}.', | |
'a rendering of a {}.', | |
'graffiti of a {}.', | |
'a bad photo of the {}.', | |
'a cropped photo of the {}.', | |
'a tattoo of a {}.', | |
'the embroidered {}.', | |
'a photo of a hard to see {}.', | |
'a bright photo of a {}.', | |
'a photo of a clean {}.', | |
'a photo of a dirty {}.', | |
'a dark photo of the {}.', | |
'a drawing of a {}.', | |
'a photo of my {}.', | |
'the plastic {}.', | |
'a photo of the cool {}.', | |
'a close-up photo of a {}.', | |
'a black and white photo of the {}.', | |
'a painting of the {}.', | |
'a painting of a {}.', | |
'a pixelated photo of the {}.', | |
'a sculpture of the {}.', | |
'a bright photo of the {}.', | |
'a cropped photo of a {}.', | |
'a plastic {}.', | |
'a photo of the dirty {}.', | |
'a jpeg corrupted photo of a {}.', | |
'a blurry photo of the {}.', | |
'a photo of the {}.', | |
'a good photo of the {}.', | |
'a rendering of the {}.', | |
'a {} in a video game.', | |
'a photo of one {}.', | |
'a doodle of a {}.', | |
'a close-up photo of the {}.', | |
'the origami {}.', | |
'the {} in a video game.', | |
'a sketch of a {}.', | |
'a doodle of the {}.', | |
'a origami {}.', | |
'a low resolution photo of a {}.', | |
'the toy {}.', | |
'a rendition of the {}.', | |
'a photo of the clean {}.', | |
'a photo of a large {}.', | |
'a rendition of a {}.', | |
'a photo of a nice {}.', | |
'a photo of a weird {}.', | |
'a blurry photo of a {}.', | |
'a cartoon {}.', | |
'art of a {}.', | |
'a sketch of the {}.', | |
'a embroidered {}.', | |
'a pixelated photo of a {}.', | |
'itap of the {}.', | |
'a jpeg corrupted photo of the {}.', | |
'a good photo of a {}.', | |
'a plushie {}.', | |
'a photo of the nice {}.', | |
'a photo of the small {}.', | |
'a photo of the weird {}.', | |
'the cartoon {}.', | |
'art of the {}.', | |
'a drawing of the {}.', | |
'a photo of the large {}.', | |
'a black and white photo of a {}.', | |
'the plushie {}.', | |
'a dark photo of a {}.', | |
'itap of a {}.', | |
'graffiti of the {}.', | |
'a toy {}.', | |
'itap of my {}.', | |
'a photo of a cool {}.', | |
'a photo of a small {}.', | |
'a tattoo of the {}.', | |
] | |
return prompt_templates | |
def prompt_engineering(classnames, topk=1, suffix='.'): | |
prompt_templates = get_prompt_templates() | |
temp_idx = np.random.randint(min(len(prompt_templates), topk)) | |
if isinstance(classnames, list): | |
classname = random.choice(classnames) | |
else: | |
classname = classnames | |
return prompt_templates[temp_idx].replace('.', suffix).format(classname.replace(',', '').replace('+', ' ')) | |
class AverageMeter(object): | |
"""Computes and stores the average and current value.""" | |
def __init__(self): | |
self.reset() | |
def reset(self): | |
self.val = 0 | |
self.avg = 0 | |
self.sum = 0 | |
self.count = 0 | |
def update(self, val, n=1, decay=0): | |
self.val = val | |
if decay: | |
alpha = math.exp(-n / decay) # exponential decay over 100 updates | |
self.sum = alpha * self.sum + (1 - alpha) * val * n | |
self.count = alpha * self.count + (1 - alpha) * n | |
else: | |
self.sum += val * n | |
self.count += n | |
self.avg = self.sum / self.count |