U-2-Net icon indicating copy to clipboard operation
U-2-Net copied to clipboard

Convert U2netp.pth to U2netp.mlmodel

Open mgstar1021 opened this issue 3 years ago • 0 comments

Hello Everyone, I am using u2netp.pth for my iOS app and converted to mlmodel. It works as we'll but I need to support arbitrary image input, in other words, any random size image should be inputed and output based on input size. It works as well for square size. but landscape, portrait size doesn't work.

Coremltools provide flexible input size feature to support arbitrary size problem but it doesn't work, just make errors.

I listed code here. net = U2NETP(3,1) net.load_state_dict(torch.load('u2netp.pth', map_location='cpu')) net.cpu() net.eval()

# Create a test input.
example_input = torch.rand(1, 3, default_size, default_size) * 255
input_shape = ct.Shape(shape=(1, 3, ct.RangeDim(1, 320, default=320), ct.RangeDim(1, 320, default=320)))

# Trace and convert the model.
traced_model = torch.jit.trace(net, example_input)
model = ct.convert(traced_model,
                   inputs=[ct.ImageType(
                                        name="input_1",
                                        shape= input_shape,
                                        scale=1 / 255.0 / 0.226,
                                        bias = (-0.485 / 0.229, -0.456 / 0.224, -0.406 / 0.225),
                                        channel_first = True
                                        )]))

Environment: Python 3.8 Coremltools: 4.1, 5.0 torch: 1.9.0 MacOS: 12.5.1

Error Traceback (most recent call last): File "/Volumes/DATA/ConversionToCoreML/main.py", line 112, in convert() File "/Volumes/DATA/ConversionToCoreML/main.py", line 28, in convert model = ct.convert(traced_model, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/_converters_entry.py", line 306, in convert mlmodel = mil_convert( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 175, in mil_convert return _mil_convert(model, convert_from, convert_to, ConverterRegistry, MLModel, compute_units, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 202, in _mil_convert proto, mil_program = mil_convert_to_proto( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 293, in mil_convert_to_proto prog = frontend_converter(model, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 103, in call return load(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 82, in load raise e File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 72, in load prog = converter.convert() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 250, in convert self.torch_passes(prog) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/ssa_passes/torch_passes.py", line 24, in torch_passes PASS_REGISTRYp File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/ssa_passes/torch_upsample_to_core_upsample.py", line 23, in torch_upsample_to_core_upsample torch_upsample_to_core_upsample_block(f) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/ssa_passes/torch_upsample_to_core_upsample.py", line 35, in torch_upsample_to_core_upsample_block raise ValueError("Unable to map {} to core upsample".format(op.op_type)) ValueError: Unable to map torch_upsample_bilinear to core upsample

What I need to know, is it possible to support flexible input image type for U2Net when convert cormel model?

Thanks.

mgstar1021 avatar Oct 21 '21 08:10 mgstar1021