使用google_mlkit_object_detection包的flutter应用程序的Tflite自定义对象检测模型

68bkxrlz  于 2023-05-19  发布在  Flutter
关注(0)|答案(2)|浏览(158)

我正在尝试创建一个tflite格式的自定义对象检测模型,以便我可以在flutter应用程序中使用google_mlkit_object_detection包。
前几个模型,我使用yolov8创建并转换为tflite。注解是用roboflow进行的,我使用的google colab notebook是由他们提供的,转换后的tflite模型的元数据看起来如下图所示

在这个模型上我得到了一个错误

输入Tensor的类型为kTfLiteFloat32:需要指定NormalizationOptions元数据来预处理输入图像。

因此,正如建议的那样,我试图更改元数据并添加normalizationOptions,但没有成功。我的第二个选择是使用官方的TensorFlow google colab笔记本TensorFlow Lite Model Maker训练一个模型,它生成了一个包含以下元数据的模型

对于该模型,误差为

输出索引1的维度数意外:获得3D,预期为2D(BxN,B=1)或4D

因此,我检查了我正在使用的包“google_mlkit_object_detection”中的示例应用程序的模型,元数据如下所示

所以我的问题是,我如何改变我已经训练过的模型,无论是输入还是输出,我必须改变模型的架构还是只改变元数据?第二个是用tensorflow 的官方笔记本训练的,似乎我所要做的就是包含正确的形状格式[1,N],但我可能需要再次改变架构。

wixjitnu

wixjitnu1#

元数据只是用来提供模型的信息。除了添加元数据之外,您还需要确保您的模型真正满足需求。
关于如何获得这样一个模型的更多细节可以在这里找到:https://developers.google.com/ml-kit/custom-models
ML Kit对象检测自定义模型是一个分类器模型。

t5fffqht

t5fffqht2#

Google文档中的自定义模型页面是这样说的:
注:ML Kit仅支持自定义图像分类模型。虽然AutoML Vision允许训练对象检测模型,但这些模型不能与ML Kit一起使用。
因此,您可以使用自定义对象检测模型,但前提是它们是图像分类模型。我认为这一定是不可能的,对象检测模型输出边界框,而分类模型输出类分数。然而,我尝试使用YOLOv8模型,标准的对象检测模型无法工作,但具有[1,1000]输出形状的classification模型实际上适用于Google MLKit示例应用程序,您可以从中提取边界框。
我不是100%确定这是如何工作的,但我怀疑的是,包中捆绑了一个默认的对象检测器,它可以识别可能存在对象的位置,然后您只能在它的基础上修改分类模型。
简单的答案是:使用具有[1,N]或[1,1,1,N]输出的分类模型,其中N是类的数量。如果您有一个不同架构的模型,那么您应该将输出更改为这种格式,否则它不应该工作。

相关问题