Is there a way to pass in a custom function which can add to preprocessing of the data. Like if I want to equalise the histogram of an image before passing it to network, what is the best way to do it in existing fastai setup?
Take a look at transforms.py. You can define new class to do transformation and pass it with tfms.
And it doesn’t even need to be a class - you can pass a function too!
Do you have an example for such a class or function handy?
I tried the following class
class gammaCorrection():
def __init__(self, b): self.b = b
def __call__(self, x):
gamma = self.b
return np.uint8(cv2.pow(x / 255., gamma)*255.)
used it as
tfms = tfms_from_model(arch, sz, aug_tfms=[gammaCorrection(0.8)], max_zoom=1.1)
data = ImageClassifierData.from_paths(PATH, bs=bs, tfms=tfms)
learn = ConvLearner.pretrained(arch, data, precompute="True", ps=0.2)
learn.lr_find()
But it gave me the following error:
~/.conda/envs/fastai/lib/python3.6/site-packages/fastai/transforms.py in compose(im, y, fns)
def compose(im, y, fns):
for fn in fns:
--> 446 im, y =fn(im, y)
return im if y is None else (im, y)
when I call
learn.fit(1e-2, 2, cycle_len=1)
Any ideas? (I am currently working on the kaggle IEEE competition where the deadline is tomorrow )