在标签中找到注释值 21。这大于类数

Posted

技术标签:

【中文标题】在标签中找到注释值 21。这大于类数【英文标题】:Annotation value 21 found in labels. This is greater than number of classes 【发布时间】:2019-06-20 08:21:11 【问题描述】:

从项目来看,这似乎是一个非常明显的问题,对吧?

但我发誓我有 21 个标签和 21 个课程。

所以我想我会问一下,作为一个健全性检查!

    我有大量训练图像 (640,640) 我浏览了它们并使用 DataTurks 对数据进行了注释。 据此,我创建了一组 PNG 掩码,其中我使用 255 作为空白空间,然后将 tan Int 用于相应的数字,以创建一个 NP 数组,然后转换为 png。 然后我关注了这个sagemaker example for segmentation,它似乎可以工作,直到我运行ss_model.fit

这是我开始遇到一些错误的地方。完整日志可见this Gist

第一个跳出来的错误是:

label maps not provided, using defaults.

这很奇怪,因为我相信我已经在 S3 <bucket>/label_map/train_label_map.json 中正确加载了它们

该标签映射如下所示:Gist(也许它失败了,因为它不是有效的 JSON,但是我正在复制另一个 sagemaker 示例如何使用它?)

要跳出的第二个错误是标题中的那个。

现在可能是我的面具完全错了(我对 ML 还是很陌生),但它们看起来像这样,但 640x640:

[ 
   255, 255, 255
   255, 2, 2,
   255, 2, 2
]

其中 255 为空,2 为注释。

这个错误可能是因为我没有在 label_map 中包含255: "null" 吗?

任何见解都会非常有帮助!谢谢。

【问题讨论】:

有趣的是,我删除了我的 label_map 并将类数设置为 22 以包括 225,它现在正在工作。由于 AWS 的限制,我还没有实际测试模型,但仍然不完全满意为什么地图不起作用! 【参考方案1】:

-- 但我发誓我有 21 个标签和 21 个课程。

如果您有 21 个类,则最大标签应该是 20 而不是 21,因此会引发错误。标签索引从 0 开始。可以在documentation page 中找到有关这方面的说明。

根据您对帖子的评论,如果您必须将课程数量设置为 22,您似乎有 23 个课程。num_classes 仅用于课程,不包括 255 或孔课程。请注意,如果您提供num_classes > 您的标签数量,该算法将不会出错。这是因为num_classes 参数用于创建softmax 层。如果您的num_classes 比实际看到的标签数量多,则某些标签根本无法学习。

再深入一点,link that you shared 中的标签图是错误的。标签映射只接受整数而不接受字符串。它是一个 int-int 映射。 接下来,在 S3 存储桶中拥有 label_map 是不够的,它需要在创建训练作业时作为数据通道提供给算法。

【讨论】:

以上是关于在标签中找到注释值 21。这大于类数的主要内容,如果未能解决你的问题,请参考以下文章

在图中找到最佳聚类数

类数,4,与 target_names 的大小,6 不匹配。尝试指定标签参数

ColumnDataClassifier 的最大类数

leetcode 556. 下一个更大元素 III

JPQL 在@Query 注释中检查大于小于今天的日期

thinkphp-比较标签-gt