apple / coremltools

Core ML tools contain supporting tools for Core ML model conversion, editing, and validation.
https://coremltools.readme.io
BSD 3-Clause "New" or "Revised" License
4.33k stars 627 forks source link

torch.nn.ConvTranspose1d Conversion failed #1946

Open cvv-student opened 1 year ago

cvv-student commented 1 year ago

🐞Describing the bug

Conversion for torch.nn.ConvTranspose1d failed

Stack Trace

Traceback (most recent call last):
  File "/Users/cvv/Downloads/Pycharm_project/StyleTTS/edge/coreml_test.py", line 9, in <module>
    mlprogram = ct.convert(
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/_converters_entry.py", line 530, in convert
    mlmodel = mil_convert(
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 188, in mil_convert
    return _mil_convert(model, convert_from, convert_to, ConverterRegistry, MLModel, compute_units, **kwargs)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 212, in _mil_convert
    proto, mil_program = mil_convert_to_proto(
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 286, in mil_convert_to_proto
    prog = frontend_converter(model, **kwargs)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/converter.py", line 108, in __call__
    return load(*args, **kwargs)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 63, in load
    return _perform_torch_convert(converter, debug)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/load.py", line 102, in _perform_torch_convert
    prog = converter.convert()
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/converter.py", line 439, in convert
    convert_nodes(self.context, self.graph)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/ops.py", line 92, in convert_nodes
    add_op(context, node)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/frontend/torch/ops.py", line 943, in _convolution
    conv = mb.slice_by_index(
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/mil/ops/registry.py", line 183, in add_op
    return cls._add_op(op_cls_to_add, **kwargs)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/mil/builder.py", line 182, in _add_op
    new_op.type_value_inference()
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/mil/operation.py", line 253, in type_value_inference
    output_types = self.type_inference()
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/mil/ops/defs/iOS15/tensor_transformation.py", line 531, in type_inference
    ret_shape = solve_slice_by_index_shape(x_shape, begin, end, stride, begin_mask, end_mask, squeeze_mask)
  File "/Users/cvv/opt/anaconda3/envs/diffusion/lib/python3.8/site-packages/coremltools/converters/mil/mil/ops/defs/_utils.py", line 473, in solve_slice_by_index_shape
    raise ValueError(
ValueError: slice_by_index op: unsupported values in for dimension 2, (begin, end, stride) : (1, 0, 1)

To Reproduce

import torch
import torch.nn as nn
import coremltools as ct

pool = nn.ConvTranspose1d(512, 512, kernel_size=3, stride=2, groups=512, padding=1, output_padding=1).eval()
input = torch.rand((1, 512, 528))
jit_model = torch.jit.trace(pool, (input))
torch.onnx.export(pool, (input), 'pool.onnx')
mlprogram = ct.convert(
    jit_model,
    inputs=[ct.TensorType(name='input', shape=input.shape),
            ],
    outputs=[ct.TensorType(name="output"),
             # ct.TensorType(name="output_style"),
             ],
    source="pytorch",
    convert_to="mlprogram",
    compute_precision=ct.precision.FLOAT16,
)
mlprogram.save("test.mlpackage")

model conversion failed.

System environment (please complete the following information):

coremltools version: 7.0b1 OS: MacOS Ventura 13.1 (22C65) torch: 1.12.1

yagafonov commented 4 months ago

@TobyRoseman @cvv-student Any news on this issue?