改进预训练的张量流对象检测模型
Improving a pre-trained tensorflow object detection model
我想在嵌入式系统中使用 tensorflow 检测汽车,所以我尝试了 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 文件,它运行良好。所以我认为这个问题与培训过程有关。也许我在那里遗漏了一些东西。
我在文档中没有找到的另一件事是,是否有可能 "add" 一个 class 到对象检测模型的当前 classes。例如,假设 mobilenet ssd v2 检测到 90 个不同的对象 classes,我想添加另一个 class 以便模型检测到 91 个不同的 classes 而不是 90 个 [=36] =]是的。据我了解并在使用对象检测 API 进行迁移学习后进行测试,我只能检测到数据集中的对象,而旧的 classes 将消失。那么我该怎么做呢?
我发现没有办法 'add' 一个 class 到以前训练过的 classes 但提供了一些 class 的数据你可以让你的模型检测到它。原因是应用迁移学习时模型的最后一层发生了变化。在我的例子中,我标记了大约 3k 帧,其中包含大约 12k 对象,因为我的帧会很复杂。但是对于我在教程中看到的更简单的任务,200-300 张带注释的图像就足够了。
而对于模型没有检测到任何东西的部分,它与我使用的转换命令有关。我应该使用 tflite_convert
而不是 toco
。我解释了更多 .
我想在嵌入式系统中使用 tensorflow 检测汽车,所以我尝试了 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 文件,它运行良好。所以我认为这个问题与培训过程有关。也许我在那里遗漏了一些东西。
我在文档中没有找到的另一件事是,是否有可能 "add" 一个 class 到对象检测模型的当前 classes。例如,假设 mobilenet ssd v2 检测到 90 个不同的对象 classes,我想添加另一个 class 以便模型检测到 91 个不同的 classes 而不是 90 个 [=36] =]是的。据我了解并在使用对象检测 API 进行迁移学习后进行测试,我只能检测到数据集中的对象,而旧的 classes 将消失。那么我该怎么做呢?
我发现没有办法 'add' 一个 class 到以前训练过的 classes 但提供了一些 class 的数据你可以让你的模型检测到它。原因是应用迁移学习时模型的最后一层发生了变化。在我的例子中,我标记了大约 3k 帧,其中包含大约 12k 对象,因为我的帧会很复杂。但是对于我在教程中看到的更简单的任务,200-300 张带注释的图像就足够了。
而对于模型没有检测到任何东西的部分,它与我使用的转换命令有关。我应该使用 tflite_convert
而不是 toco
。我解释了更多