TensorFlow Lite对象检测iOS不适用于定制训练的模型

时间:2019-09-30 15:56:27

标签: python ios swift tensorflow tensorflow-lite

我已经训练了 ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03 对象检测模型。一切顺利。我也将其转换为.tflite文件,并将其命名为 detectx.tflite

我下载了official ObjectDetection Example App,它在包含.tflite模型的情况下可以顺利运行。

我将ModelDataHandler.swift中的代码更改为以下内容:

enum MobileNetSSD {
  static let modelInfo: FileInfo = (name: "detectx", extension: "tflite")
  static let labelsInfo: FileInfo = (name: "labelmap", extension: "txt")
}

当然可以将我的detectx.tflite移到Model文件夹中,以便对其进行定位。

但是,当我尝试运行该应用程序时,它崩溃并出现以下错误:

Failed to load the model file with name: detectx (lldb)

这是将训练有素的模型导出到 tflite_graph.pb 的方式:

python export_tflite_ssd_graph.py \
    --pipeline_config_path training/ssd_mobilenet_v2_quantized_300x300_coco.config \
    --trained_checkpoint_prefix training/model.ckpt-145 \
    --output_directory inference_graph_TFLITE_COBA

这就是我将其转换为.tflite的方式:

tflite_convert --graph_def_file=inference_graph_TFLITE_COBA/tflite_graph.pb --output_file=detectx.tflite 
--input_shapes=1,300,300,3 --input_arrays=normalized_input_image_tensor 
--output_arrays=TFLite_Detection_PostProcess,TFLite_Detection_PostProcess:1,TFLite_Detection_Post
Process:2,TFLite_Detection_PostProcess:3 --allow_custom_ops

这成功生成了我在此处写的 detectx.tflite

我不明白为什么这行不通。我尝试了许多不同的ssd移动网络模型,并且产生了相同的错误。有人可以帮我吗?我很困惑。

非常感谢。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在您使用的示例项目上,我也遇到了来自Xcode的相同错误消息Failed to load the model file with name: detectx (lldb)

在Xcode上进行调试后,我意识到该模型根本没有加载到项目文件中,并且能够通过在Xcode上执行以下步骤来解决该问题:

  1. 点击您的项目
  2. 点击目标
  3. 选择构建阶段
  4. 扩展副本捆绑资源
  5. 点击“ +”并选择您的模型文件