张量流对象检测训练中的标签文件
Posted
技术标签:
【中文标题】张量流对象检测训练中的标签文件【英文标题】:Label file in tensorflow object detection training 【发布时间】:2019-02-12 20:00:06 【问题描述】:我想使用tensorflow object detection API
创建我自己的.tfrecord
文件并将它们用于训练。记录将是原始数据集的子集,因此模型将仅检测特定类别。
我没有t understand and can
t 找到任何信息的是,在训练期间如何将 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 风格的训练测试拆分?