yolov8转tflite

我在源码上想把yolov8转为tflite,但是报错了,有没有知道解决方法
simplifier failure: [ShapeInferenceError] (op_type:Gather, node name: /model.2/Gather): [TypeInferenceError] Inferred elem type differs from existing elem type: (FLOAT) vs (INT64)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【Tflite模型】yolov5 tflite模型推理
  • 除此之外, 这篇博客: tensorflow-yolov4实施方法中的 yolov4 tflite 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    python detect.py
    –weights ./data/yolov4-int8.tflite --framework tflite --size 416 --image
    ./data/kite.jpg

    在这里插入图片描述

    Convert to tflite


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下回答参考GPT并且由Bony-整理:
这个错误通常是因为输入输出张量的数据类型不一致导致的。您可以尝试通过检查模型中输入和输出张量的数据类型来解决这个问题。

对于转换为tflite的过程,建议按照以下步骤操作:

  1. 确定您要转换的模型是否支持tflite格式。某些操作和功能可能在tflite中不受支持,因此请先检查您的模型是否可以转换。

  2. 使用TensorFlow的Converter API将模型从keras或saved model格式转换为tflite格式。您可以参考以下代码示例:

     converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
     tflite_model = converter.convert()
    
  3. 如果您在第二步中遇到了错误,请查看错误信息以确定问题所在。您可以尝试指定输入输出张量的数据类型,并使用选项experimental_new_converter=True以获得更好的兼容性。

     converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
     converter.experimental_new_converter = True
     converter.optimizations = [tf.lite.Optimize.DEFAULT]
     input_shape = [1, 224, 224, 3]
     converter.allow_custom_ops = True
     converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
                                         tf.lite.OpsSet.SELECT_TF_OPS]
     converter.inference_input_type = tf.float32
     converter.inference_output_type = tf.float32
     converter.inference_input_type = tf.int32
     tflite_model = converter.convert()
    
  4. 如果仍然遇到问题,请尝试检查您的模型代码,确保其没有使用tflite不支持的操作或功能。