You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mask R-CNN实现跑道滑行道分类时出现KeyError: 'names'如何解决

问题原因

这个KeyError: 'names'触发的根本原因是代码尝试读取标注区域的region_attributes下的names字段时,某条标注数据的对应位置不存在该字段。前几张图片可以正常输出objects和numids,说明大部分标注格式符合要求,只有少部分标注存在字段缺失/字段名不匹配的问题。

解决方案
  • 第一步:确认标注字段名
    打开你的标注JSON文件f11_json.json,查看任意一条region_attributes的键名,大概率是你在VIA标注工具里设置的类别属性名不是names,可能是name、class、type等其他拼写,确认后把代码第47行的['names']改成实际的键名即可。
  • 第二步:添加异常标注过滤
    如果是部分标注漏填了类别属性,可以在加载区域时先过滤掉无效标注,避免程序崩溃,修改对应代码段:
    把原来的
polygons = [r['shape_attributes'] for r in a['regions']] 
objects = [s['region_attributes']['names'] for s in a['regions']]

替换为

# 过滤掉缺失names属性的无效标注
valid_regions = [r for r in a['regions'] if 'names' in r['region_attributes']]
polygons = [r['shape_attributes'] for r in valid_regions]
objects = [s['region_attributes']['names'] for s in valid_regions]
  • 第三步:定位异常标注
    如果需要精准找到出问题的标注修正,可以在列表推导式前加调试代码,定位错误标注的位置:
# 新增调试代码,输出异常标注信息
for idx, s in enumerate(a['regions']):
    if 'names' not in s['region_attributes']:
        print(f"异常标注:图片{a['filename']}的第{idx}个区域,region内容:{s}")
其他注意事项

你代码里的assert subset in ["trainn", "vall"]存在拼写错误,trainn多了末尾的n,vall多了末尾的l,后续加载训练/验证集时会触发断言错误,建议修改为assert subset in ["train", "val"],对应数据集文件夹也改成正确命名即可。

内容的提问来源于stack exchange,提问作者engineering Baba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:57:05