张量流对象检测训练中的标签文件

Posted

技术标签:

【中文标题】张量流对象检测训练中的标签文件【英文标题】:Label file in tensorflow object detection training 【发布时间】:2019-02-12 20:00:06 【问题描述】:

我想使用tensorflow object detection API 创建我自己的.tfrecord 文件并将它们用于训练。记录将是原始数据集的子集,因此模型将仅检测特定类别。 我没有t understand and cant 找到任何信息的是,在训练期间如何将 id 分配给 label_map.pbtxt 中的标签g。

我在做什么...

第 1 步: 在创建 tfrecord 文件时分配 label_id,我在其中放置了自己的 id:

'image/object/class/label': dataset_util.int64_list_feature(category_ids)
'image/object/class/text': dataset_util.bytes_list_feature(category_names)

第 2 步: 使用例如创建标签文件两大类:

item  name: "apple"  id: 53  display_name: "apple" 
item  name: "broccoli"  id: 56  display_name: "broccoli" 

第 3 步: 训练模型

训练后,检测到一些物体,但带有N/A标签当我从 1 开始设置 id 时,它会显示正确的标签

我的问题是:

    为什么它没有正确映射到带有自定义 ID 的标签? 第二个 id 的值可以不是 2 吗?我确定我在 coco 数据集的标签文件中看到了跳过的 ID。 如果可能,如何将 id 设置为自定义值?

谢谢

【问题讨论】:

【参考方案1】:

我的标签映射也有同样的问题。在谷歌搜索了一下之后,我在这里找到了你的问题以及 TensorFlow Object Detection repository 的摘录:

每个数据集都需要有一个与之关联的标签映射。此标签映射定义了从字符串类名到整数类 ID 的映射。标签映射应该是 StringIntLabelMap 文本 protobuf。样本标签图可以在 object_detection/data 中找到。 标签映射应始终从 id 1 开始

我还查看了label_map_util.py的源代码,发现了这条评论:

只有当 id-label_id_offset 为 介于 0(含)和 max_num_classes(不含)之间。 如果标签映射中有多个项目映射到同一个id, 我们只会在类别列表中保留第一个

因此,在您的示例中,它只有两个类,有效 ID 是 1 和 2。任何更高的值都将被忽略。

【讨论】:

拿一个子集怎么样。如果你有只属于 id 2 的图片,你需要重写标签映射吗? @JürgenK。我相信是的

以上是关于张量流对象检测训练中的标签文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用内置的张量流方法对特征和标签张量执行 sklearn 风格的训练测试拆分?

在 Keras 中训练对象检测模型时出现不兼容张量形状的问题

张量流模型不更新权重

如何计算张量流模型中可训练参数的总数?

张量流不训练(只有偏差改变)

如何测试我在真实图片上训练过的张量流模型?