我正在尝试使用一个自定义对象检测模型,该模型是用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
。因此,该应用程序不适用于我的自定义模型(我认为这是阻止我的自定义模式工作的唯一问题(。