Repository navigation
2.4.3
2.4.3
Summary
- stop re-transposing
CONV_3Dfilters in the SavedModel exporter; flatbuffer-direct ModelIR already stores them as[d, h, w, in, out], which matchestf.nn.conv3d - stop re-transposing
CONV_3D_TRANSPOSEfilters for the same reason; ModelIR stores[d, h, w, out, in], matchingtf.nn.conv3d_transpose - add SavedModel regression coverage for both 3D convolution kernels using TFLite/TF filter layouts
- Tile.py line 122. When the multiples input is a numpy array, the code does range(len(input_tensor_2.shape)) instead of range(len(input_tensor_2)). For a 1-D multiples array like [4, 1, 1], .shape is (3,) so len(.shape) is 1 instead of 3. This produces a broken initial permutation and the conversion produces wrong outputs.
- Slice.py, two separate lines. tf.clip_by_value(t=begin_, clip_value_min=0, clip_value_max=1) and the same for end_ crash because begin_ and end_ are int64 but the integer scalar bounds resolve to int32. Fix is to cast: tf.cast(begin_, tf.int32) and tf.cast(end_, tf.int32).
- LayerNormalization.py. RF-DETR's DINOv2 backbone uses windowed attention which produces a normalisation axis that is not statically known at graph build time. tf_keras.layers.LayerNormalization(axis=axis)(input_tensor) throws TypeError or ValueError when axis is dynamic. Fix is a try/except that falls back to tf.nn.moments for those cases.
Validation
.venv/bin/python -m py_compile onnx2tf/tflite_builder/saved_model_exporter.py tests/test_tflite2sm_phase1.py- direct exporter smoke for
CONV_3DandCONV_3D_TRANSPOSESavedModel export/load/inference, both matching TensorFlow native outputs withnp.testing.assert_allclose(..., rtol=1e-5, atol=1e-5)
Issues
What's Changed
- Bug fixes for RF-DETR TFLite export by @EHxuban11 in #937
- Fix SavedModel Conv3D filter layouts by @aaronday-dev in #938
New Contributors
- @EHxuban11 made their first contribution in #937
Full Changelog: 2.4.2...2.4.3