LikeLy-Journey/SegmenTron

Bug in tool/demo.py

yangweixiang opened this issue · 3 comments

I train segmentation mode (deeplabV3+MobileNetV2) on my own dataset, demo.py can run , but the result was wrong. all of the catergory is 0(backgourd).

https://github.com/LikeLy-Journey/SegmenTron/blob/master/tools/demo.py

backbone: Inception is ok
backbone: MobileNet is not ok .

but if I add below source code in demo.py , it will be work.

if hasattr(self.model, 'encoder') and hasattr(self.model.encoder, 'named_modules') and \

        cfg.MODEL.BN_EPS_FOR_ENCODER:

        logging.info('set bn custom eps for bn in encoder: {}'.format(cfg.MODEL.BN_EPS_FOR_ENCODER))

        self.set_batch_norm_attr(self.model.encoder.named_modules(), 'eps', cfg.MODEL.BN_EPS_FOR_ENCODER)

It will change EPS , not use the default.

And I found in https://github.com/LikeLy-Journey/SegmenTron/blob/master/segmentron/solver/optimizer.py

def _get_paramters(model):

params_list = list()

if hasattr(model, 'encoder') and model.encoder is not None and hasattr(model, 'decoder'):

    params_list.append({'params': model.encoder.parameters(), 'lr': cfg.SOLVER.LR})

    if cfg.MODEL.BN_EPS_FOR_ENCODER:

        logging.info('Set bn custom eps for bn in encoder: {}'.format(cfg.MODEL.BN_EPS_FOR_ENCODER))

        _set_batch_norm_attr(model.encoder.named_modules(), 'eps', cfg.MODEL.BN_EPS_FOR_ENCODER)

I am confused about this change of EPS.

would you please explain the reason of change BN EPS ?

some issues with you, and cost me almost one day to solve the problem. Seems we set use the constant BN EPS.

self.set_batch_norm_attr(self.model.encoder.named_modules(), 'eps', cfg.MODEL.BN_EPS_FOR_ENCODER)

NameError: name 'self' is not defined in demo.py

I had the same problem. I used multi-gpu for distributed training on the server. Now I'm testing on single-gpu PC. The result is all zero. I followed your method but the result is still zero. How did you solve it, can you solve it in detail?