LikeLy-Journey / SegmenTron

Support PointRend, Fast_SCNN, HRNet, Deeplabv3_plus(xception, resnet, mobilenet), ContextNet, FPENet, DABNet, EdaNet, ENet, Espnetv2, RefineNet, UNet, DANet, HRNet, DFANet, HardNet, LedNet, OCNet, EncNet, DuNet, CGNet, CCNet, BiSeNet, PSPNet, ICNet, FCN, deeplab)
Apache License 2.0
705 stars 162 forks source link

Bug in tool/demo.py #61

Open yangweixiang opened 4 years ago

yangweixiang commented 4 years ago

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 ?

hzhang33BEI commented 4 years ago

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

dreamlychina commented 3 years ago

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

xhangHU commented 1 year ago

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?