Skip to content

Data-Augmentation layers can't be exported to ONNX #21346

Open
@lambda-science

Description

@lambda-science

Hi,

model.export(os.path.join(MODEL_PATH, "model.onnx"), format="onnx", input_signature=[keras.InputSpec(shape=(None, 256, 256, 3), dtype="float32")])

Export a model to ONNX format but with a lot of error and warnings. Such as:

ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_brightness_1_1/stateless_random_uniform/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_contrast_1_1/stateless_random_uniform/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_flip_1_1/stateless_random_uniform/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_rotation_1_1/stateless_random_uniform/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_rotation_1_1/ImageProjectiveTransformV3: ImageProjectiveTransformV3] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_zoom_1_1/stateless_random_uniform_1/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_zoom_1_1/stateless_random_uniform/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_zoom_1_1/ImageProjectiveTransformV3: ImageProjectiveTransformV3] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_translation_1_1/stateless_random_uniform_1/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_translation_1_1/stateless_random_uniform/StatelessRandomUniformV2: StatelessRandomUniformV2] is not supported
ERROR:tf2onnx.tfonnx:Tensorflow op [sequential_2_1/sequential_1_1/random_translation_1_1/ImageProjectiveTransformV3: ImageProjectiveTransformV3] is not supported
ERROR:tf2onnx.tfonnx:Unsupported ops: Counter({'StatelessRandomUniformV2': 8, 'ImageProjectiveTransformV3': 3})

And then when I try to import it in ONNX runtime I get the following erros:

InvalidGraph: [ONNXRuntimeError] : 10 : INVALID_GRAPH : Load model from model.onnx failed:This is an invalid model. In Node, 
("sequential_2_1/sequential_1_1/random_brightness_1_1/stateless_random_uniform/StatelessRandomUniformV2", StatelessRandomUniformV2, "", -1) : 
("sequential_2_1/sequential_1_1/random_brightness_1_1/stateless_random_uniform/shape_Concat__88:0": tensor(int32),"ConstantFolding/sequential_2_1/sequential_1_1/random_brightness_1_1/stateless_random_uniform/StatelessRandomGetKeyCounter-folded-0:0": 
tensor(uint64),"ConstantFolding/sequential_2_1/sequential_1_1/random_brightness_1_1/stateless_random_uniform/StatelessRandomGetKeyCounter-folded-1:0": 
tensor(uint64),"sequential_2_1/sequential_1_1/random_translation_1_1/stateless_random_uniform_1/StatelessRandomUniformV2/alg:0": tensor(int32),) -> 
("sequential_2_1/sequential_1_1/random_brightness_1_1/stateless_random_uniform/StatelessRandomUniformV2:0",) , Error No Op registered for StatelessRandomUniformV2 with domain_version of 15

My model code is something like

data_augmentation = keras.Sequential([
    keras.layers.RandomBrightness(factor=0.2, input_shape=(None, None, 3)),
    keras.layers.RandomContrast(factor=0.2),
    keras.layers.RandomFlip("horizontal_and_vertical"),
    keras.layers.RandomRotation(0.3, fill_mode="constant"),
    keras.layers.RandomZoom(.2, .2, fill_mode="constant"),
    keras.layers.RandomTranslation(0.2, .2, fill_mode="constant"),
    keras.layers.Resizing(256, 256, interpolation="bilinear", crop_to_aspect_ratio=True),
    keras.layers.Rescaling(scale=1. / 127.5, offset=-1),  # For [-1, 1] scaling
])

# My ResNet50V2
model = keras.models.Sequential()
model.add(data_augmentation)
model.add(
    ResNet50V2(
        include_top=False,
        input_shape=(256, 256, 3),
        pooling="avg",
    )
)
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(len(config.SUB_FOLDERS), activation='softmax'))

model.summary()

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=config.MAX_LR),
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=False),
    metrics=[config.METRIC]
)

My environement informations:

  • MacOS
[[package]]
name = "tensorflow"
version = "2.19.0"
[[package]]
name = "tensorflow-metal"
version = "1.2.0"
[[package]]
name = "keras"
version = "3.10.0"
[[package]]
name = "numpy"
version = "2.1.3"
[[package]]
name = "tf2onnx"
version = "1.16.1"
[[package]]
name = "onnx"
version = "1.17.0"

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions