首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >a['regions'] KeyError in balloon.py

a['regions'] KeyError in balloon.py
EN

Stack Overflow用户
提问于 2021-12-05 20:47:32
回答 2查看 609关注 0票数 -2

在balloon.py示例中的Detectron2文件中,每当我在自定义数据集上运行balloon.py时,都会得到'regions‘的KeyError。我觉得火车文件夹中的json文件出了问题,所以我首先使用了最新的VIA 3,然后使用了2.0.0。两个jsons创建相同的KeyError。

我比较了通过json进行的气球训练和通过json进行的训练,现在他们的结构是相同的,所以我想这不再是json的问题了。为什么Python不能将字符串作为键读取?

这里是balloon.py:RCNN/blob/主/样品/气球/气球。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-06 15:27:29

您的自定义数据集的JSON文件是如何从VIA工具导出的?

根据VIA的版本,有两种出口选项:

(a)在“注释”菜单下使用“导出注释(作为JSON)”选项。得到的JSON只包含注释数据,这些数据位于顶层。

(b)使用选项(软盘图标)。得到的JSON包含整个项目的详细信息,注释放在_via_img_metadata属性中。

根据我的经验,VIA 1.0似乎只有(a)可用,而VIA 2.0有(a)和(b)。

下面两个JSON结构的截图。

matterport/Mask_RCNN代码已经很长时间没有更新了,尽管评论提到了通过2.0,但示例似乎仍然在很大程度上基于VIA 1.0。因此,气球数据集的JSON结构与上面的(a)匹配(甚至JSON文件的名称- via_region_data.json是VIA 1.0.6给出的默认名称)。

如果不查看JSON文件的内容,我无法完全确定这一点,但是很可能您的自定义数据集的JSON文件结构实际上与预期的JSON文件结构不匹配。基本上,我认为您已经使用选项(b)导出了该文件,而代码则期望从(a)处导出该文件。由于(b)不包含顶层的regions属性,因此可以获得KeyError

如果我是对的,您可以通过将balloon.py(加载JSON)的第112行修改为以下内容来解决这个问题。

代码语言:javascript
复制
annotations = json.load(open(os.path.join(dataset_dir, "via_region_data.json")))['_via_img_metadata']

基于快速查看,VAS3.0中的JSON结构似乎是来自(a)和(b)的完全不同。因此,尝试在示例代码中使用VAS3.0JSON文件也会引发KeyError。支持VIA 3.0格式需要对load_balloon方法进行完全修改。

票数 0
EN

Stack Overflow用户

发布于 2021-12-05 21:21:13

您还没有给我们您的JSON,所以不可能说真的,但是扫描链接中的文件--我不认为这是您的错,balloons.py的第117行是

代码语言:javascript
复制
annotations = [a for a in annotations if a['regions']]

它(读取这一行上方的注释)看起来像是在筛选没有regions键的任何对象,但是如果不存在,它实际上只会抛出一个键错误。这一行可能应该改为

代码语言:javascript
复制
annotations = [a for a in annotations if ‘regions’ in a]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70238415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档