Keras Conv1D dilation with flexible input fails to convert
- Dominant language
- Python
- Stars
- 5.4k
- Forks
- 850
- Avg merge
- 4d 5h
- Merged PRs (30d)
- 10
Description
## πDescribing the bug
- Trying to export a model with flexible sequence length using Conv1D with dilation rate > 1 fails to export.
I really need a work around for this!!!!!!
## Stack Trace
- If applicable, please paste the complete stack trace.
```
File "/opt/homebrew/lib/python3.10/site-packages/coremltools/converters/mil/frontend/tensorflow/convert_utils.py", line 191, in convert_graph
add_op(context, node)
File "/opt/homebrew/lib/python3.10/site-packages/coremltools/converters/mil/frontend/tensorflow/ops.py", line 2119, in SpaceToBatchND
raise NotImplementedError(
NotImplementedError: Not support dynamic block_shape and paddings for SpaceToBatchND!
```
## To Reproduce
- Please add a minimal code example that can reproduce the error when running it.
```
from keras.models import Model
import tensorflow as tf
import numpy as np
import coremltools as ct
def build_model(filters = 192, kernel_size = 3, dilation_rate = 1, use_bias = True):
input = tf.keras.layers.Input(shape=(None, 80))
x = tf.keras.layers.Conv1D(
filters=filters,
kernel_size=kernel_size,
dilation_rate=dilation_rate,
use_bias=use_bias,
)(input)
return Model([input], [x])
if __name__ == "__main__":
x = np.zeros((1, 16384, 80))
m_1 = build_model()
print(m_1.summary())
p = m_1.predict(x)
print(p.shape)
model = ct.convert(m_1,
source='tensorflow',
convert_to='mlprogram',
compute_precision=ct.precision.FLOAT16,
minimum_deployment_target=ct.target.iOS16
)
#Crashes
m_2 = build_model(dilation_rate=3)
print(m_1.summary())
p = m_2.predict(x)
print(p.shape)
x_flex = ct.TensorType(shape=ct.Shape(shape=(1, ct.RangeDim(64, 16384), 80)), dtype=np.float32)
model = ct.convert(m_2,
source='tensorflow',
convert_to='mlprogram',
compute_precision=ct.precision.FLOAT16,
minimum_deployment_target=ct.target.iOS16,
inputs=[x_flex]
)
```
```
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, None, 80)] 0
conv1d (Conv1D) (None, None, 192) 46272
=================================================================
Total params: 46,272
Trainable params: 46,272
Non-trainable params: 0
_________________________________________________________________
None
1/1 [==============================] - 0s 30ms/step
(1, 16382, 192)
Running TensorFlow Graph Passes: 100%|βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ| 6/6 [00:00<00:00, 124.12 passes/s]
Converting TF Frontend ==> MIL Ops: 100%|ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ| 7/7 [00:00<00:00, 4813.92 ops/s]
Running MIL frontend_tensorflow2 pipeline: 100%|βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ| 7/7 [00:00<00:00, 31134.81 passes/s]
Running MIL default pipeline: 100%|βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ| 57/57 [00:00<00:00, 4407.65 passes/s]
Running MIL backend_mlprogram pipeline: 100%|ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ| 10/10 [00:00<00:00, 34211.29 passes/s]
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, None, 80)] 0
conv1d (Conv1D) (None, None, 192) 46272
=================================================================
Total params: 46,272
Trainable params: 46,272
Non-trainable params: 0
_________________________________________________________________
None
1/1 [==============================] - 0s 22ms/step
(1, 16378, 192)
Running TensorFlow Graph Passes: 100%|βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ| 6/6 [00:00<00:00, 145.50 passes/s]
Converting TF Frontend ==> MIL Ops: 84%|ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | 32/38 [00:00<00:00, 9824.88 ops/s]
Traceback (most recent call last):
```
## System environment (please complete the following information):
- coremltools version: 6.3
- OS (e.g. MacOS version or Linux type): MacOS 13.2.1
- Any other relevant version information (e.g. PyTorch or TensorFlow version): Tensorflow 2.12.0
Contributor guide
Research direction
Reproduce the failure with the provided Keras Conv1D model and flexible input using ct.convert. Start in coremltools/converters/mil/frontend/tensorflow/ops.py at SpaceToBatchND and inspect the call path through convert_utils.py. Done means the dilation_rate=3 model converts successfully with the specified flexible sequence range and the existing conversion behavior remains covered by tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, tensorflow
- Domain
- machine-learning
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100