xingyizhou / pytorch-pose-hg-3d

PyTorch implementation for 3D human pose estimation
GNU General Public License v3.0
613 stars 143 forks source link

Demo error - 'BatchNorm2d' object has no attribute 'track_running_stats' #36

Closed tobiascz closed 5 years ago

tobiascz commented 5 years ago

Hi,

I'am using torch version 0.5 and i get that error in that line

output = model(input_var)

The error message looks like that:

  File "src/demo.py", line 26, in main
    output = model(input_var)
  File "/home/narvis/miniconda3/envs/hpe/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/narvis/Dev/pytorch-pose-hg-3d/src/models/hg_3d.py", line 101, in forward
    x = self.bn1(x)
  File "/home/narvis/miniconda3/envs/hpe/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/narvis/miniconda3/envs/hpe/lib/python3.6/site-packages/torch/nn/modules/batchnorm.py", line 66, in forward
    self.training or not self.track_running_stats,
  File "/home/narvis/miniconda3/envs/hpe/lib/python3.6/site-packages/torch/nn/modules/module.py", line 518, in __getattr__
    type(self).__name__, name))
AttributeError: 'BatchNorm2d' object has no attribute 'track_running_stats'

I found that other repositories have similar issues when upgrading from torch 0.3 to 0.4: https://github.com/kunglab/ddnn/issues/2

And I checked the specific commit to find out how to solve this errorr: https://github.com/kunglab/ddnn/commit/071c82fbff0ae86ff1da934ff725c0004c2ccc7d

But I couldn't find the right solution yet.

I would like to use the most recent torch version so downgrading is not really an option for me.

tobiascz commented 5 years ago

In the mean time i started training the model myself on the dataset with python3 and pytorch 0.5. I can load the model and do the forward pass without getting the track_running_stats missing error.

llcshappy commented 5 years ago

"train_params = [x for x in model.parameters() if x.requires_grad] "
It works.

jixinhe111 commented 5 years ago

In the mean time i started training the model myself on the dataset with python3 and pytorch 0.5. I can load the model and do the forward pass without getting the track_running_stats missing error.

Hi, I'am using torch version 0.4 and i get that error, can you tell how to solve this problem,thanks.

tobiascz commented 5 years ago

The Problem is that higher torch versions use the attribute track_running_stats. But track_runninh_stats is a new attribute and by the time this model was trained it was not available. So you try loading a model without this Attribute with a pytorch version that needs that attribute. I couldn’t find a way to add this attribute to the already trained model that is why I trained my own model with a higher pytorch version so that the model includes the attribute. Hope I could help

zkyf commented 5 years ago

pytorch 0.3.1 works well on my computer. My configuration is Ubuntu 16.04, cuda 9.0, pytroch 0.3.1, python 2.7.15.

aseerkhan commented 5 years ago

I am facing the same problem ...is any can help me

zkyf commented 5 years ago

I believe you need to manually download an older version of pytorch like 0.3.0 or 0.3.1

xingyizhou commented 5 years ago

Hi, The current version should work on python3 and pytorch 0.4+

heroinlin commented 5 years ago

Your model train by pytorch0.3.x, but run in pytorch > 0.4.0. Change the parameter of BatchNorm2d by yourself. For example, define the function

def recursion_change_bn(module):
    if isinstance(module, torch.nn.BatchNorm2d):
        module.track_running_stats = 1
    else:
        for i, (name, module1) in enumerate(module._modules.items()):
            module1 = recursion_change_bn(module1)
    return module

and use it when you load model

check_point = torch.load(check_point_file_path)
model = check_point['net']
for i, (name, module) in enumerate(model._modules.items()):
    module = recursion_change_bn(model)
model.eval()

I have ran 0.3.1 model in pytorch0.4.1 and pytorch1.0.0. you can use this way to update you model from 0.3.x to 0.4+

chandiniRNair commented 5 years ago

@heroinlin : I added the above code and a new error creeped in: File "/home/chandini/.local/lib/python3.6/site-packages/torch/nn/modules/module.py", line 535, in getattr type(self).name, name)) AttributeError: 'Upsample' object has no attribute 'name'

I couldn't find any leads on this in google search. Any suggestions please ?

wuzb19951013 commented 5 years ago

@chanduKichu I have met the same problem. Did you solve it?

gauharbains commented 3 years ago

@chandiniRNair @wuzb19951013 I have the same error. Were you able to figure it out ?

tianlinxu312 commented 2 years ago

A working solution is to load the state_dict of the model with argument "strict=False".

Example code as below:

ckpt = torch.load(model_path) model = Model(model_args) model.load_state_dict(ckpt.state_dict(), strict=False) model.eval()

yyunhh commented 2 years ago

I got the error:

AttributeError: 'Upsample' object has no attribute 'align_corners'

There is no answer to my error on google. But I try to modify the lib\site-packages\torch\nn\modules\upsampling.py", line 141:

def forward(self, input: Tensor) -> Tensor:
        return F.interpolate(input, self.size, self.scale_factor, self.mode)#self.align_corners

It works... Hope it helps someone encounter the same error, but please correct me if I am doing the wrong way out.