将 Mobilenet tflite 模型与 MediaPipe 结合使用

问题描述 投票:0回答:1

我正在使用下面的代码进行 MediaPipe 图像分类。当我使用标准模型 effectivenet_lite0.tflite 时它可以工作:

            val baseOptions2 = BaseOptions.builder()
                .setDelegate(Delegate.CPU)
            //    .setModelAssetPath("assets\\efficientnet_lite0.tflite")
                .setModelAssetPath("assets\\mobilenet_v1_1.0_224.tflite")
                .build()
            val options2 = ImageClassifierOptions.builder()
                .setBaseOptions(baseOptions2)
                .setScoreThreshold(0.5f)
                .setRunningMode(RunningMode.IMAGE)
                .setMaxResults(5)
                .build()
            var imageClassifier = ImageClassifier.createFromOptions(mContext, options2)

                   // Run Classifier
                   val classifierResult: ImageClassifierResult? =
                   imageClassifier.classify(mpImage2)
                   if (classifierResult!!.classificationResult().classifications().size > 0) {

我想使用dogs.tflite,这是我基于mobilenet_v1_1.0_224.tflite制作的狗品种模型。但是当我尝试使用它时,我收到以下错误消息:

E/native  (25421): E20240116 21:24:13.382606 25421 graph.cc:472] Input tensor has type float32: it requires specifying NormalizationOptions metadata to preprocess input images.
D/AndroidRuntime(25421): Shutting down VM
E/AndroidRuntime(25421): FATAL EXCEPTION: main

我能做什么(如果有的话)?我已经阅读了图像分类模型定制指南,但这意味着很多很多个小时的工作——我在制作 dogs.tflite 模型时已经完成的工作。我可以将“NormalizationOptions 元数据”(无论是什么)添加到 dogs.tflite 中吗?怎么办?

编辑:它也适用于 Kaggle 的 mobilenet_v1_1.0_224-metadata.tflite。我可以以某种方式从该模型获取元数据并将其放入我的 dogs.tflite 中吗?和/或使用与 dogs.tflite 一起使用的dog_labels.txt 文件?

android tensorflow-lite mediapipe image-classification
1个回答
0
投票

在花费了很多时间并学习了很多之后,这是我发现的:

  1. 我首先使用图像分类模型定制指南来构建一个新模型,使用与我的 dogs.tflite 相同的图像。它有效,但创建的模型并不好。准确性非常差。新模型的 NormalizationOptions 元数据没有问题,但数据不正确!请参阅 GitHub 上的this问题。浪费了这么多时间!

  2. 我终于找到了这个元数据编写器教程。我在 Google Colab 中运行它,并且可以非常轻松地将正确的元数据添加到我的 dogs.tflite 中。现在完美了!

© www.soinside.com 2019 - 2024. All rights reserved.