Skip to content

How to save scripted models? #349

@maxfreu

Description

@maxfreu

Hi, I'm trying to script and save the models, but get different errors depending on arch and encoder. Example:

torch.jit.script(smp.Unet())

results in:

Click me
Traceback (most recent call last):
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3427, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-a16aa1320739>", line 1, in <module>
    scripted_model = torch.jit.script(smp.Unet())
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/__init__.py", line 1516, in script
    return torch.jit._recursive.create_script_module(obj, torch.jit._recursive.infer_methods_to_compile)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 318, in create_script_module
    return create_script_module_impl(nn_module, concrete_type, stubs_fn)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 372, in create_script_module_impl
    script_module = torch.jit.RecursiveScriptModule._construct(cpp_module, init_fn)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/__init__.py", line 1900, in _construct
    init_fn(script_module)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 353, in init_fn
    scripted = create_script_module_impl(orig_value, sub_concrete_type, infer_methods_to_compile)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 376, in create_script_module_impl
    create_methods_from_stubs(concrete_type, stubs)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 292, in create_methods_from_stubs
    concrete_type._create_methods(defs, rcbs, defaults)
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 602, in compile_unbound_method
    create_methods_from_stubs(concrete_type, (stub,))
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/torch/jit/_recursive.py", line 292, in create_methods_from_stubs
    concrete_type._create_methods(defs, rcbs, defaults)
RuntimeError: 
Class Identity does not have an __init__ function defined:
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/segmentation_models_pytorch/encoders/resnet.py", line 49
    def get_stages(self):
        return [
            nn.Identity(),
            ~~~~~~~~~~~ <--- HERE
            nn.Sequential(self.conv1, self.bn1, self.relu),
            nn.Sequential(self.maxpool, self.layer1),
'ResNetEncoder.get_stages' is being compiled since it was called from 'ResNetEncoder.forward'
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/segmentation_models_pytorch/encoders/resnet.py", line 58
    def forward(self, x):
        stages = self.get_stages()
        ~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE
        features = []

smp version 0.1.3
pytorch version 1.6.0

pytorch 1.7 fails like this:

Click me
RuntimeError: 
tuple slice indices must be integer constants:
  File "/home/max/programs/anaconda3/envs/dr/lib/python3.7/site-packages/segmentation_models_pytorch/encoders/_base.py", line 18
    def out_channels(self):
        """Return channels dimensions for each tensor of forward output of encoder"""
        return self._out_channels[: self._depth + 1]
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE

EDIT: Working with torch.jit.trace(...) works as a replacement to circumvent loading the code before loading the weights - therefore closing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions