在标签中找到注释值 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。这大于类数的主要内容,如果未能解决你的问题,请参考以下文章