YOLOv5-转换为tflite,但使分数类型为float32而不是int32



我正在尝试使用一个自定义对象检测模型,该模型是用YOLOv5训练的,转换为Android应用程序的tflite(使用这个确切的TensorFlow示例(。

该模型已通过使用YOLOv5转换器转换为tflite,如下所示:python export.py --weights newmodel.pt --include tflite --int8 --agnostic-nms这是将模型导出为tflite的export.py函数:`def export_tflite(keras_model,im,file,int8,data,nms,不可知论_nms,prefix=colorstr('SensorFlow Lite:'((:#YOLOv5 TensorFlow Lite导出将tensorflow导入为tf

LOGGER.info(f'n{prefix} starting export with tensorflow {tf.__version__}...')
batch_size, ch, *imgsz = list(im.shape)  # BCHW
f = str(file).replace('.pt', '-fp16.tflite')
converter = tf.lite.TFLiteConverter.from_keras_model(keras_model)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS]
converter.target_spec.supported_types = [tf.float16]
converter.optimizations = [tf.lite.Optimize.DEFAULT]
if int8:
from models.tf import representative_dataset_gen
dataset = LoadImages(check_dataset(check_yaml(data))['train'], img_size=imgsz, auto=False)
converter.representative_dataset = lambda: representative_dataset_gen(dataset, ncalib=100)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.target_spec.supported_types = []
converter.inference_input_type = tf.uint8  # or tf.int8
converter.inference_output_type = tf.uint8  # or tf.int8
converter.experimental_new_quantizer = True
f = str(file).replace('.pt', '-int8.tflite')
if nms or agnostic_nms:
converter.target_spec.supported_ops.append(tf.lite.OpsSet.SELECT_TF_OPS)
tflite_model = converter.convert()
open(f, "wb").write(tflite_model)
return f, None`

工作示例使用这些张量:工作示例模型的张量

我的张量是这样的:我的自定义模型的张量

问题是我不知道如何将输出张量的SCORE类型从int32转换为float32。因此,该应用程序不适用于我的自定义模型(我认为这是阻止我的自定义模式工作的唯一问题(。

YoloV5模型正在返回INT32格式的数据。但是TensorBuffer不支持数据类型:INT32。要在Android中使用On Device ML,请使用SSD型号。因为tflite库目前只支持SSD型号。

相关内容

  • 没有找到相关文章

最新更新