改进预训练的张量流对象检测模型

时间:2020-04-19 13:18:15

标签: python tensorflow object-detection object-detection-api

我想使用张量流来检测嵌入式系统中的汽车,所以我尝试了 ssd_mobilenet_v2 ,实际上它对我来说非常不错,除了一些不太常见的特定汽车类型外,我认为这就是模型无法识别它们的原因。我有这些情况的数据集,我想通过微调来改进模型。我还要注意,我需要一个 .tflite 文件,因为我在python中使用了 tflite_runtime 。 我按照https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10的说明进行操作,可以训练模型并达到合理的损失值。然后,我在对象检测API中使用了 export_tflite_ssd_graph.py ,可以从训练有素的模型构建inference_graph。之后,我使用 toco 工具从中构建了一个.tflite文件。

但这是问题,在我完成所有这些操作之后;不仅模型没有改进,而且现在也没有发现任何汽车。我感到困惑,不知道问题出在哪里,我进行了很多搜索,却没有找到有关做我需要做的事情的教程。他们只是将一个新对象添加到模型中,然后将其导出,我尝试了一下,并成功完成了该任务。我还尝试在不训练模型的情况下直接从Tensorflow detection model zoo构建.tflite文件,并且效果很好。因此,我认为问题与培训过程有关。也许我在那里丢失了一些东西。

我在文档中找不到的另一件事是,是否可以将一个类“添加”到对象检测模型的当前类中。例如,假设mobilenet ssd v2检测到90个不同的对象类别,我想添加另一个类别,以便该模型检测91个不同的类别,而不是90个类别。据我了解并在使用对象检测API进行迁移学习后进行了测试,我只能检测到数据集中的对象,而旧类将不复存在。那我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

我发现无法将一个类“添加”到先前受过训练的类中,但是通过提供该类的少量数据,您可以让模型检测到它。原因是当应用转移学习时,模型的最后一层会更改。在我的情况下,我将3k帧标记为包含约12k对象,因为我的帧会很复杂。但是对于我在教程200-300中看到的更简单的任务,带注释的图像就足够了。

对于模型没有检测到任何东西的部分,它与我使用的convert命令有关。我应该使用tflite_convert而不是toco。我解释了更多here