apple / apple/coremltools

ValueError: # of input channels is44 not divisible by groups 1

Open
#2,341 8 comments 0 reactions 0 assignees View on GitHub
bug PyTorch (traced)
Dominant language
Python
Stars
5.4k
Forks
850
Avg merge
4d 5h
Merged PRs (30d)
10

Description

## Description

`coremltools.convert` will unnecessarily raise an exception if `C_in` is a `Symbol` [here](https://github.com/apple/coremltools/blob/40f6705a6a4c5ef1a616f01b444f1d6e5a0c1f59/coremltools/converters/mil/mil/ops/defs/iOS15/conv.py#L163C11-L168).

## Stack Trace

```
Traceback (most recent call last):
File "/home/sniklaus/Downloads/bidir_conversion.py", line 436, in
objModel = coremltools.convert(
^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/_converters_entry.py", line 581, in convert
mlmodel = mil_convert(
^^^^^^^^^^^^
File "coremltools/converters/mil/converter.py", line 188, in mil_convert
return _mil_convert(model, convert_from, convert_to, ConverterRegistry, MLModel, compute_units, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/converter.py", line 212, in _mil_convert
proto, mil_program = mil_convert_to_proto(
^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/converter.py", line 288, in mil_convert_to_proto
prog = frontend_converter(model, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/converter.py", line 108, in __call__
return load(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/frontend/torch/load.py", line 82, in load
return _perform_torch_convert(converter, debug)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/frontend/torch/load.py", line 116, in _perform_torch_convert
prog = converter.convert()
^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/frontend/torch/converter.py", line 581, in convert
convert_nodes(self.context, self.graph)
File "coremltools/converters/mil/frontend/torch/ops.py", line 86, in convert_nodes
raise e # re-raise exception
^^^^^^^
File "coremltools/converters/mil/frontend/torch/ops.py", line 81, in convert_nodes
convert_single_node(context, node)
File "coremltools/converters/mil/frontend/torch/ops.py", line 134, in convert_single_node
add_op(context, node)
File "coremltools/converters/mil/frontend/torch/ops.py", line 1088, in _convolution
conv = mb.conv(**kwargs)
^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/mil/ops/registry.py", line 182, in add_op
return cls._add_op(op_cls_to_add, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/mil/builder.py", line 202, in _add_op
new_op.type_value_inference()
File "coremltools/converters/mil/mil/operation.py", line 258, in type_value_inference
output_types = self.type_inference()
^^^^^^^^^^^^^^^^^^^^^
File "coremltools/converters/mil/mil/ops/defs/iOS15/conv.py", line 165, in type_inference
raise ValueError(msg.format(C_in, groups))
ValueError: # of input channels is44 not divisible by groups 1
```

## To Reproduce

I am afraid that I can't share the model details here since it is proprietary, my apologies.

## System
- coremltools version: `7.2`
- OS (e.g. MacOS version or Linux type): Debian 13
- PyTorch version: `2.1.2`

Contributor guide

Open the contributing guide

Research direction

Start in coremltools/converters/mil/mil/ops/defs/iOS15/conv.py at lines 163-168, then trace the PyTorch conversion path through frontend/torch/ops.py. Investigate why a symbolic C_in produces the divisibility error; done means conversion no longer raises this erroneous ValueError for symbolic input channels, though the proprietary model cannot be reproduced from the report.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, pytorch
Domain
machine-learning
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.