PavlosMelissinos / enet-keras

A keras implementation of ENet (abandoned for the foreseeable future)
MIT License
115 stars 46 forks source link

UpSampling vs MaxUnpooling #18

Open jaxony opened 6 years ago

jaxony commented 6 years ago

Thanks for your work on getting ENet in Keras! Have you found any increases in accuracy from using MaxUnpooling instead of just naive UpSampling?

PavlosMelissinos commented 6 years ago

Hey, thanks for the interest!

I haven't seen any noticeable improvements to be honest but I haven't run any thorough tests so I've been getting weird results with my implementation anyway.

PavlosMelissinos commented 6 years ago

Minor update on this question:

I've compared the qualitative results of the two networks and it seems like MaxUnpooling gives slightly smoother segments with fewer holes.

You can reproduce this by running the code using overfit mode python run.py --mode overfit, using 200 epochs on 4 or 8 samples. In order to do that you have to change these lines to

data['sample_size'] = 8
experiment['epochs'] = 200

and add a random seed here to ensure that the samples will be the same in the two experiments. So change it to something like:

image_ids = self._coco.getImgIds()
np.random.seed(1024)
self._image_ids = np.random.choice(image_ids, size=min(len(image_ids), self._sample_size), replace=False)

After you run it, for each sample you'll get a plot with the original image, the detections and the ground truth, which should help you visualize the results.

EDIT: The next version of master will plot a binary mask for each object instead of a single mask for the whole image.