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

时间:2018-09-07 12:51:27

标签: tensorflow classification object-detection

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

我做什么...

步骤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吗?我确定我在可可数据集的标签文件中看到跳过的ID。
  3. 如果可能,如何将ID设置为具有自定义值?

谢谢

1 个答案:

答案 0 :(得分:0)

我的标签图也有同样的问题。在谷歌搜索了一下之后,我在这里找到了你的问题,还有这个摘自 TensorFlow 对象检测 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。任何更高的值都将被忽略。