我想使用.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时,它会显示正确的标签。
我的问题是:
谢谢
答案 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。任何更高的值都将被忽略。