【问题标题】: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 时,它会显示正确的标签

我的问题是:

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

谢谢

【问题讨论】:

    标签: tensorflow classification object-detection


    【解决方案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。我相信是的
    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    相关资源
    最近更新 更多