您的自定义数据集的 JSON 文件是如何从 VIA 工具导出的?
根据 VIA 的版本,有两个导出选项:
(a) 使用“注释”菜单下的“导出注释(作为 JSON)”选项。生成的 JSON 仅包含位于顶层的注释数据。
或者
(b) 使用保存项目选项(软盘图标)。生成的 JSON 包含整个项目的详细信息,并且注释放置在_via_img_metadata
属性中。
根据我的经验,VIA 1.0 似乎只有 (a) 可用,而 VIA 2.0 有 (a) 和 (b)。
下面是两个 JSON 结构的屏幕截图。
matterport /Mask_RCNN代码很久没更新了,虽然评论提到了VIA 2.0,但是样本似乎还是主要基于VIA 1.0。因此,气球数据集的 JSON 结构与上面的 (a) 匹配(甚至 JSON 文件的名称 - via_region_data.json是威盛 1.0.6 给出的默认名称)。
如果不查看 JSON 文件的内容,我无法完全确定这一点,但您的自定义数据集的 JSON 文件结构很可能与预期的不匹配。基本上,我认为您已经使用选项 (b) 导出了文件,而代码需要来自 (a) 的文件。由于 (b) 不包含regions
顶级属性,因此您将获得KeyError
.
如果我是对的balloon.py
,您可以通过将(加载 JSON)的第 112 行修改为以下内容来解决问题。
annotations = json.load(open(os.path.join(dataset_dir, "via_region_data.json")))['_via_img_metadata']
快速浏览一下,来自 VIA 3.0 的 JSON 结构似乎与(a) 和 (b)完全不同。因此,尝试将 VIA 3.0 JSON 文件与示例代码一起使用也会引发KeyError
. 支持 VIA 3.0 格式需要对该load_balloon
方法进行完全修改。