Improving control over the brightness augmentation (I added min, max)

The current v2 brightness augmentation doesn’t support the ability to have a min or max brightness limit, instead it only generates a symmetric distribution… which is a problem for the work I am doing (reading medical diagnostics) as I want to train with mostly neutral -> bright images

I’ve rewritten the functions locally to support it but wanted to see if this is worth doing a PR for to add it in? It’s back compat with the current “max_lighting” default param

class _BrightnessLogit():
def __init__(self, max_lighting=0.2, min_brightness=None, max_brightness=None, p=0.75, draw=None, batch=False):
    store_attr(self, 'max_lighting, min_brightness,max_brightness,p,draw,batch')

def _def_draw(self, x): 

    min_rand = self.min_brightness if self.min_brightness is not None else (.5*(1-self.max_lighting))       
    max_rand = self.max_brightness if self.max_brightness is not None else (.5*(1+self.max_lighting))
                
    if not self.batch:            
        return x.new(x.size(0)).uniform_(min_rand, max_rand) 
    return x.new_zeros(x.size(0)) + random.uniform(min_rand, max_rand)

def before_call(self, x):
    self.change = _draw_mask(x, self._def_draw, draw=self.draw, p=self.p, neutral=0.5, batch=self.batch)

def __call__(self, x): return x.add_(logit(self.change[:,None,None,None]))

or is this something where we are just expected to provide our own draw function/lambda to accomplish this?

( btw max_lighting is a very non-intuitive name…abs_lighting_change would be clearer since max_lighting is also being used to generate a min_lighting :slight_smile: ):

Thanks!

5 Likes

Nice class! :slight_smile: I think this is niche enough that we wouldn’t add it to the library, however.

1 Like